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

如何在DataGrip中正确跨PostgreSQL数据库复制表(解决列名大小写问题)

PostgreSQL导入CSV保留列名大小写的正确操作

PostgreSQL默认会把未用双引号包裹的标识符(表名、列名)自动转为小写,这就是你遇到createdAt变成createdat的核心原因。以下是具体解决方法:

一、提前创建匹配大小写的目标表(推荐)

先在新数据库中创建和原表列名大小写完全一致的表,所有列名必须用双引号包裹,确保PostgreSQL严格保留大小写格式:

CREATE TABLE your_table (
    "id" SERIAL PRIMARY KEY,
    "createdAt" TIMESTAMP NOT NULL,
    "updatedAt" TIMESTAMP,
    "userName" VARCHAR(100)
    -- 按原表结构补充其他列,列名均需用双引号包裹
);

然后用\copy(普通用户可用)或COPY(需超级权限)导入CSV,指定读取表头:

# psql终端执行\copy命令
\copy your_table FROM '/path/to/your_data.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',', ENCODING 'UTF8');
# 超级用户使用COPY命令
COPY your_table FROM '/path/to/your_data.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',', ENCODING 'UTF8');

二、直接从CSV导入并保留列名

如果不想提前建表,需先修改CSV的表头:把每个列名用双引号包裹(比如原表头createdAt,updatedAt改为"createdAt","updatedAt"),然后执行导入命令,PostgreSQL会自动创建带大小写列名的表:

\copy your_new_table FROM '/path/to/quoted_header.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',', QUOTE '"');

三、导出CSV时的注意事项(避免后续踩坑)

从原数据库导出CSV时,要让表头列名带双引号,防止大小写信息丢失:

\copy your_source_table TO '/path/to/exported_data.csv' WITH (FORMAT CSV, HEADER true, DELIMITER ',', QUOTE '"', FORCE_QUOTE *);

四、修复已导入的小写列名

如果已经导入了列名全小写的表,可通过ALTER TABLE修改列名(同样要用双引号包裹目标列名):

ALTER TABLE your_table RENAME COLUMN createdat TO "createdAt";
ALTER TABLE your_table RENAME COLUMN updatedat TO "updatedAt";

注意:后续查询这些列时,必须用双引号包裹列名,否则PostgreSQL会自动转为小写,导致找不到对应列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:00:03