Cette question est ancienne, mais par souci d'exhaustivité...
Comme cela a été souligné dans d'autres réponses, ce n'est pas simplement possible parce que (par documentation) :
Il a également été signalé que la restriction peut être contournée avec dblink
.
Comment utiliser (installer) dblink dans PostgreSQL ?
Ce qui manquait jusqu'à présent, c'est une fonction appropriée qui le faisait :
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;
Vérifie si la base de données existe déjà dans le cluster local. Si ce n'est pas le cas, continuez à le créer - avec un identifiant épuré. Nous ne voudrions pas inviter l'injection SQL.