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

Opret database ved hjælp af en gemt funktion

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.



  1. PyInstaller, spec fil, ImportError:Intet modul med navnet 'blah'

  2. Konverter en lagret md5-streng til en decimalværdi i MySQL

  3. WordPress links alle omdirigerer til dobbelt URL

  4. Hvordan CHAR() virker i MariaDB