To pytanie jest stare, ale ze względu na kompletność ...
Jak wskazano w innych odpowiedziach, nie jest to po prostu możliwe, ponieważ (zgodnie z dokumentacją) :
Doniesiono również, że ograniczenie można ominąć za pomocą dblink
.
Jak użyć (zainstalować) dblink w PostgreSQL?
Do tej pory brakowało odpowiedniej funkcji, która faktycznie to robi:
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;
Sprawdza, czy baza danych już istnieje w lokalnym klastrze. Jeśli nie, przystąp do jego tworzenia - z oczyszczonym identyfikatorem. Nie chcielibyśmy zapraszać do wstrzykiwania SQL.