我有一些線條看起來像這樣的.sql文件:如何PSQL文件中嵌入多行的shell命令
\set buf `cat example-message.msg | base4 -w0`
SELECT * FROM run_select(:'buf');
然而,這隱藏了example-message.msg
內容,使我的文件(這是實際上是一個測試用例列表)比我想要的更不可讀。理想情況下,我可以在線內容example-message.msg
。但它是一個大型的多行文件。
我在這裏使用-docs的嘗試:
\set buf `cat <<EOF | base64 -w0
plan { }
EOF
`
然而,這裏的psql抱怨一個未終止引用的字符串,並在事後the docs說,這無論如何都不會工作。 (But in any case, the arguments of a meta-command cannot continue beyond the end of the line.
)
接下來我考慮以某種方式建立其上執行字符串:
SELECT $$
plan: {}
$$ AS rawbuf \gset
\set buf `echo :rawbuf | base64 -w0`
這也不管用,原因是顯而易見的。但我似乎無法得到任何變化的工作。我想在反引號內psql doesn't do variable substitution。
有沒有其他的方法我錯過了?
謝謝爲了答案!雖然你已經解決了這個問題,但我正在運行的實際命令的流水線比base64更長。我認爲你是對的,儘管這是唯一的答案,但我最終編寫了一個C函數,它可以讓我嵌入$$字符串,正如你所建議的那樣。 – num1