首页 > 解决方案 > PostgreSQL / psql 元命令静默失败并且不插入行

问题描述

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

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

第一行与问题有些无关,除了它确实打印出“TRUNCATE TABLE”这一事实,因此它正在正确读取和运行 SQL 文件,至少最初是这样。但是,永远不会创建插入行,表始终为空。然而没有错误消息弹出。

JSON 文件具有有效值(即使我将其缩减为 super basic {})。我也尝试过直接传递 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', '{}')"

似乎 meta-command 有一些它不喜欢的东西\set,但是没有任何错误信息,不确定我做错了什么。

脚本和数据库都在同一个虚拟机上运行。也就是说,脚本可以通过'localhost'调用主机,并且文件系统/文件路径应该是相同的,我认为,如果这很重要。

标签: postgresqlpsql

解决方案


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

\set在一行中,INSERT在另一行中。

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

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

推荐阅读