PostgreSQL错误:42P01:关系“表”不存在
技术问答
327 人阅读
|
0 人回复
|
2023-09-14
|
我在使用PostgreSQL 9.3和使用qoutes创建的表时遇到了一个奇怪的问题。例如,如果我使用qoutes创建表:' h+ w0 W; u4 J- `( t- s
create table "TEST" ("Col1" bigint);& m; F& |. m7 Q6 h% n2 J& h
该表已正确创建,在pgAdminIII的SQL窗格中查看该引号时,可以看到保留了引号。但是,当我查询数据库以查找所有可用表的列表时(使用下面的查询),我看到结果不包含表名的引号。
, o' F+ U! J8 W( B0 j4 {select table_schema, table_name from information_schema.tables where not table_schema='pg_catalog' and not table_schema='information_schema';
) m+ d% w8 \# t4 E% z由于该表是用引号创建的,因此我无法直接使用上述查询返回的表名,因为该表名未加引号,并在标题中引发错误。
8 Q7 G" e0 o y+ s/ ^/ q1 s我可以尝试在所有查询中用引号将表名引起来,但是我不确定它是否始终有效。我正在寻找一种获取结果中带引号的表名列表的方法。' R8 u+ Q% x# ~: _
我在列名方面也遇到了同样的问题,但我希望,如果我能找到表名问题的解决方案,那么类似的解决方案也适用于列名。4 Y# a( r( j, b, [0 @
) X3 U: X2 ^$ X8 l, |" T \解决方案:: f& d% ~3 E5 |% {+ `; m
& Y! ^% l' \ c; a# O
0 W! @1 T' n7 A# ~# f# o
$ a0 ^. L! S9 ^# u' E
您有两种选择:-不加引号:然后所有内容将自动为小写且不区分大小写-带引号:从现在开始,所有内容均区分大小写。8 Q7 N' v1 j2 F1 C+ \0 t$ k' w
我强烈建议不要使用引号,并使PostgreSQL的行为不区分大小写。它使生活变得如此轻松。一旦引用完您就可以在任何地方使用它,因为PostgreSQL将开始变得非常精确。1 T# b3 G3 j0 Q
一些例子:( D+ ~8 R% E: x: m
TEST = test Test 真正尝试不惜一切代价避免这种骗术。保留7位ascii作为对象名。 |
|
|
|
|
|