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

PostgresイベントトリガーからSQLテキストを取得する方法

    PostgreSQL 9.5以降、関数pg_event_trigger_ddl_commands() ddl_command_endで使用できます イベントトリガー。 TAGの使用 フィルタ。ALTERされたテーブルの処理に使用できます。 object_identity (またはobjid )は、どのテーブルが変更されたかを知るという元の問題を解決するために使用できます。完全なコマンドの取得に関しては、それも利用可能ですが、内部タイプはpg_ddl_commandです。 。

    CREATE TABLE t (n INT);
    
    CREATE FUNCTION notice_event() RETURNS event_trigger AS $$
    DECLARE r RECORD;
    BEGIN
        FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP
            RAISE NOTICE 'caught % event on %', r.command_tag, r.object_identity;
        END LOOP;
    END;
    $$
    LANGUAGE plpgsql;
    
    CREATE EVENT TRIGGER tr_notice_alter_table
      ON ddl_command_end WHEN TAG IN ('ALTER TABLE')
      EXECUTE PROCEDURE notice_event();
    
    ALTER TABLE t ADD c CHAR;
    

    出力:NOTICE: caught ALTER TABLE event on public.t




    1. SQL Serverトランザクションログ—パート1

    2. Liquibase / PostgreSQL:テーブルケースを正しく保存する方法は?

    3. MSAccessのデータベースの破損と対処方法

    4. NVARCHAR(MAX)の最大文字数はいくつですか?