Du kan hitta ett exempel på att skapa en trigger med dynamisk SQL med PL/PgSQL i Audit Trigger exempel för PostgreSQL. Samma tillvägagångssätt fungerar med alla andra DDL.
Se funktionen audit.audit_table
och användning av format
och EXECUTE
där.
Som sagt, att behöva skapa tabeller procedurmässigt kan vara (men är inte alltid) ett tecken på tveksam schemadesign.
Enkelt exempel på att dynamisk SQL skapar en tabell:
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;
Samma tillvägagångssätt fungerar för att skapa trigger etc.