PostgreSQL的select查询中表名中的双引号
我正在PostgreSQL中运行以下简单的select查询:PostgreSQL的select查询中表名中的双引号,postgresql,Postgresql,我正在PostgreSQL中运行以下简单的select查询: 从“信息\u架构.键\u列\u用法”中选择* 它向我提供了以下错误报告: ERROR: relation "INFORMATION_SCHEMA.KEY_COLUMN_USAGE" does not exist LINE 1: SELECT * FROM "INFORMATION_SCHEMA.KEY_COLUMN_USAGE" ^ ********** Error **********
从“信息\u架构.键\u列\u用法”中选择*
它向我提供了以下错误报告:
ERROR: relation "INFORMATION_SCHEMA.KEY_COLUMN_USAGE" does not exist
LINE 1: SELECT * FROM "INFORMATION_SCHEMA.KEY_COLUMN_USAGE"
^
********** Error **********
ERROR: relation "INFORMATION_SCHEMA.KEY_COLUMN_USAGE" does not exist
SQL state: 42P01
Character: 15
但当我运行以下查询时,它会成功运行:
SELECT*FROM INFORMATION\u SCHEMA.KEY\u COLUMN\u用法
同样,当我从自己创建的表中选择时,情况正好相反。以下一项失败:
从countryTable中选择*
而下面一个运行成功
从“countryTable”中选择*
为什么会这样?问题是什么?您可能创建了表,以便:
CREATE TABLE "countryTable" (
id SERIAL NOT NULL,
country TEXT NOT NULL,
PRIMARY KEY(id)
);
如果要创建一个用“
包装的表空间,通常不应在postgres中对表名或列使用双引号,请尝试不使用双引号:
CREATE TABLE countryTable (
id SERIAL NOT NULL,
country TEXT NOT NULL,
PRIMARY KEY(id)
);
然后你就可以使用这个查询了,你已经从countryTable中选择了*
当您查看psql(\d tbl
)中的表定义,或pg_类中的表名,或pg_属性中的列名,或任何视图时,都会得到拼写正确的标识符(以及通过双引号保留的所有其他异常)。您可以使用quote_ident()
根据需要自动引用此类名称-仅在必要时添加双引号
Postgres本身并没有愚蠢到使用驼峰大小写名称。信息架构或系统目录中的所有对象都是小写的(系统表和列的名称,而不是它们作为数据携带的用户表的名称)
从基础开始,阅读。假设我正在查询其他人创建的数据库。那么我怎么知道我是否需要添加双引号呢?如果他们是一家提供服务的公司,我可能会与他们交谈,并强调这是一种不好的做法,事实上,你现在的处境是,你不知道你是否应该使用双引号,唯一的方法是尝试和猜测,这可能不是这家公司想要的。如果是你可以访问的或是你公司内部的,我会备份数据库,将表名更改为标准格式,然后删除旧表并上传新表。简短的回答据我所知,如果你不尝试每一个表,那就没有办法知道了。双引号标识符区分大小写,非引号标识符折叠成小写(但标准规定它们应该折叠成大写)。您可以从psql
中\d tablename
查看列、表、。。。他们真的被称为。