PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Trigger PostgreSQL per generare codici per più tabelle in modo dinamico

Sarei abbastanza entusiasta di essere mostrato sbagliato (a volte ne ho bisogno anche io), ma ne sono consapevole, fare riferimento ai nomi delle colonne usando le variabili è uno di quei casi in cui è effettivamente necessario utilizzare trigger PL/C piuttosto che PL/ Trigger PgSQL. Troverai esempi di tali trigger in contrib/spi e su PGXN.

In alternativa, nomina le tue colonne in modo coerente in modo da poterle referenziare direttamente, ad es. NEW.tenant_code .

Personalmente, generalmente finisco per scrivere una funzione che crea il 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;