Як виконати запит з psql, не чекаючи результату?


9

Мій запит (створити нову таблицю з існуючої таблиці) займає дуже багато часу. Тому я створив віддалену базу даних у своєму кабінеті - більше оперативної пам’яті.

Я можу підключитися до своєї бази даних з дому, як завжди, за допомогою psql.

Як я можу сказати віддаленому серверу виконати запит з терміналу, не чекаючи відповіді?

(postgresql-9.2, середовище Linux)

Редагувати: я відкритий для інших рішень, не потрібно використовувати psql

Відповіді:


6

Оскільки ви заявляєте, що ви відкриті для інших рішень, я б запропонував переглянути термінальні мультиплексори, такі як екран або tmux . На мою думку, tmux - кращий вибір завдяки унікальній назві (простіше отримувати відповідні звернення в пошукових системах).

По суті, цей тип програмного забезпечення дозволяє відірватися від оболонки та пізніше відновити сеанс.


1
Чи tmuxпрацює так: "Чи зможу я вимкнути свою локальну машину, і запит все ще буде оброблений на віддаленому сервері"?
дезсо

Так, сеанс працює на віддаленій машині - відключення живлення або втрата підключення до Інтернету - це не проблема (що стосується віддаленого сеансу :)). Зауважте, що процес потрібно запускати з термінального мультиплексора (afaik).
c0dem4gnetic

чи можете ви надати вказівки, як це реалізується? psqlце клієнтське програмне забезпечення, яке працює на вашій локальній машині, а потім 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сеанс на сервері та запустити файл звідти. У цьому випадку ви можете вийти з системи та повернутися додому, а сценарій буде продовжувати працювати.


pg_agent виглядає досить перспективно. Я спробую це і оновити результати.
користувач528025

3
Або для разової операції atкоманда може служити вам краще, ніж cron.
Ервін Брандштеттер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.