我在使用PostgreSQL 9.3处理使用qoutes创建的表时遇到了一个奇怪的问题.例如,如果我使用qoutes创建一个表:

create table "TEST" ("Col1" bigint);

该表已正确创建,在pgAdminIII的SQL窗格中查看时,我可以看到引号已保留.但是,当我查询DB以查找所有可用表的列表(使用下面的查询)时,我发现结果中的表名周围没有引号.

select table_schema, table_name from information_schema.tables where not table_schema='pg_catalog' and not table_schema='information_schema';

因为表是用引号创建的,所以我不能直接使用从上面的查询返回的表名,因为它是不带引号的,并且会在标题中的POST中抛出错误.

我可以try 在所有查询中用引号括住表名,但我不确定它是否一直有效.我正在寻找一种方法来获取在结果中引用了引号的表名列表.

我对列名也有同样的问题,但我希望如果我能找到一个解决表名问题的方法,类似的方法也会适用于列名.

推荐答案

你有两个 Select :

我强烈建议不要使用引号,让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.

Postgresql相关问答推荐

列索引8上的扫描错误,名称已复制:不支持扫描,正在存储驱动程序.值类型[]uint8到类型*[]*bool

如何诊断字符编码问题

PostgreSQL 不删除旧的 WAL 档案

数据库所有者无法授予 Select 权限

有没有办法使用postgresql将具有不同ID的同一行多次添加到表中?

在 KnexJS 中插入

postgres 的密码

Rails:创建删除表级联迁移

Java - 日期保存为前一天

PostgreSQL ORDER BY 问题 - 自然排序

如何在 psycopg2 中使用服务器端游标

更详细地解释 JOIN 与 LEFT JOIN 和 WHERE 条件性能建议

当记录包含 json 或字符串的混合时,如何防止 Postgres 中的invalid input syntax for type json

Select 中的 PostgreSQL 正则表达式捕获组

将主键更改为自动递增

如何创建 postgres 数据库模式的 sql 脚本?

将属性添加到 Sequelize FindOne 返回的对象

仅在存在时重命名列

如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作

使用 Postgresql 数据库(OSX Lion)创建 Rails 3.1 应用程序