Tato otázka je stará, ale pro úplnost ...
Jak bylo zdůrazněno v jiných odpovědích, není to jednoduše možné, protože (podle dokumentace) :
Bylo také hlášeno, že omezení lze obejít pomocí dblink
.
Jak na to použít (instalovat) dblink v PostgreSQL?
Co dosud chybělo, je správná funkce, která to ve skutečnosti dělá:
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;
Zkontroluje, zda db již existuje v místním clusteru. Pokud ne, pokračujte v jeho vytvoření – s dezinfikovaným identifikátorem. Nechtěli bychom zvát SQL injection.