PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL-Trigger zum dynamischen Generieren von Codes für mehrere Tabellen

Ich wäre ziemlich begeistert, wenn ich falsch angezeigt würde (ich brauche das gelegentlich auch selbst), aber soweit ich weiß, ist das Verweisen auf Spaltennamen mithilfe von Variablen einer der Fälle, in denen Sie tatsächlich PL/C-Trigger anstelle von PL/ verwenden müssen PgSQL-Trigger. Beispiele für solche Trigger finden Sie in contrib/spi und auf PGXN.

Alternativ benennen Sie Ihre Spalten einheitlich, um sie direkt referenzieren zu können, z. NEW.tenant_code .

Persönlich schreibe ich im Allgemeinen eine Funktion, die den Trigger erzeugt:

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;