PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

3 начина за изброяване на всички тригери за дадена таблица в PostgreSQL

Ето три опции за изброяване на тригерите за дадена таблица в PostgreSQL.

The information_schema.triggers Преглед

Този изглед съдържа всички функции и процедури в текущата база данни, които текущият потребител притежава или има някои привилегии, различни от SELECT На.

Една от колоните в този изглед е 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 на:

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 колоната зависи от езика за внедряване/конвенцията за повикване. Може да съдържа действителния изходен код на функцията за интерпретирани езици, символ на връзка, име на файл или почти всичко друго.

\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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на row_to_json() с вложени съединения

  2. Какъв тип JOIN да използвате

  3. Уникално поле на модела в Django и чувствителност към малки и големи букви (postgres)

  4. Как да изброя индекси, създадени за таблица в postgres

  5. Връщане на редове, съответстващи на елементи от входния масив във функцията plpgsql