PostgreSQL中使用COPY命令如何忽略换行符与回车符?
PostgreSQL COPY FROM PROGRAM 拉取URL数据去换行解决方案
错误原因
- 单引号转义错误:PostgreSQL字符串内嵌套单引号需要用两个单引号做转义,原有写法存在转义不规范问题
- 工具兼容性问题:Windows系统默认没有
tr命令(该命令为Linux/Unix系统原生),无法识别会导致进程退出码255 - 遗漏回车符处理:原有写法仅删除了换行符
\n,没有处理回车符\r
修复方案
方案1:适配带Unix工具的Windows环境
如果你的Windows已经安装了Git Bash、GnuWin32等包含tr命令的运行环境,直接修正转义和过滤规则即可:
COPY "routing_import_gm" ("request") FROM PROGRAM 'curl "https://maps.googleapis.com/maps/api/directions/json?origin=48.xxxxxx,+11.xxxxxx&destination=48.xxxxxx,+11.xxxxxx&departure_time=1637535600&key=**********" | tr -d ''\r\n''';
注意:需确保
curl和tr的安装路径已加入Windows系统环境变量,且PostgreSQL运行的服务账号有这两个工具的执行权限。
方案2:Windows原生PowerShell实现(无需额外安装工具)
用PowerShell原生命令实现网络请求和去换行操作,兼容性更强:
COPY "routing_import_gm" ("request") FROM PROGRAM 'powershell -Command "(Invoke-WebRequest -Uri ''https://maps.googleapis.com/maps/api/directions/json?origin=48.xxxxxx,+11.xxxxxx&destination=48.xxxxxx,+11.xxxxxx&departure_time=1637535600&key=**********'' -UseBasicParsing).Content -replace ''[\r\n]'', '''' "';
调试技巧
如果执行后仍报错,可先将PROGRAM后包裹的命令单独复制到Windows CMD或PowerShell中运行,确认能正常输出无换行的JSON内容后,再放到COPY命令中执行,可快速定位问题来源。
内容的提问来源于stack exchange,提问作者Tibor
相关产品推荐
相关产品推荐

