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 |
|---|
Nome do banco de dados que contém o gatilho (sempre o banco de dados corrente) |
Nome do esquema que contém o gatilho |
Nome do gatilho |
Evento que dispara o gatilho ( |
Nome do banco de dados que contém a tabela na qual o gatilho está definido (sempre o banco de dados corrente) |
Nome do esquema que contém a tabela onde o gatilho está definido |
Nome da tabela onde o gatilho está definido |
Ordem de disparo entre gatilhos na mesma tabela com o mesmo
|
Condição |
Instrução executada pelo gatilho (no momento sempre
|
Identifica se o gatilho é acionado uma vez para cada linha
processada, ou uma vez para cada instrução
( |
O momento em que o gatilho é disparado ( |
Nome da tabela de transição “old”, ou nula se não houver |
Nome da tabela de transição “new”, ou nula se não houver |
Aplica-se a uma funcionalidade não disponível no PostgreSQL |
Aplica-se a uma funcionalidade não disponível no PostgreSQL |
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.
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)