Jak wykonać zapytanie z psql bez czekania na wynik?

9

Moje zapytanie (aby utworzyć nową tabelę z istniejącej tabeli) zajmuje bardzo dużo czasu. Więc skonfigurowałem zdalną bazę danych w moim biurze - jest tam więcej pamięci RAM.

Mogę połączyć się z moją bazą danych z domu jak zwykle za pomocą psql.

Jak mogę powiedzieć zdalnemu serwerowi, aby wykonał moje zapytanie z terminala bez konieczności oczekiwania na odpowiedź?

(postgresql-9.2, środowisko Linux)

Edycja: Jestem otwarty na inne rozwiązania, nie trzeba używać psql

użytkownik528025
źródło

Odpowiedzi:

6

Ponieważ twierdzisz, że jesteś otwarty na inne rozwiązania, mógłbym zasugerować spojrzenie na terminale multipleksujące, takie jak screen lub tmux . Moim zdaniem tmux jest lepszym wyborem ze względu na swoją unikalną nazwę (łatwiejsze do uzyskania trafień w wyszukiwarkach).

Zasadniczo tego rodzaju oprogramowanie pozwala odłączyć się od powłoki, a następnie wznowić sesję.

c0dem4gnetic
źródło
1
Czy tmuxdziała to w ten sposób: „Czy będę mógł zamknąć moją maszynę lokalną, a zapytanie nadal będzie przetwarzane na zdalnym serwerze?”
dezso
Tak, sesja działa na zdalnym komputerze - przerwa w dostawie prądu lub utrata połączenia internetowego nie jest problemem (w odniesieniu do sesji zdalnej :)). Pamiętaj, że musisz rozpocząć proces z poziomu multipleksera terminali (afaik).
c0dem4gnetic
czy możesz podać wskazówki, w jaki sposób jest to realizowane? psqlczy oprogramowanie klienckie działa na komputerze lokalnym, a następnie tmuxnawiązuje sshpołączenie z komputerem zdalnym, na którym działa serwer Postgres? Jeśli tak jest, niestety zdałem sobie sprawę, że to nie będzie działać z instancją Redshift bez uruchomionego EC2.
Merlin,
@Merlin tmux działa na zdalnym komputerze i ustanawia sesję powłoki. To właśnie z tego odłączacie się i przywiązujecie. Podczas lokalnego uruchamiania psql możesz uruchomić go w sesji tmux, ale połączenie klienta jest utrzymywane tylko tak długo, jak pozwalają na to warunki sieciowe - tak jak normalna sesja ssh.
c0dem4gnetic
@ c0dem4gnetic i myślę, że psql musi być nadal zainstalowany na zdalnym serwerze. Wygląda na to, że lokalne tmux -> EC2 + tmux + psql loguje się do redshift / postgres db, aby utrzymać sesję przy życiu.
Merlin,
8

Możesz spróbować wysłać psqlw tle:

psql -f your_sql_file.sql &

Lub, łącząc się z lokalną bazą danych, możesz użyć dblinkdo wysłania zapytania do zdalnej bazy danych:

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

Pamiętaj, że dblink_send_querymożesz wysłać tylko jedno zapytanie naraz. Więc jeśli chcesz uruchomić wiele instrukcji SQL, to nie jest twoje rozwiązanie.

Lub możesz rozpocząć pg_agentzadanie na zdalnym serwerze, co nie wymaga ręcznej interwencji, dlatego stan twojego urządzenia domowego nie ma wpływu na uruchomienie zadania. To samo można osiągnąć, ustawiając cron(lub jeszcze lepiej at- dzięki Erwin) zadanie wykonania skryptu.

Ponadto, jeśli masz długo działające zadanie, które uruchamiasz ręcznie, możesz rozpocząć screensesję na serwerze i uruchomić plik z tego miejsca. W takim przypadku możesz się wylogować i wrócić do domu, a skrypt będzie działał dalej.

dezso
źródło
pg_agent wygląda wystarczająco obiecująco. Spróbuję i zaktualizuję wyniki.
user528025
3
Lub, dla jednorazowej operacji, atpolecenie może ci służyć lepiej niż cron.
Erwin Brandstetter,