省略双引号在PostgreSQL上进行查询
-
27-10-2019 - |
题
一个简单的问题,是否可以在PostgreSQL中省略双引号?
这里是一个示例,给出了select * from A;
,我将检索ERROR: relation "a" does not exist
,然后必须给出select * from "A";
才能获得真实的结果。
有什么办法不做第二个,而是在PostgreSQL上做第一个?
解决方案
您在创建表时就开始出现此查询的问题。创建表格时,请勿使用引号。
使用此: 通用标签
不是这样的: 通用标签
后者会使其生效,因此您以后总是必须引用它。前者使它成为普通名称,您可以使用SELECT * FROM a;
或SELECT * FROM A;
如果不能仅重新创建表,请使用ALTER TABLE
语法:
通用标签
其他提示
双引号
为避免需求将表命名为“ a”
Postgresql具有某些特殊行为引用和区分大小写:将每个未引用的标识符折叠成小写(也在创建时),然后区分大小写。
仅当标识符(表名,列名等)(在架构创建时)使用大写字母(部分或全部)且在双引号之间定义时,才需要使用标识符中的双引号。
在这种情况下(我建议您这样做),当您使用该标识符时,必须以相同的方式键入它:区分大小写(键入的大小写字母与定义的完全相同)并在双引号之间。
在其他情况下,您可以使用不带引号的标识符,并且始终不区分大小写。
不要在表名或列名中使用大写字母,如果您使用的是此类,则postgres将需要双引号来访问它。
请在此处中查看详细的说明。
PostgreSQL服务器表名称区分大小写,但默认情况下被强制为小写:当您键入CREATE TABLE AAA
时,它将在执行查询之前变为CREATE TABLE aaa
。
双引号名称保持大小写不变,因此在CREATE TABLE "AaA"
之后,您将获得表AaA
表,并且必须一次又一次将其双引号括起来。
不知道他们为什么这样做:)