35.57. triggers #

A visão triggers contém todos os gatilhos definidos no banco de dados corrente em tabelas e visões que o usuário corrente é o dono, ou tem algum privilégio diferente de SELECT.

Tabela 35.55. Colunas de triggers

Coluna Tipo de dados

Descrição

trigger_catalog sql_identifier

Nome do banco de dados que contém o gatilho (sempre o banco de dados corrente)

trigger_schema sql_identifier

Nome do esquema que contém o gatilho

trigger_name sql_identifier

Nome do gatilho

event_manipulation character_data

Evento que dispara o gatilho (INSERT, UPDATE ou DELETE)

event_object_catalog sql_identifier

Nome do banco de dados que contém a tabela na qual o gatilho está definido (sempre o banco de dados corrente)

event_object_schema sql_identifier

Nome do esquema que contém a tabela onde o gatilho está definido

event_object_table sql_identifier

Nome da tabela onde o gatilho está definido

action_order cardinal_number

Ordem de disparo entre gatilhos na mesma tabela com o mesmo event_manipulation, action_timing e action_orientation. No PostgreSQL os gatilhos são disparados na ordem dos nomes, portanto esta coluna reflete isto.

action_condition character_data

Condição WHEN do gatilho, nula se nenhum (também nula se a tabela não pertencer à função de banco de dados (role) ativa no momento)

action_statement character_data

Instrução executada pelo gatilho (no momento sempre EXECUTE FUNCTION função(...))

action_orientation character_data

Identifica se o gatilho é acionado uma vez para cada linha processada, ou uma vez para cada instrução (ROW ou STATEMENT)

action_timing character_data

O momento em que o gatilho é disparado (BEFORE, AFTER ou INSTEAD OF)

action_reference_old_table sql_identifier

Nome da tabela de transição old, ou nula se não houver

action_reference_new_table sql_identifier

Nome da tabela de transição new, ou nula se não houver

action_reference_old_row sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

action_reference_new_row sql_identifier

Aplica-se a uma funcionalidade não disponível no PostgreSQL

created time_stamp

Aplica-se a uma funcionalidade não disponível no PostgreSQL


Os gatilhos no PostgreSQL possuem duas incompatibilidades com o padrão SQL que afetam a representação no esquema de informações. Primeiro, os nomes dos gatilhos são locais para cada tabela no PostgreSQL, em vez de serem objetos de esquema independentes. Portanto, pode haver nomes de gatilhos duplicados definidos em um esquema, desde que pertençam a tabelas diferentes. (trigger_catalog e trigger_schema são realmente os valores pertencentes à tabela na qual o gatilho está definido.) Em segundo lugar, os gatilhos podem ser definidos para disparar em vários eventos no PostgreSQL (por exemplo, ON INSERT OR UPDATE), enquanto o padrão SQL permite apenas um. Se um gatilho for definido para ser disparado em vários eventos, ele será representado como diversas linhas no esquema de informações, uma para cada tipo de evento. Como consequência desses dois problemas, a chave primária da visão triggers é, na verdade, (trigger_catalog, trigger_schema, event_object_table, trigger_name, event_manipulation), em vez de (trigger_catalog, trigger_schema, trigger_name), que é o que o padrão SQL especifica. Entretanto, se os gatilhos forem definidos de maneira que estejam em conformidade com o padrão SQL (nomes de gatilho únicos no esquema, e apenas um tipo de evento por gatilho), isto não vai afetar os resultados da consulta.

Nota

Antes do PostgreSQL 9.1 as colunas action_timing, action_reference_old_table, action_reference_new_table, action_reference_old_row, e action_reference_new_row dessa visão se chamavam condition_timing, condition_reference_old_table, condition_reference_new_table, condition_reference_old_row, e condition_reference_new_row, respectivamente. Eram estes os nomes que tinham no padrão SQL:1999. Os novos nomes estão em conformidade com o padrão SQL:2003, e posteriores.

Exemplo 35.52. Exemplo do tradutor

Gatilhos definidos no banco de dados corrente

Uso do esquema de informações para mostrar os gatilhos definidos no banco de dados ana da usuária ana. Veja a criação do gatilho trg_imc_valor em Exemplo da visão triggered_update_columns. Foi usado o jsonb para eliminar as colunas com valor nulo e formatar a saída.

SELECT jsonb_pretty(jsonb_strip_nulls(to_jsonb(t)))
FROM information_schema.triggers t;

                      jsonb_pretty
---------------------------------------------------------
 {                                                      +
     "action_order": 1,                                 +
     "trigger_name": "trg_imc_valor",                   +
     "action_timing": "BEFORE",                         +
     "trigger_schema": "public",                        +
     "trigger_catalog": "ana",                          +
     "action_statement": "EXECUTE FUNCTION imc_valor()",+
     "action_orientation": "ROW",                       +
     "event_manipulation": "INSERT",                    +
     "event_object_table": "pessoa_tipada",             +
     "event_object_schema": "public",                   +
     "event_object_catalog": "ana"                      +
 }
 {                                                      +
     "action_order": 1,                                 +
     "trigger_name": "trg_imc_valor",                   +
     "action_timing": "BEFORE",                         +
     "trigger_schema": "public",                        +
     "trigger_catalog": "ana",                          +
     "action_statement": "EXECUTE FUNCTION imc_valor()",+
     "action_orientation": "ROW",                       +
     "event_manipulation": "UPDATE",                    +
     "event_object_table": "pessoa_tipada",             +
     "event_object_schema": "public",                   +
     "event_object_catalog": "ana"                      +
 }
(2 linhas)