[英]PostgreSQL / psql meta-command silently fails and doesn't insert rows
我創建了一個 SQL 文件,我通過 psql 命令運行,大致如下所示:
truncate table my_table;
\set content `cat /workdir/test.json` insert into my_table values ('test_row', :'content');
第一行與該問題有些無關,除了它確實打印出“TRUNCATE TABLE”這一事實,因此它正在正確讀取和運行 SQL 文件,至少最初是這樣。 但是,永遠不會創建插入行,表始終為空。 然而沒有錯誤消息彈出。
JSON 文件具有有效值(即使我將其縮減為超級基本{}
)。 我也試過直接傳遞 sql 命令(只是為了覆蓋我的基礎,只用一個''和同樣的,三個它給出無效的命令錯誤):
psql [...] -c "\\set content `cat /workdir/test.json` insert into my_table values ('test_row', :'content')"
同樣,沒有 output 消息,沒有創建新行。 但是不使用元命令\set
確實有效。 例如:
psql [...] -c "insert into my_table values ('test_row', '{}')"
似乎它不喜歡元命令\set
,但沒有任何錯誤信息,不確定我做錯了什么。
腳本和數據庫都在同一個虛擬機上運行。 也就是說,腳本可以通過'localhost'調用主機,並且文件系統/文件路徑應該是相同的,我認為,如果這很重要。
psql
元命令(以反斜杠開頭的東西)在行尾終止; 您不能在同一行上有 SQL 語句。
將\set
寫在一行中,將INSERT
寫在另一行中。
如果要使用psql
的-c
選項,請使用多個-c
選項:
psql -c "\\set ..." -c "INSERT ..."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.