PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

3 façons de lister tous les déclencheurs pour une table donnée dans PostgreSQL

Voici trois options pour lister les déclencheurs pour une table donnée dans PostgreSQL.

Les information_schema.triggers Afficher

Cette vue contient toutes les fonctions et procédures de la base de données actuelle que l'utilisateur actuel possède ou a un privilège autre que SELECT sur.

L'une des colonnes de cette vue est event_object_table , qui contient le nom de la table sur laquelle le déclencheur est défini.

Nous pouvons donc utiliser cette vue pour obtenir les déclencheurs d'une table spécifique comme celle-ci :

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

Exemple de résultat :

+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+
| 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()                                                                    |
+----------------+-----------------------+--------------------+----------------------------------------------------------------------------------------------------+

Étant donné que la vue ne renvoie que les déclencheurs que l'utilisateur actuel possède ou a un privilège autre que SELECT activé, la liste résultante pourrait ne représenter qu'un sous-ensemble des déclencheurs réels définis dans la table.

Le pg_trigger Catalogue

Le pg_catalog.pg_trigger le catalogue stocke les déclencheurs sur les tables et les vues, et il n'est pas limité à ces déclencheurs que l'utilisateur actuel possède ou a un privilège autre que SELECT le :

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

Exemple de résultat :

+------------------------------+
|         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                 |
+------------------------------+

Pour obtenir la source, nous pouvons inclure le pg_proc afficher dans notre requête :

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;

Exemple de résultat :

+------------------------------+------------------------------------------+
|            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                                      |
+------------------------------+------------------------------------------+

Gardez à l'esprit que le contenu du pg_proc.prosrc dépend du langage d'implémentation/de la convention d'appel. Il peut contenir le code source réel de la fonction pour les langages interprétés, un symbole de lien, un nom de fichier ou à peu près n'importe quoi d'autre.

Le \dS Commande

Lors de l'utilisation de psql, le \dS La commande est un moyen rapide d'obtenir des informations sur les tables, les vues, etc., y compris les déclencheurs définis pour elles.

Nous pouvons ajouter le nom de la table à cette commande pour renvoyer des informations uniquement sur cette table :

\dS film

Exemple de résultat :

+----------------------+-----------------------------+-----------+----------+---------------------------------------+
|        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()