PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Crea database utilizzando una funzione memorizzata

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.