PostgreSQL / psql meta-command 默默地失败并且不插入行

PostgreSQL / psql meta-command silently fails and doesn't insert rows

我通过 psql 命令创建了一个 SQL 文件 I 运行,大致如下所示:

truncate table my_table; 
\set content `cat /workdir/test.json` insert into my_table values ('test_row', :'content');

第一行与问题有点无关,除了它确实打印出“TRUNCATE TABLE”这一事实,所以它正在读取 运行ning SQL 文件正确的,至少最初是这样。但是,永远不会创建插入行,table 始终为空。但是没有弹出错误信息。

JSON 文件有一个有效值(即使我将其缩减为超级基本 {})。我也试过直接传递 sql 命令(只是为了覆盖我的基础,只用一个 '' 试过了,同样,三个它给出了无效的命令错误):

psql [...] -c "\set content `cat /workdir/test.json` insert into my_table values ('test_row', :'content')"

同样,没有输出消息,也没有创建新行。但是,不使用元命令 \set 确实有效。例如:

psql [...] -c "insert into my_table values ('test_row', '{}')"

元命令 \set 似乎有一些不喜欢的地方,但没有任何错误信息,不确定我做错了什么。

脚本和数据库都运行在同一个虚拟机上。也就是说,脚本可以通过 'localhost' 调用主机,我认为 filesystem/filepaths 应该是相同的。

A psql 元命令(以反斜杠开头的东西)在行尾终止;你不能在同一行上有 SQL 语句。

一行写\set,另一行写INSERT

如果要使用 psql-c 选项,请使用多个 -c 选项:

psql -c "\set ..." -c "INSERT ..."