Подтвердить что ты не робот

Как выполнить несколько запросов с помощью команды psql из оболочки bash?

Мне нужно выполнить postgresql-запросы из командной строки с помощью команды psql -c. Для каждой команды psql он открывает новое соединение tcp для подключения к серверу базы данных и выполнения запроса, который является накладными расходами для большого количества запросов.

В настоящее время я могу выполнить один запрос следующим образом:

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table;"

Когда я попытался выполнить несколько запросов, как показано ниже, но был выполнен только последний запрос.

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table; SELECT * FROM abc_table;"

Может ли кто-нибудь помочь мне и сказать мне правильный способ сделать это?

4b9b3361

Ответ 1

-c обрабатывает только одну команду. Без него, однако, psql ожидает, что команды будут переданы в стандартный ввод, например:

psql -U postgres -h <ip_addr> <database_name> << EOF
SELECT * FROM xyz_table;
SELECT * FROM abc_table;
EOF

Или используя echo и трубы.

Ответ 2

Используя echo и трубку, чтобы поместить ее в одну строку:

echo 'SELECT * FROM xyz_table; \n SELECT * FROM abc_table' | psql -U postgres 

Ответ 3

Параметр --file выполняет содержимое файла

psql -U postgres -h <ip_addr> -f "my_file.psql"

Все выходные данные будут отправляться на стандартный вывод

http://www.postgresql.org/docs/current/static/app-psql.html

Ответ 4

по крайней мере из 9.6.2 этот подход также работает:

psql -c "select now()" -c "select version()" -U postgres -h 127.0.0.1

теперь

2017-12-26 20: 25: 45.874935 + 01 (1 строка)

версия

PostgreSQL 9.6.2 на x86_64-pc-linux-gnu, скомпилированный gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-разрядный (1 строка)