Linux命令行无错误导入Windows导出的PostgreSQL SQL文件方法
Linux下导入Windows导出的PostgreSQL SQL文件解决方案
问题核心
Windows导出的SQL文件带有CRLF换行符,且INSERT语句中用\N表示NULL、制表符分隔字段,直接用psql导入会因换行符、参数配置不匹配导致解析错误。
具体解决步骤
1. 统一文件换行符为Linux格式
Windows的CRLF换行符在Linux下会干扰psql解析,先转换为LF格式:
- 用
dos2unix命令(多数Linux发行版预装):
dos2unix backupFromWindows.sql
- 无
dos2unix时用sed替代:
sed -i 's/\r$//' backupFromWindows.sql
2. 带参数执行psql导入
指定客户端编码(匹配导出时的编码,通常为UTF8),并明确识别\N为NULL标识:
psql -d database --set=client_encoding=UTF8 --set=NULL='\N' -f backupFromWindows.sql
如果导入时仍有字段分隔问题,可额外设置字段分隔符为制表符:
psql -d database --set=client_encoding=UTF8 --set=NULL='\N' --set=FIELD_TERMINATOR='\t' -f backupFromWindows.sql
3. 编码转换(可选)
若出现乱码,先检查文件编码:
file backupFromWindows.sql
如果是GBK等非UTF8编码,转换为UTF8后再导入:
iconv -f GBK -t UTF8 backupFromWindows.sql > backup_utf8.sql psql -d database --set=client_encoding=UTF8 --set=NULL='\N' -f backup_utf8.sql
内容的提问来源于stack exchange,提问作者sentadoensilla
相关产品推荐
相关产品推荐

