sql >> Base de Datos >  >> RDS >> PostgreSQL

Desencadenador de PostgreSQL para generar códigos para múltiples tablas dinámicamente

Me encantaría que me muestren mal (ocasionalmente también necesito esto), pero lo mejor que sé es que referir nombres de columna usando variables es uno de esos casos en los que realmente necesita usar activadores PL/C en lugar de PL/ Desencadenadores de PgSQL. Encontrará ejemplos de tales disparadores en contrib/spi y en PGXN.

Alternativamente, nombre sus columnas de manera consistente para poder hacer referencia a ellas directamente, p. NEW.tenant_code .

Personalmente, generalmente termino escribiendo una función que crea el activador:

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;