PythonでPostgreSQLイベントトリガーを効率よく使用する方法

PostgreSQLのイベントトリガーはデータベースのイベント(INSERT, UPDATE, DELETEなど)に応じて特定のアクションを自動的に実行する仕組みです。この記事では、PythonでPostgreSQLのイベントトリガーをどのように使用するのか、その基本から応用まで詳しく解説します。

目次

イベントトリガーとは

イベントトリガーは、データベースで特定のイベントが発生した際に自動的に起動するプログラムです。これにより、例えばレコードが追加されたときに自動的にその内容をログに書き込む、といった処理が簡単に実装できます。

PostgreSQLでのイベントトリガーの種類

PostgreSQLでは主に以下のようなイベントトリガーが存在します。

  • AFTER INSERT
  • AFTER UPDATE
  • AFTER DELETE
  • BEFORE INSERT
  • BEFORE UPDATE
  • BEFORE DELETE

Pythonでのイベントトリガーの基本的な使用方法

PythonでPostgreSQLのイベントトリガーを使用する場合、通常はpsycopg2というライブラリを使います。

環境設定

まずは、psycopg2をインストールしましょう。

pip install psycopg2

データベース接続

データベースに接続する基本的なコードは以下の通りです。

import psycopg2

# データベース接続
conn = psycopg2.connect(database="dbname", user="user", password="password", host="host", port="port")

イベントトリガーの設定

次に、イベントトリガーを設定します。以下のSQLコードは、新しいレコードが追加された後にトリガーが起動する例です。

# イベントトリガーのSQL
trigger_sql = """
CREATE TRIGGER example_trigger
AFTER INSERT ON example_table
FOR EACH ROW EXECUTE FUNCTION example_function();
"""

# SQLの実行
with conn.cursor() as cur:
    cur.execute(trigger_sql)
    conn.commit()

応用例1: ログを自動で生成する

新しいレコードが追加されたら、その内容をログテーブルに自動で追加するといった処理も可能です。

コード

# ログ生成用のトリガー関数SQL
trigger_function_sql = """
CREATE OR REPLACE FUNCTION add_log()
RETURNS TRIGGER AS $$
BEGIN
    INSERT INTO log_table (action, table_name, record_id) VALUES ('INSERT', 'example_table', NEW.id);
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
"""

# トリガーの設定
trigger_sql = """
CREATE TRIGGER log_trigger
AFTER INSERT ON example_table
FOR EACH ROW EXECUTE FUNCTION add_log();
"""

# SQLの実行
with conn.cursor() as cur:
    cur.execute(trigger_function_sql)
    cur.execute(trigger_sql)
    conn.commit()

応用例2: メール通知を行う

特定の条件でレコードが追加・更新された場合に、メール通知を送るといった処理も実装できます。

コード

import smtplib
from email.mime.text import MIMEText

# メール送信用のトリガー関数
def send_email_trigger(record):
    subject = "New Record Added"
    body = f"A new record with ID {record['id']} was added."

    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = "sender@example.com"
    msg["To"] = "receiver@example.com"

    with smtplib.SMTP("smtp.example.com", 587) as server:
        server.login("user", "password")
        server.send_message(msg)

まとめ

PythonとPostgreSQLのイベントトリガーを使用することで、高度なデータ処理や自動化が可能です。独自のビジネスロジックや通知システムを効率よく構築できるでしょう。

コメント

コメントする

目次