Как выполнить запрос из psql, не дожидаясь результата?

9

Мой запрос (для создания новой таблицы из существующей таблицы) занимает очень много времени. Поэтому я установил удаленную базу данных в моем офисе - там больше оперативной памяти.

Я могу подключиться к своей базе данных из дома, как обычно, с помощью PSQL.

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

(postgresql-9.2, среда Linux)

Изменить: я открыт для других решений, нет необходимости использовать PSQL

user528025
источник

Ответы:

6

Поскольку вы заявляете, что открыты для других решений, я мог бы предложить взглянуть на терминальные мультиплексоры, такие как screen или tmux . На мой взгляд, tmux - лучший выбор благодаря своему уникальному названию (легче получать релевантные хиты в поисковых системах).

По сути, этот вид программного обеспечения позволяет вам отсоединиться от оболочки и затем возобновить сеанс.

c0dem4gnetic
источник
1
Работает ли tmuxтак: «Смогу ли я завершить работу своего локального компьютера, и запрос все еще обрабатывается на удаленном сервере»?
Дезсо
Да, сеанс запущен на удаленной машине - перебои с питанием или потеря интернет-соединения не являются проблемой (в отношении удаленного сеанса :)). Обратите внимание, что вам нужно запустить процесс из оконечного мультиплексора (afaik).
c0dem4gnetic
Можете ли вы дать рекомендации о том, как это реализовано? psqlэто клиентское программное обеспечение работает Thats на локальном компьютере, а затем tmuxделает sshподключение к удаленной машине под управлением сервера Postgres? Если это так, я, к сожалению, понял, что это не будет работать с экземпляром Redshift без запуска EC2.
Мерлин
@Merlin tmux работает на удаленной машине и устанавливает сеанс оболочки. Именно от этого вы отделяетесь и привязываетесь. При локальном запуске psql вы можете запустить его в сеансе tmux, но соединение с клиентом поддерживается только до тех пор, пока позволяют условия сети - так же, как обычный сеанс ssh.
c0dem4gnetic
@ c0dem4gnetic Я думаю, что psql все еще должен быть установлен на удаленном сервере. Похоже, локальный tmux -> EC2 + tmux + psql входит в redshift / postgres db, чтобы поддержать сеанс.
Мерлин
8

Вы можете попробовать отправить psqlв фоновом режиме:

psql -f your_sql_file.sql &

Или, подключившись к локальной БД, вы можете использовать dblinkдля отправки запроса на удаленную БД:

SELECT dblink_connect('your_connection_name', 'your_connection_string');
SELECT dblink_send_query('your_connection_name', 'your_query');

Обратите внимание, что одновременно dblink_send_queryможно отправлять только один запрос. Итак, если вы хотите запустить несколько операторов SQL, это не ваше решение.

Или вы можете запустить pg_agentзадание на удаленном сервере, которое не требует ручного вмешательства, поэтому состояние вашего домашнего ящика не влияет на выполнение задания. То же самое может быть достигнуто путем создания cron(или даже лучше, at- спасибо, Эрвин) задания по выполнению вашего сценария.

Кроме того, если у вас есть длительное задание, которое вы запускаете вручную, вы можете запустить screenсеанс на сервере и запустить файл оттуда. В этом случае вы можете выйти из системы и вернуться домой, и скрипт продолжит работу.

Dezso
источник
pg_agent выглядит достаточно многообещающе. Я попробую и обновлю результаты.
user528025
3
Или, для одноразовой операции, atкоманда может служить вам лучше, чем cron.
Эрвин Брандштеттер