sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLトリガーからメールを送信するにはどうすればよいですか?

    いつものように優れたdepeszの記事とpg-message-queueを参照してください。

    データベースから直接電子メールを送信することは、良い考えではないかもしれません。 DNSの解決が遅く、すべてが30秒間ハングしてからタイムアウトした場合はどうなりますか?メールサーバーが不安定で、5分かかる場合はどうなりますか メッセージを受け入れるには? max_connections になるまで、データベースセッションがトリガーでハングアップします。 突然、待つか、手動でトランザクションをキャンセルし始める以外に何もできなくなります。

    私がお勧めするのは、トリガーを NOTIFYにすることです。 LISTEN 永続的に実行され、DBに接続されたままのヘルパースクリプトを作成します(ただし、トランザクションでは接続されません)。

    トリガーが行う必要があるのは、 INSERTだけです。 行をキューテーブルに入れ、 NOTIFYを送信します 。スクリプトはNOTIFYを取得します LISTENに登録されているためメッセージ そのために、キューテーブルを調べて、残りを実行します。

    ヘルパープログラムは、便利な言語で書くことができます。私は通常、Pythonを psycopg2で使用します 。

    そのスクリプトは、データベースで見つけた情報に基づいて電子メールを送信できます。 PL / PgSQLですべての醜いテキストフォーマットを行う必要はありません。代わりに、より強力なスクリプト言語のテンプレートに置き換えて、 NOTIFY> 入ってくる。

    このアプローチでは、ヘルパーは各メッセージを送信してから、キューテーブルから情報を削除することができます。そうすれば、メールシステムに一時的な問題が発生して送信が失敗した場合でも、情報が失われることはなく、成功するまで情報の送信を試みることができます。

    データベースでこれを本当に行う必要がある場合は、PgMailを参照してください。



    1. サポートされていないキーワード:メタデータ

    2. Postgresqlの日時フィールドの日付を比較するにはどうすればよいですか?

    3. SQL ServerでSAアカウントを無効にする(T-SQLの例)

    4. MySQLクイックヒント:DAYOFWEEK関数の使用