PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Aplicar um único procedimento de gatilho a muitas tabelas diferentes


Você pode encontrar um exemplo de criação de um gatilho com SQL dinâmico usando PL/PgSQL no Audit Trigger exemplo para PostgreSQL. A mesma abordagem funcionará com qualquer outro DDL.

Veja a função audit.audit_table e uso de format e EXECUTE lá.

Dito isso, a necessidade de criar tabelas processualmente pode ser (mas nem sempre) um sinal de design de esquema questionável.

Exemplo simples de SQL dinâmico criando uma tabela:
CREATE OR REPLACE FUNCTION demo_dynamic_table(tablename text) RETURNS void AS $$                                                                                      
BEGIN                                                                                                                                                                          
    EXECUTE format('CREATE TABLE %I (id serial primary key);', tablename);
END;
$$ LANGUAGE plpgsql;

A mesma abordagem funciona para a criação de gatilhos, etc.