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

Gatilho do PostgreSQL para gerar códigos para várias tabelas dinamicamente


Eu ficaria bastante entusiasmado em ser mostrado errado (ocasionalmente também preciso disso), mas, melhor que eu saiba, referir nomes de colunas usando variáveis ​​é um daqueles casos em que você realmente precisa usar gatilhos PL/C em vez de PL/ Acionadores PgSQL. Você encontrará exemplos de tais gatilhos em contrib/spi e no PGXN.

Como alternativa, nomeie suas colunas de forma consistente para poder referenciá-las diretamente, por exemplo NEW.tenant_code .

Pessoalmente, geralmente acabo escrevendo uma função que cria o gatilho:
create function create_tg_stuff(_table regclass, _args[] text[])
  returns void as $$
begin
  -- explore pg_catalog a bit
  execute $x$
  create function $x$ || quote_ident(_table || '_tg_stuff') || $x$()
    returns trigger as $t$
  begin
    -- more stuff
    return new;
  end;
  $t$ language plpgsql;
  $x$;
end;
$$ language plpgsql;