【问题标题】:Amazon Redshift query and case sensitivityAmazon Redshift 查询和区分大小写
【发布时间】:2014-12-10 23:58:32
【问题描述】:

我想为查询中的列名分配区分大小写的别名,但 PostgreSQL 只是忽略别名中的任何大小写并将其保留为小写。我知道它以小写形式存储所有内容,但我只想在查询中区分大小写别名。有什么办法让它工作吗?在对巨大的 dict 集执行查询后手动重命名内容听起来很荒谬。

更新:重要提示 - 我使用的是 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

【问题讨论】:

  • 我无法复制它。使用col_name as FOO(无引号)将FOO 去大写,但col_name as "FOO"(带引号)似乎没有。
  • 如果您希望标签区分大小写,请在标签周围使用双引号。
  • 如果我在查询中使用单引号,那么我在查询中收到错误,如果我在 getitem 中使用双引号,那么它会抛出同样的错误。我试图检查结果列表的键,它们都是小写的,与查询中的大小写无关。也许这是亚马逊的红移限制,我对此添加了注释。仍在寻求帮助。
  • Redshift 目前还不支持。 /耸肩
  • [重新标记]。顺便说一句:一般建议是不要依赖区分大小写。 (直到现在,我从未意识到这也可以应用于别名)

标签: python sql postgresql psycopg2 amazon-redshift


【解决方案1】:

只是尝试一下,可能是关于本地化。尝试使用不包含“I”的不同表名或列名。不是 superId 可能只是超级。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    希望对您有所帮助,即使这不是您希望的答案。

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 2021-03-22
      • 2013-04-25
      • 2013-11-08
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多