Postgresql 为什么可以';我看不到表的列名吗?

Postgresql 为什么可以';我看不到表的列名吗?,postgresql,Postgresql,所以我通过编程制作了一些表格,我想验证一下它的结构是否符合我的想法 >Rocko=# \c Rocko Password for user Rocko: psql (8.4.4, server 8.4.8) You are now connected to database "Rocko". Rocko=# \d List of relations Schema | Name | Type | Owner --------+--------

所以我通过编程制作了一些表格,我想验证一下它的结构是否符合我的想法

>Rocko=# \c Rocko
Password for user Rocko:
psql (8.4.4, server 8.4.8)
You are now connected to database "Rocko".
Rocko=# \d
            List of relations
 Schema |     Name     |   Type   | Owner
--------+--------------+----------+-------
 public | Email        | table    | Rocko
 public | Email_id_seq | sequence | Rocko
 public | Test         | table    | Rocko
 public | Test_id_seq  | sequence | Rocko
 public | User         | table    | Rocko
 public | User_id_seq  | sequence | Rocko
(6 rows)
例如,我希望看到Test中的列

Rocko=#\d测试

未找到任何名为“Test”的关系。


等等?!测试结果是否显示在“关系列表”下?这是怎么回事?

PostgreSQL默认情况下将不带引号的标识符(如表名和列名)转换为小写;标准说标识符应该规范化为大写,但这在这里并不重要。所以,当你这么说的时候:

\d Test
PostgreSQL认为与
\d test
相同。您可能有一个用引号括起来的名称创建的表:

create table "Test" ( ...
因此,它的名称区分大小写,每次引用时都必须引用(使用双引号)。所以试着引用一下这个名字:

\d "Test"

描述表文本给出了什么?或者更好的是,不要对标识符使用双引号。然后,您可以随意在标识符中混合大小写,所有内容都将折叠为小写,您将永远不必重复引用标识符或遇到类似这样的错误。当然,您必须重命名以这种笨拙方式创建的现有对象。当然,你必须远离——无论如何,你都应该远离。@Erwin:你不会从我这里得到任何论据的。但很难与现有的数据库、公司政策和现实中其他不幸的部分争论。从好的方面来看,这并不是典型的MySQL backtick疯狂行为。感谢上帝赐予我们小小的怜悯谢谢你!我只是问了同样的问题,然后我发现:-)