結果を待たずにpsqlからクエリを実行する方法は?


9

(既存のテーブルから新しいテーブルを作成するための)クエリに非常に長い時間がかかります。そこで、オフィスにリモートデータベースをセットアップしました-RAMを増やします。

通常どおり、psqlを使用して自宅からデータベースに接続できます。

応答を待たずにターミナルからクエリを実行するようにリモートサーバーに指示するにはどうすればよいですか?

(postgresql-9.2、Linux環境)

編集:私は他のソリューションにオープンです、psqlを使用する必要はありません

回答:


6

あなたは他のソリューションに心を開いていると言っているので、screentmuxなどのターミナルマルチプレクサーを検討することをお勧めします。私の意見では、tmuxはその一意の名前(検索エンジンで関連するヒットを取得しやすい)のため、より良い選択です。

基本的に、この種のソフトウェアでは、シェルから切り離して、後でセッションを再開できます。


1
tmuxこのように機能しますか:「ローカルマシンをシャットダウンできますが、クエリはリモートサーバーで引き続き処理されます」?
dezso 2012年

はい、セッションはリモートマシンで実行されています。停電やインターネット接続の切断は問題ではありません(リモートセッションに関して:))。端末マルチプレクサ(afaik)内からプロセスを開始する必要があることに注意してください。
c0dem4gnetic 2012年

これを実装する方法のガイダンスを提供できますか?psqlクライアントソフトウェアのthatsは、その後、ローカルマシン上で実行されてtmux作っているsshのpostgresサーバを実行しているリモートマシンへの接続を?その場合、悲しいことに、EC2が実行されていないRedshiftインスタンスではこれが機能しないことに気づきました。
マーリン

@Merlin tmuxはリモートマシンで実行され、シェルセッションを確立します。着脱するのはこれからです。ローカルでpsqlを実行すると、tmuxセッションで実行できますが、クライアント接続は、通常のsshセッションと同じように、ネットワーク状態が許す限り保持されます。
c0dem4gnetic

@ c0dem4gnetic私はまだpsqlがリモートサーバーにインストールされている必要があると思います。ローカルtmux-> EC2 + tmux + psqlがredshift / postgres dbにログインしてセッションを維持しているようです。
マーリン

8

psqlバックグラウンドへの送信を試すことができます。

psql -f your_sql_file.sql &

または、ローカルDBに接続しdblinkて、リモートDBにクエリをディスパッチするために使用できます。

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

dblink_send_query一度に1つのクエリしか送信できないことに注意してください。したがって、複数のSQLステートメントを実行する場合、これはソリューションではありません。

または、pg_agent手動の介入を必要としないリモートサーバーでジョブを開始できます。そのため、ホームボックスの状態はジョブの実行に影響を与えません。同じことは、スクリプトを実行するcron(またはさらに良いことにat、Erwin)ジョブを設定することによって実現できます。

さらに、手動で開始する実行時間の長いジョブがある場合screenは、サーバーでセッションを開始し、そこからファイルを実行できます。この場合、ログオフして家に帰れば、スクリプトは引き続き実行されます。


pg_agentは十分に有望に見えます。試して結果を更新します。
user528025 2012年

3
または、1回限りの操作の場合、atコマンドはcronよりも役立つ場合があります。
Erwin Brandstetter、2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.