Esta pergunta é antiga, mas por uma questão de completude ...
Como foi apontado em outras respostas, isso não é simplesmente possível porque (por documentação) :
Também foi relatado que a restrição pode ser ignorada com
dblink
.Como fazer usar (instalar) dblink no PostgreSQL?
O que estava faltando até agora é uma função adequada realmente fazendo isso:
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;
Verifica se o banco de dados já existe no cluster local. Caso contrário, prossiga para criá-lo - com um identificador higienizado. Não gostaríamos de convidar a injeção de SQL.