Посмотри на --variable=
в http://www.postgresql.org/docs/current/static/app-psql.html
Например.
psql -d somedb -U someuser -f yourscript.sql --variable=Foo=foobar
В вашем сценарии вы можете иметь:
UPDATE sometable SET somecol = :Foo;
Вопрос
Обновление: эта конкретная проблема не связана с сценариями PSQL. Переменные в включенных сценариях интерполируются, как и ожидалось. Фактическая задача является результатом использования переменных PSQL внутри кавычек $$ в определениях функций SQL и описано в этом вопросе.
Я использую переменные PSQL, чтобы установить некоторые параметры (имена таблиц, значения) из командной строки в довольно длинном скрипте SQL. Сценарий стал слишком длинным, и я разделил его на несколько частей и включил их в основной сценарий, используя \ir subscript.sql
синтаксис. Однако переменные из основного сценария не передаются в подписки. Это странно, потому что в документации говорится, что \i file
является эквивалентом печати файла на клавиатуре, то есть среда скрипта должна быть сохранена.
Есть ли простой способ передать переменные в прилагаемые сценарии в PSQL?
Я использую PSQL версию 9.3.1.
Решение
Посмотри на --variable=
в http://www.postgresql.org/docs/current/static/app-psql.html
Например.
psql -d somedb -U someuser -f yourscript.sql --variable=Foo=foobar
В вашем сценарии вы можете иметь:
UPDATE sometable SET somecol = :Foo;