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.