You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL创建表时如何保留大小写?能否通过引擎参数设置?

PostgreSQL全大写对象名自动转小写的问题解决

可以通过配置参数解决,但需注意参数生效条件,也有更灵活的替代方案:

问题原因

PostgreSQL默认会将未加双引号的标识符(表名、列名、约束名等)转换为小写存储,这是其对SQL标准大小写不敏感规则的实现方式,和你习惯的全大写编写方式冲突,导致带schema前缀的查询出现匹配问题。

解决方法

1. 双引号包裹标识符(推荐,无需修改参数)

在创建对象和查询时,用双引号包裹全大写的对象名,PostgreSQL会严格保留原始大小写:
创建表语句:

CREATE TABLE "T_CUSTOMERS" (
    "CUS_ID" SERIAL NOT NULL,
    "CUS_LASTNAME" VARCHAR(36) NOT NULL,
    "CUS_FIRSTNAME" VARCHAR(36) NOT NULL,
    "CUS_REG_DATE" DATE NOT NULL,
    CONSTRAINT "PK_CUS_ID" PRIMARY KEY ("CUS_ID")
);

查询时同样需要用双引号:

SELECT * FROM public."T_CUSTOMERS";

这种方法无需修改数据库配置,适合已运行的数据库,也能完全保留你全大写的编码习惯。

2. 初始化集群时设置lower_case_table_names参数

如果是新建的PostgreSQL集群,可以在初始化(执行initdb)时指定参数,强制所有对象名转为小写存储,同时查询时自动匹配大小写:

initdb --lower-case-table-names=1 -D /your/data/directory

参数取值说明:

  • 1:所有对象名(包括加引号的)都会转为小写存储,查询时不区分大小写,你写全大写的SQL语句会自动匹配小写的对象。
  • 注意:该参数只能在初始化集群时设置,创建集群后无法修改,会影响整个集群的所有数据库。

内容的提问来源于stack exchange,提问作者Corpus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:58:13