为啥 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 找不到现有表的关系名称?的主要内容,如果未能解决你的问题,请参考以下文章