PostgreSQL查询和区分大小写

时间:2014-10-15 19:25:24

标签: python sql postgresql psycopg2 amazon-redshift

我想在查询中为列名指定区分大小写的别名,但PostgreSQL只是忽略别名中的任何大小写并将其保留为小写。我知道它以小写形式存储所有内容,但我只想在查询中使用区分大小写的别名。任何方式让它工作?在查询执行巨大的字典集之后手动重命名东西听起来很荒谬。

更新:重要提示 - 我正在使用Amazon Redshift。亚马逊有可能限制它吗?

实施例

select superid from supertable;  
...  
cursor.execute(query)  
results = cursor.fetchall()    
for row in results:
  print row['superid']  
// ^ WORKING

------------------------

select superid as "superId" from supertable;
...

cursor.execute(query)
results = cursor.fetchall()
for row in results:
  print row['superId']
// ^ NOT WORKING

2 个答案:

答案 0 :(得分:0)

试试看,它可能与本地化有关。尝试使用不包含“I”的不同表或列名称。不是superId可能只是超级。

答案 1 :(得分:0)

这确实是一个Redshift的事情。使用混合案例非常挑剔。虽然使用混合大小写的SELECT语句可以使用JDBC连接器正常工作,但它会忽略您通过SQL内部使用混合大小写的尝试以及API,这就是我认为psycopg使用的。

我遇到了一个无法使用COPY命令加载数据的问题,因为我无法使用任何大写字符创建列名。无论如何,COPY在从一个红移表到另一个红色表的工作正常,但是来自S3的COPY没有。

我在列名称周围尝试过双引号,但Redshift忽略了它们,而我的本地postgres实例工作得很好,并使用我的文字引用字符串和大小写混合。

作为参考,我的问题(和答案)就在这里。

Does case matter when 'auto' loading data from S3 into a Redshift table?

希望有所帮助,即使它不是你所希望的答案。