PostgreSQL新手求助:将MySQL CSV导入语句转换为PostgreSQL可用语句
把MySQL的CSV导入语句转换成PostgreSQL版本
嘿,作为刚接触PostgreSQL的新手,从MySQL转过来找对应语法确实会有点懵!别担心,PostgreSQL用COPY(或者客户端专属的\copy)命令来实现类似的CSV导入功能,下面直接给你对应语句,再拆解每个部分的对应关系:
对应你需求的PostgreSQL语句
如果你的CSV文件在客户端本地(和你运行psql的机器同一台),用这个psql专属的\copy命令(和MySQL的LOAD DATA LOCAL行为最匹配):
\copy calculations.pricing FROM '/home/d/docs/DB.csv' WITH ( FORMAT csv, DELIMITER ',', QUOTE '"', HEADER false -- 如果你的CSV第一行是表头,改成true );
如果文件在PostgreSQL服务器所在机器上,且PostgreSQL进程有读取权限,用服务器端的COPY命令:
COPY calculations.pricing FROM '/home/d/docs/DB.csv' WITH ( FORMAT csv, DELIMITER ',', QUOTE '"', HEADER false );
与原MySQL语句的参数对应关系
让你清楚每个部分怎么转:
LOAD DATA LOCAL INFILE '/path/to/file'→ 客户端文件用\copy ... FROM '/path/to/file',服务器端文件用COPY ... FROM '/path/to/file'INTO TABLE calculations.pricing→ 直接把表名放在COPY/\copy后面FIELDS TERMINATED BY ','→ 对应DELIMITER ','ENCLOSED BY '"'→ 对应QUOTE '"'LINES TERMINATED BY '\n'→ PostgreSQL的FORMAT csv默认会自动识别换行符,一般不需要额外指定;如果必须强制用\n,可以加NEWLINE '\n'参数到WITH子句里
额外注意事项
- 权限问题:服务器端的
COPY需要PostgreSQL系统用户(通常是postgres)能读取目标文件;而\copy用的是你当前操作系统用户的权限,更适合本地导入场景。 - NULL值处理:如果你的CSV里用
\N表示NULL(MySQL默认的方式),需要在WITH子句里加上NULL '\N',否则PostgreSQL会把\N当成普通字符串。 - 表头处理:如果你的CSV第一行是列名,记得把
HEADER false改成HEADER true,这样PostgreSQL会跳过第一行并匹配列名。
内容的提问来源于stack exchange,提问作者D. Make
相关产品推荐
相关产品推荐

