为啥 psql 找不到现有表的关系名称?

Posted

技术标签:

【中文标题】为啥 psql 找不到现有表的关系名称?【英文标题】:Why psql can't find relation name for existing table?为什么 psql 找不到现有表的关系名称? 【发布时间】:2013-02-20 16:39:41 【问题描述】:

这是我目前的状态。

Eonil=# \d+
                       List of relations
 Schema |    Name    | Type  | Owner |    Size    | Description 
--------+------------+-------+-------+------------+-------------
 public | TestTable1 | table | Eonil | 8192 bytes | 
(1 row)

Eonil=# \d+ TestTable1
Did not find any relation named "TestTable1".
Eonil=# 

有什么问题,如何查看表定义?

【问题讨论】:

关注帖子:***.com/questions/40865564/… 【参考方案1】:

Postgres psql 需要对大写字母进行转义。

Eonil=# \d+ "TestTable1"

所以这很好用。

Eonil=# \d+ "TestTable1"
                   Table "public.TestTable1"
 Column |       Type       | Modifiers | Storage  | Description 
--------+------------------+-----------+----------+-------------
 ID     | bigint           | not null  | plain    | 
 name   | text             |           | extended | 
 price  | double precision |           | plain    | 
Indexes:
    "TestTable1_pkey" PRIMARY KEY, btree ("ID")
    "TestTable1_name_key" UNIQUE CONSTRAINT, btree (name)
Has OIDs: no

Eonil=# 

【讨论】:

未加引号的标识符(例如表名和列名)在 PostgreSQL 中被折叠为小写,请注意标准规定它们应该大写,因此 PostgreSQL 在这里是非标准的。如果您在特定情况下需要您的标识符,或者如果它们包含空格,那么您必须任何地方将它们双引号。推荐的做法是在 PostgreSQL 中使用带有下划线分隔的单词的小写标识符,这样您就不必关心引用或大小写问题。 感谢您的解释。无论如何,作为一名应用程序程序员——而不是专业的 DBA——我喜欢这种明确的行为,如果它在这些细微的差异上吐出错误就更好了。

以上是关于为啥 psql 找不到现有表的关系名称?的主要内容,如果未能解决你的问题,请参考以下文章

修改现有表的架构时出现“找不到对象”错误

我找不到我的链表的错误(为啥我的头指针在移动?)

为啥“找不到要导入的项目”?

为啥找不到 Swift 4 语言的 Xcode 目标 c 接口标题名称

尽管运行“npm i @types/node --global”,为啥我得到“找不到名称'NgModule'”?

为啥我会收到“找不到数据源名称且未指定默认驱动程序”,我该如何解决?