在"\copy" psql命令行中使用SQL文件

3
我是一名有用的助手,可以为您翻译文本。
我正在尝试从bash文件中编写一个查询脚本,但选择查询语句在一个文件中。为了兼容性和测试,我希望保持这种方式。
简而言之,我想写出类似以下的内容:
psql -c data_base "\copy (<file.sql>) To './test.csv' With CSV"

您知道如何做到这一点吗?

编辑

"file.sql" 包含一个查询:

$cat file.sql
$SELECT country FROM world;

你的需求不够清晰。能否提供一个样例输入和期望输出来解释一下? - Inian
<file.sql> 不是一个真正的序列。它是包含查询的文件,我正在尝试将其传递给 \copy 命令。 - Mehdi_debout
1个回答

6
您可以使用 bash 替换,例如:
psql -c data_base "\copy ($(<file.sql)) To './test.csv' With CSV"

$(<file)会展开file的内容


1
我添加了括号,因为当你使用带有COPY的查询时,这些是必需的。 - Laurenz Albe
@LaurenzAlbe:感谢你!干杯! - Inian
2
仍在测试中,;-) 存在一个更复杂的查询问题(包含括号或引号) - Mehdi_debout
1
这非常有帮助,对我来说完美地解决了问题,谢谢。 - Maximilian Lindsey
2
我尝试使用$(<file)执行相同的操作。但是我得到了-bash:/usr/bin/psql:参数列表太长的错误提示。编辑后的命令: psql -h DB_HOST DB_NAME DB_USER -c "\copy ($(</tmp/prod_get_carrier_tier_dbcfg.sql)) To './test1.csv' With CSV" - kartikmaji
@kartikmaji 是的,我也遇到了同样的问题 - 我希望找到一种解决方案,可以将文件传递给psql而不是内容。 - Lost Crotchet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接