35.56. triggered_update_columns #

Para os gatilhos no banco de dados corrente que especificam uma lista de colunas (como UPDATE OF coluna1, coluna2), a visão triggered_update_columns identifica estas colunas. Os gatilhos que não especificam uma lista de colunas não são incluídos nesta visão. Somente são mostradas as colunas que o usuário corrente é o dono ou tem algum privilégio diferente de SELECT ativo.

Tabela 35.54. Colunas de triggered_update_columns

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_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 na qual o gatilho está definido

event_object_table sql_identifier

Nome da tabela na qual o gatilho está definido

event_object_column sql_identifier

Nome da coluna na qual o gatilho está definido


Exemplo 35.51. Exemplo do tradutor

Gatilhos que especificam uma lista de colunas

Uso do esquema de informações para mostrar os gatilhos no banco de dados ana da usuária ana que especificam uma lista de colunas. Veja a criação da tabela pessoa_tipada em Exemplo da visão tables. Foi usado o jsonb para eliminar as colunas com valor nulo e formatar a saída.

-- Cálculo do Índice de Massa Corporal
CREATE OR REPLACE FUNCTION imc_valor()
    RETURNS TRIGGER AS $$
    BEGIN
        NEW.imc= NEW.peso_kg / POWER((NEW.altura_cm / 100), 2);
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
-- Gatilho para inserir ou atualizar o Índice de Massa Corporal
CREATE OR REPLACE TRIGGER trg_imc_valor
BEFORE INSERT OR UPDATE OF altura_cm, peso_kg
ON pessoa_tipada
FOR EACH ROW
EXECUTE FUNCTION imc_valor();
CREATE TRIGGER
INSERT INTO pessoa_tipada (nome, altura_cm, peso_kg)
    VALUES ('José', 170, 70);
INSERT 0 1
SELECT * FROM pessoa_tipada;

 nome | altura_cm | peso_kg |         imc
------+-----------+---------+---------------------
 José |       170 |      70 | 24.2214532871972318
(1 linha)

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

                jsonb_pretty
--------------------------------------------
 {                                         +
     "trigger_name": "trg_imc_valor",      +
     "trigger_schema": "public",           +
     "trigger_catalog": "ana",             +
     "event_object_table": "pessoa_tipada",+
     "event_object_column": "peso_kg",     +
     "event_object_schema": "public",      +
     "event_object_catalog": "ana"         +
 }
 {                                         +
     "trigger_name": "trg_imc_valor",      +
     "trigger_schema": "public",           +
     "trigger_catalog": "ana",             +
     "event_object_table": "pessoa_tipada",+
     "event_object_column": "altura_cm",   +
     "event_object_schema": "public",      +
     "event_object_catalog": "ana"         +
 }
(2 linhas)