Установить search_path с файлом в команде postgres psql

Как включить несколько путей поиска в команду psql, чтобы можно было запускать несколько файлов с разными поисковыми путями, но все они должны выполняться в одной транзакции?

psql
  --single-transaction
  --command="set search_path = 'a' i /sqlfile/a.sql; set search_path = 'b' i /sqlfile/b.sql;"

Когда я запускаю это, я получаю синтаксическую ошибку в i . Мне нужно, чтобы файлы были включены отдельно, и они генерируются динамически, поэтому я предпочитаю запускать его с помощью команды --command чем при необходимости генерировать файл и использовать --file .

Всего 1 ответ


Руководство по опции --command :

command должна быть либо командной строкой, которая полностью анализируется сервером (т. е. не содержит никаких специальных функций для psql), либо одной командой обратного слэша. Таким образом, вы не можете смешивать мета-команды SQL и psql в опции -c . Чтобы достичь этого, вы можете использовать повторные опции -c или передать строку в psql [...]

Смелый акцент мой.

Пытаться:

psql --single-transaction -c 'set search_path = a' -c 'i /sqlfile/a.sql' -c 'set search_path = b' -c 'i /sqlfile/b.sql'

Или используйте здесь-документ :

psql --single-transaction <<EOF
set search_path = a;
i /sqlfile/a.sql
set search_path = b;
i /sqlfile/b.sql
EOF

Для search_path нужны кавычки, кстати.


Есть идеи?

10000