Как выполнить несколько запросов с помощью команды 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;"
Может ли кто-нибудь помочь мне и сказать мне правильный способ сделать это?
Ответы
Ответ 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 строка)