SQL中何时需用双引号包裹表名?PostgreSQL相关疑问解答
PostgreSQL标识符大小写敏感性说明
这是PostgreSQL的核心特性,严格遵循SQL标准中关于标识符大小写的规则:
- PostgreSQL默认会把未加双引号的标识符(表名、列名、函数名等)自动转换为小写后存储。比如执行
CREATE TABLE Athletes (id int);,实际在数据库中存储的表名是athletes,此时查询时写SELECT * FROM Athletes;或SELECT * FROM athletes;都能正常运行,因为PostgreSQL会自动把未加引号的Athletes转为小写匹配。 - 如果创建表时用双引号包裹标识符,比如
CREATE TABLE "Athletes" (id int);,PostgreSQL会保留标识符的原始大小写(即存储为Athletes)。这种情况下,查询时必须用双引号包裹表名,否则PostgreSQL会把Athletes转为athletes去查找,自然会报relation does not exist的错误。
简单来说,问题的根源不是数据库创建时自定义的规则,而是创建表时是否使用双引号决定了标识符的大小写敏感行为——这是PostgreSQL遵循SQL标准的特性。
内容的提问来源于stack exchange,提问作者Digvijay Patil
相关产品推荐
相关产品推荐

