Puoi trovare un esempio di creazione di un trigger con SQL dinamico utilizzando PL/PgSQL in Trigger di controllo esempio per PostgreSQL. Lo stesso approccio funzionerà con qualsiasi altro DDL.
Vedi la funzione audit.audit_table
e l'uso del format
e EXECUTE
lì.
Detto questo, la necessità di creare tabelle proceduralmente può essere (ma non è sempre) un segno di una progettazione di schemi discutibile.
Semplice esempio di SQL dinamico che crea una tabella:
CREATE OR REPLACE FUNCTION demo_dynamic_table(tablename text) RETURNS void AS $$
BEGIN
EXECUTE format('CREATE TABLE %I (id serial primary key);', tablename);
END;
$$ LANGUAGE plpgsql;
Lo stesso approccio funziona per la creazione di trigger, ecc.