PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie eine Datenbank mit einer gespeicherten Funktion

Diese Frage ist alt, aber der Vollständigkeit halber ...

Wie in anderen Antworten darauf hingewiesen wurde, ist dies nicht einfach möglich, weil (pro Dokumentation) :

Es wurde auch berichtet, dass die Einschränkung mit dblink umgangen werden kann .
Anleitung dblink in PostgreSQL verwenden (installieren)?

Was bisher fehlte, ist eine richtige Funktion, die es tatsächlich tut:

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;

Überprüft, ob die Datenbank bereits im lokalen Cluster vorhanden ist. Wenn nicht, fahren Sie mit der Erstellung fort - mit einer bereinigten Kennung. Wir möchten keine SQL-Einschleusung einladen.