Esta pregunta es antigua, pero en aras de la exhaustividad...
Como se ha señalado en otras respuestas, eso no es simplemente posible porque (por documentación) :
También se ha informado que la restricción se puede eludir con dblink
.
Cómo usar (instalar) dblink en PostgreSQL?
Lo que faltaba hasta ahora es una función adecuada que realmente lo hiciera:
CREATE OR REPLACE FUNCTION f_create_db(dbname text)
RETURNS integer AS
$func$
BEGIN
IF EXISTS (SELECT 1 FROM pg_database WHERE datname = dbname) THEN
RAISE NOTICE 'Database already exists';
ELSE
PERFORM dblink_exec('dbname=' || current_database() -- current db
, 'CREATE DATABASE ' || quote_ident(dbname));
END IF;
END
$func$ LANGUAGE plpgsql;
Comprueba si la base de datos ya existe en el clúster local. De lo contrario, proceda a crearlo, con un identificador desinfectado. No nos gustaría invitar a la inyección SQL.