Dette spørgsmål er gammelt, men for fuldstændighedens skyld ...
Som det er blevet påpeget i andre svar, er det ikke bare muligt, fordi (pr. dokumentation) :
Det er også blevet rapporteret, at begrænsningen kan omgås med dblink
.
Sådan gør du bruge (installere) dblink i PostgreSQL?
Hvad der manglede indtil videre er en ordentlig funktion, der rent faktisk gør det:
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;
Kontrollerer, om db'en allerede findes i den lokale klynge. Hvis ikke, fortsæt med at oprette den - med en desinficeret identifikator. Vi ønsker ikke at invitere SQL-injektion.