Você pode encontrar um exemplo de criação de um gatilho com SQL dinâmico usando PL/PgSQL no Audit Trigger exemplo para PostgreSQL. A mesma abordagem funcionará com qualquer outro DDL.
Veja a função
audit.audit_table
e uso de format
e EXECUTE
lá. Dito isso, a necessidade de criar tabelas processualmente pode ser (mas nem sempre) um sinal de design de esquema questionável.
Exemplo simples de SQL dinâmico criando uma tabela:
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;
A mesma abordagem funciona para a criação de gatilhos, etc.