Redshift表列名自动转小写问题:如何保留原始大小写
解决Redshift表列名无法保留原始大小写的问题
这问题我之前帮团队里的小伙伴踩过坑!Redshift默认的标识符处理规则确实会让没加引号的列名自动转成小写,要保留原始驼峰或混合大小写,得用双引号来约束。
问题根源
Redshift遵循PostgreSQL的标识符规范:当你创建表时,如果列名没有用双引号包裹,系统会自动把它转为小写存储。这就是为什么你定义的userName变成了username,userLastName变成了userlastname。
解决方案
1. 创建表时给列名加双引号
在定义列名的时候,用英文双引号把需要保留大小写的列名括起来,这样Redshift就会严格保留原始的大小写格式。示例SQL:
CREATE TABLE test_users ( user_id INT, -- 这个列名是小写,不需要引号也没问题 "userName" VARCHAR(50), "userLastName" VARCHAR(50) );
2. 查询时同样要用双引号引用列名
后续查询这些列的时候,必须同样用双引号包裹,否则Redshift会自动把你写的列名转成小写,导致找不到对应的列。示例查询SQL:
SELECT user_id, "userName", "userLastName" FROM test_users;
注意事项
- 双引号必须是英文半角的,中文引号会直接报错。
- 一旦使用了带引号的列名,所有涉及该列的操作(查询、更新、JOIN关联等)都必须保持双引号引用,否则会出现
column does not exist的错误。 - 如果需要保留表名的原始大小写,同样可以给表名加双引号,比如
CREATE TABLE "Test_Users" (...),但一般不建议这么做,容易增加后续操作的混淆成本。 - Redshift的带引号标识符最大长度为128个字符,定义列名时要注意不要超出这个限制。
内容的提问来源于stack exchange,提问作者Pankaj Kumar
相关产品推荐
相关产品推荐

