加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:13:33 所属栏目:百科 来源:网络整理
导读:我在使用PostgreSQL 9.3时遇到了这个奇怪的问题,这些表是使用qoutes创建的.例如,如果我使用qoutes创建一个表: create table "TEST" ("Col1" bigint); 正确创建表,我可以看到在pgAdminIII的SQL窗格中查看时会保留引号.但是当我查询数据库以找到所有可用表的
我在使用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作为对象名称.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读