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

如何在psql的\copy命令行中直接传入SQL文件作为执行内容

实现psql \copy 传入SQL文件的无长度限制方案

之前的同类解决方案本质是将SQL文件内容直接展开到命令行参数中,受操作系统最大命令行长度(ARG_MAX)约束,SQL文件较大时就会报错。以下方案可完全规避该问题:

推荐方案:标准输入流传递命令

该方案不需要将SQL内容放到命令行参数中,所有指令通过流传递给psql,无论SQL文件体积多大都可正常运行:

  • 基础执行命令:
{ echo "\copy ("; cat 你的SQL文件路径; echo ") TO './test.csv' WITH CSV"; } | psql 你的数据库名
  • 适配带分号的SQL文件的命令:
    如果你的SQL文件末尾带有多余分号,可自动移除避免语法错误,同时可根据需要添加HEADER参数导出表头:
{ echo "\copy ("; sed 's/;$//' 你的SQL文件路径; echo ") TO './test.csv' WITH CSV HEADER"; } | psql 你的数据库名
  • 优势:不需要对SQL中的特殊字符做额外转义,兼容性远高于-c参数传入方案。

轻量方案(仅适用于小型SQL文件)

如果SQL文件内容较短,不需要考虑长度限制,可直接用简化写法:

psql 你的数据库名 -c "\copy ($(< 你的SQL文件路径)) TO './test.csv' WITH CSV"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:00