sql >> Databáze >  >> RDS >> PostgreSQL

Vytvořte databázi pomocí uložené funkce

Tato otázka je stará, ale pro úplnost ...

Jak bylo zdůrazněno v jiných odpovědích, není to jednoduše možné, protože (podle dokumentace) :

Bylo také hlášeno, že omezení lze obejít pomocí dblink .
Jak na to použít (instalovat) dblink v PostgreSQL?

Co dosud chybělo, je správná funkce, která to ve skutečnosti dělá:

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;

Zkontroluje, zda db již existuje v místním clusteru. Pokud ne, pokračujte v jeho vytvoření – s dezinfikovaným identifikátorem. Nechtěli bychom zvát SQL injection.



  1. Pokud by tento ER diagram používal místo toho ternární vztah

  2. Hodnota časového pásma serveru 'CEST' nebyla rozpoznána

  3. mysql unie jiný počet sloupců

  4. Připojení vaší základní aplikace ASP.NET k místní instanci SQLServeru