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

PostgreSQLで特定のテーブルのすべてのトリガーを一覧表示する3つの方法

    PostgreSQLで特定のテーブルのトリガーを一覧表示するための3つのオプションを次に示します。

    information_schema.triggers 表示

    このビューには、現在のユーザーが所有しているか、 SELECT以外の特権を持っている現在のデータベース内のすべての関数とプロシージャが含まれています。 の上。

    このビューの列の1つは、 event_object_tableです。 、トリガーが定義されているテーブルの名前が含まれています。

    したがって、このビューを使用して、次のような特定のテーブルのトリガーを取得できます。

    SELECT
        trigger_schema,
        trigger_name,
        event_manipulation,
        action_statement
    FROM information_schema.triggers
    WHERE event_object_table = 'film';

    結果の例:

    +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
    | trigger_schema |     trigger_name      | event_manipulation |                                          action_statement                                          |
    +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
    | public         | film_fulltext_trigger | INSERT             | EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') |
    | public         | film_fulltext_trigger | UPDATE             | EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description') |
    | public         | last_updated          | UPDATE             | EXECUTE FUNCTION last_updated()                                                                    |
    +----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+

    ビューが返すのは、現在のユーザーが所有しているか、 SELECT以外の特権を持っているトリガーのみを返すためです。 オンの場合、結果のリストは、テーブルで定義されている実際のトリガーのサブセットのみを表すことができます。

    pg_trigger カタログ

    pg_catalog.pg_trigger カタログはテーブルとビューにトリガーを格納します。これは、現在のユーザーが所有している、またはトリガーに限定されません。> SELECT on:

    SELECT 
        tgname AS trigger_name
    FROM 
        pg_trigger
    WHERE
        tgrelid = 'public.film'::regclass
    ORDER BY
        trigger_name;

    結果の例:

    +------------------------------+
    |         trigger_name         |
    +------------------------------+
    | RI_ConstraintTrigger_a_24890 |
    | RI_ConstraintTrigger_a_24891 |
    | RI_ConstraintTrigger_a_24900 |
    | RI_ConstraintTrigger_a_24901 |
    | RI_ConstraintTrigger_a_24915 |
    | RI_ConstraintTrigger_a_24916 |
    | RI_ConstraintTrigger_c_24907 |
    | RI_ConstraintTrigger_c_24908 |
    | RI_ConstraintTrigger_c_24912 |
    | RI_ConstraintTrigger_c_24913 |
    | film_fulltext_trigger        |
    | last_updated                 |
    +------------------------------+

    ソースを取得するために、 pg_procを含めることができます クエリで表示:

    SELECT 
        t.tgname,
        p.prosrc 
    FROM 
        pg_trigger t JOIN pg_proc p ON p.oid = t.tgfoid
    WHERE
        t.tgrelid = 'public.film'::regclass
    ORDER BY
        t.tgname;

    結果の例:

    +------------------------------+------------------------------------------+
    |            tgname            |                  prosrc                  |
    +------------------------------+------------------------------------------+
    | RI_ConstraintTrigger_a_24890 | RI_FKey_restrict_del                     |
    | RI_ConstraintTrigger_a_24891 | RI_FKey_cascade_upd                      |
    | RI_ConstraintTrigger_a_24900 | RI_FKey_restrict_del                     |
    | RI_ConstraintTrigger_a_24901 | RI_FKey_cascade_upd                      |
    | RI_ConstraintTrigger_a_24915 | RI_FKey_restrict_del                     |
    | RI_ConstraintTrigger_a_24916 | RI_FKey_cascade_upd                      |
    | RI_ConstraintTrigger_c_24907 | RI_FKey_check_ins                        |
    | RI_ConstraintTrigger_c_24908 | RI_FKey_check_upd                        |
    | RI_ConstraintTrigger_c_24912 | RI_FKey_check_ins                        |
    | RI_ConstraintTrigger_c_24913 | RI_FKey_check_upd                        |
    | film_fulltext_trigger        | tsvector_update_trigger_byid             |
    | last_updated                 |                                         +|
    |                              | BEGIN                                   +|
    |                              |     NEW.last_update = CURRENT_TIMESTAMP;+|
    |                              |     RETURN NEW;                         +|
    |                              | END                                      |
    +------------------------------+------------------------------------------+

    pg_proc.prosrcの内容に注意してください columnは、実装言語/呼び出し規約に依存します。これには、解釈された言語の関数の実際のソースコード、リンクシンボル、ファイル名、またはその他のあらゆるものが含まれている可能性があります。

    \ dS コマンド

    psqlを使用する場合、 \ dS コマンドは、テーブルやビューなどについて、それらに対して定義されているトリガーを含む情報をすばやく取得する方法です。

    このコマンドにテーブル名を追加して、そのテーブルに関する情報だけを返すことができます。

    \dS film

    結果の例:

    +----------------------+-----------------------------+-----------+----------+---------------------------------------+
    |        Column        |            Type             | Collation | Nullable |                Default                |
    +----------------------+-----------------------------+-----------+----------+---------------------------------------+
    | film_id              | integer                     |           | not null | nextval('film_film_id_seq'::regclass) |
    | title                | character varying(255)      |           | not null |                                       |
    | description          | text                        |           |          |                                       |
    | release_year         | year                        |           |          |                                       |
    | language_id          | smallint                    |           | not null |                                       |
    | original_language_id | smallint                    |           |          |                                       |
    | rental_duration      | smallint                    |           | not null | 3                                     |
    | rental_rate          | numeric(4,2)                |           | not null | 4.99                                  |
    | length               | smallint                    |           |          |                                       |
    | replacement_cost     | numeric(5,2)                |           | not null | 19.99                                 |
    | rating               | mpaa_rating                 |           |          | 'G'::mpaa_rating                      |
    | last_update          | timestamp without time zone |           | not null | now()                                 |
    | special_features     | text[]                      |           |          |                                       |
    | fulltext             | tsvector                    |           | not null |                                       |
    +----------------------+-----------------------------+-----------+----------+---------------------------------------+
    Indexes:
        "film_pkey" PRIMARY KEY, btree (film_id)
        "film_fulltext_idx" gist (fulltext)
        "idx_fk_language_id" btree (language_id)
        "idx_fk_original_language_id" btree (original_language_id)
        "idx_title" btree (title)
    Foreign-key constraints:
        "film_language_id_fkey" FOREIGN KEY (language_id) REFERENCES language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT
        "film_original_language_id_fkey" FOREIGN KEY (original_language_id) REFERENCES language(language_id) ON UPDATE CASCADE ON DELETE RESTRICT
    Referenced by:
        TABLE "film_actor" CONSTRAINT "film_actor_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT
        TABLE "film_category" CONSTRAINT "film_category_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT
        TABLE "inventory" CONSTRAINT "inventory_film_id_fkey" FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT
    Triggers:
        film_fulltext_trigger BEFORE INSERT OR UPDATE ON film FOR EACH ROW EXECUTE FUNCTION tsvector_update_trigger('fulltext', 'pg_catalog.english', 'title', 'description')
        last_updated BEFORE UPDATE ON film FOR EACH ROW EXECUTE FUNCTION last_updated()
    のフィルムを更新する前
    1. T-SQLで日付順に並べ替える方法

    2. IN値リストによる注文

    3. MySQLデータベースにデータを挿入するにはどうすればよいですか?

    4. Postgres接続を取得するためにHibernateが遅い