postgresql - 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'调用主机,并且文件系统/文件路径应该是相同的,我认为,如果这很重要。
解决方案
元命令(以反斜杠开头的psql
东西)在行尾终止;您不能在同一行上有一条 SQL 语句。
写\set
在一行中,INSERT
在另一行中。
如果要使用 的-c
选项psql
,请使用几个-c
选项:
psql -c "\\set ..." -c "INSERT ..."
推荐阅读
- javascript - Angular 6 Image 构建问题
- c# - 使用 GroupBy 显示自定义信息
- responsive - 使用对象适合封面的响应式整页横幅
- javascript - 如何使用 Vue-draggable 和 Vuex 将一个列表动态拆分为多个列表?
- php - 如何在 PHP 邮件功能中使用密件抄送发送多封邮件
- webpack - 使用 csv-loader 加载 csv 文件失败
- javascript - 如何使用cordova-plugin-filepath?
- python - 使用未按预期工作的关键参数按频率排序
- arrays - 如何替换字符串中的匹配字符?(红宝石)
- android - 如何最好地部署 Android 应用程序并允许更新