PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Déclencheur PostgreSQL pour générer dynamiquement des codes pour plusieurs tables

Je serais très enthousiaste à l'idée de me tromper (j'en ai parfois besoin moi-même), mais je sais que faire référence à des noms de colonnes à l'aide de variables est l'un de ces cas où vous devez réellement utiliser des déclencheurs PL/C plutôt que PL/ Déclencheurs PgSQL. Vous trouverez des exemples de tels déclencheurs dans contrib/spi et sur PGXN.

Vous pouvez également nommer vos colonnes de manière cohérente afin de pouvoir les référencer directement, par ex. NEW.tenant_code .

Personnellement, je finis généralement par écrire une fonction qui crée le trigger :

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;