sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa databas med hjälp av en lagrad funktion

Denna fråga är gammal, men för fullständighetens skull ...

Som har påpekats i andra svar är det inte helt enkelt möjligt eftersom (per dokumentation) :

Det har också rapporterats att begränsningen kan kringgås med dblink .
Hur man använda (installera) dblink i PostgreSQL?

Vad som saknades hittills är en riktig funktion som faktiskt 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;

Kontrollerar om db redan finns i det lokala klustret. Om inte, fortsätt att skapa den - med en sanerad identifierare. Vi skulle inte vilja bjuda in SQL-injektion.



  1. SQL-syntax eller databasbegränsningar?

  2. Spara facebook-id som int eller varchar?

  3. Postgres returnerar ett standardvärde när en kolumn inte finns

  4. Hur kan du se vilken transaktionsisoleringsnivå en godtycklig orakelsession använder