sql >> Databáze >  >> RDS >> PostgreSQL

3 způsoby, jak vypsat všechny spouštěče pro danou tabulku v PostgreSQL

Zde jsou tři možnosti, jak vypsat spouštěče pro danou tabulku v PostgreSQL.

information_schema.triggers Zobrazit

Toto zobrazení obsahuje všechny funkce a procedury v aktuální databázi, které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT na.

Jeden ze sloupců v tomto zobrazení je event_object_table , která obsahuje název tabulky, ve které je spouštěč definován.

Můžeme tedy použít toto zobrazení k získání spouštěčů pro konkrétní tabulku, jako je tato:

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

Příklad výsledku:

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

Zobrazení vrací pouze ty spouštěče , které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT na, může výsledný seznam představovat pouze podmnožinu skutečných spouštěčů, které jsou definovány v tabulce.

pg_trigger Katalog

pg_catalog.pg_trigger katalog ukládá spouštěče v tabulkách a pohledech a není omezen pouze na tyto spouštěče které aktuální uživatel vlastní nebo má jiná oprávnění než SELECT dne:

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

Příklad výsledku:

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

Chcete-li získat zdroj, můžeme zahrnout pg_proc zobrazit v našem dotazu:

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;

Příklad výsledku:

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

Mějte na paměti, že obsah pg_proc.prosrc závisí na implementačním jazyce/konvenci volání. Může obsahovat skutečný zdrojový kód funkce pro interpretované jazyky, symbol odkazu, název souboru nebo prostě cokoliv jiného.

\dS Příkaz

Při použití psql, \dS příkaz je rychlý způsob, jak získat informace o tabulkách, pohledech atd., včetně všech spouštěčů, které jsou proti nim definovány.

K tomuto příkazu můžeme připojit název tabulky, abychom vrátili informace pouze o této tabulce:

\dS film

Příklad výsledku:

+----------------------+-----------------------------+-----------+----------+---------------------------------------+
|        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. Dejte si pozor na zavádějící data z SET STATISTICS IO

  2. Jak mohu vyřešit ORA-00911:chyba neplatného znaku?

  3. Použití závislostí modulů, část 2

  4. 10 tipů pro úsporu času pro uživatele MS Access