Questa domanda è vecchia, ma per completezza ...
Come è stato sottolineato in altre risposte, ciò non è semplicemente possibile perché (per documentazione) :
È stato anche segnalato che la restrizione può essere aggirata con dblink
.
Come usare (installare) dblink in PostgreSQL?
Ciò che mancava finora è una funzione adeguata a farlo effettivamente:
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 il db esiste già nel cluster locale. In caso contrario, procedi alla creazione, con un identificatore disinfettato. Non vorremmo invitare SQL injection.