当前位置: 首页 > 面试题库 >

PostgreSQL错误:42P01:关系“表”不存在

郏兴贤
2023-03-14
问题内容

我在使用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作为对象名。



 类似资料: