У меня есть файл .sql с некоторыми линиями, которые выглядят следующим образом:Как вставлять команды из нескольких строк оболочки в Psql файл
\set buf `cat example-message.msg | base4 -w0`
SELECT * FROM run_select(:'buf');
Однако это скрывает содержание example-message.msg
и делает мой файл (который фактически список тестовых случаев) менее читабельны, чем хотелось бы. В идеале я смог бы вставить содержимое example-message.msg
. Но это большой многострочный файл.
Я попытался с помощью здесь докторантами:
\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 в пределах backticks.
Есть ли какой-нибудь другой метод, который мне не хватает?
Спасибо за ответ! Хотя вы решили вопрос как поставленный, фактическая команда, которую я запускаю, имеет более длинный конвейер, чем просто base64. Я думаю, вы правы, что это единственный ответ, хотя я закончил тем, что написал функцию C, которая выкладывается, и позволяет мне вставлять строки с $$-deliminated, как вы предложили. – num1