我在使用Postgresql 9.3时遇到了这个奇怪的问题,这些表是使用qoutes创建的.例如,如果我使用qoutes创建一个表:
create table "TEST" ("Col1" bigint);
正确创建表,我可以看到在pgAdminIII的sql窗格中查看时会保留引号.但是当我查询数据库以找到所有可用表的列表(使用下面的查询)时,我看到结果不包含表名周围的引号.
select table_schema,table_name from information_schema.tables where not table_schema='pg_catalog' and not table_schema='information_schema';
由于表是使用引号创建的,因此我不能直接使用从上面的查询返回的表名,因为它没有引用,并在标题中发布错误.
你有两个选择:
– 没有引号:那么一切都将自动为小写且不区分大小写
– 引号:从现在开始,一切都是区分大小写的.
– 没有引号:那么一切都将自动为小写且不区分大小写
– 引号:从现在开始,一切都是区分大小写的.
我强烈建议不要使用引号并使Postgresql表现为非区分大小写.它让生活变得如此简单.一旦你进入引用,你必须随时使用它,因为Postgresql将开始非常精确.
一些例子:
TEST = test <-- non case sensitive "Test" <> Test <-- first is precise,second one is turned to lower case "Test" = "Test" <-- will work "test" = TEST <-- should work; but you are just lucky.
真的试图不惜一切代价避免这种诡计.保留7位ascii作为对象名称.