psql, флагом -c указывая текст запроса, и через флаг -v (он же --set) задавать в запросе переменную которую можно менять из шелла.
Пробую следующие варианты:
1)
psql -h 127.0.0.1 -U user -d my_base -c "select (:'lolshto')" -v lolshto '1'
Результат: ERROR: syntax error at or near ":"
LINE 1: select (:'lolshto')
2)
psql -h 127.0.0.1 -U user -d my_base
-c "select :'lolshto'" -v lolshto '1'
Результат: ERROR: syntax error at or near ":"
LINE 1: select :'lolshto'
3)
psql -h 127.0.0.1 -U user -d my_base
-c "select :lolshto" -v lolshto '1'
Результат: ERROR: syntax error at or near ":"
LINE 1: select :lolshto
При этом, если подцепиться к базе на постоянной основе (то есть, без флагов -c и -v), то желаемое получается:
\set lolshto '1'
select (:'lolshto');
?column?
----------
1
(1 row)
Нужен именно вариант с -c и -v, чтобы кидать батчи из баша, подставляя генерирующуюся в нём переменную
так не выйдет, для -c не включается. (я не помню где встречал подтверждения, но сам натыкался.) вам надо: - либо писать временные файлы и использовать -f - либо использовать перенаправление: psql -v lol=1 < <( echo "SELECT :'lol'::text;" ) - либо пользоваться полноценным heredoc-ом: cat <<EOS | psql -v lol=1 SELECT :'lol'; EOS
Обсуждают сегодня