Puede encontrar un ejemplo de cómo crear un disparador con SQL dinámico usando PL/PgSQL en Audit Trigger muestra para PostgreSQL. El mismo enfoque funcionará con cualquier otro DDL.
Ver la función audit.audit_table
y uso de format
y EXECUTE
allí.
Dicho esto, la necesidad de crear tablas de manera procesal puede ser (pero no siempre lo es) un signo de diseño de esquema cuestionable.
Ejemplo simple de SQL dinámico creando una tabla:
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;
El mismo enfoque funciona para la creación de disparadores, etc.