sql >> Database >  >> RDS >> PostgreSQL

Database maken met behulp van een opgeslagen functie

Deze vraag is oud, maar voor de volledigheid ...

Zoals in andere antwoorden is aangegeven, is dat niet eenvoudigweg mogelijk omdat (per documentatie) :

Er is ook gemeld dat de beperking kan worden omzeild met dblink .
Hoe gebruik (installeer) dblink in PostgreSQL?

Wat tot nu toe ontbrak, is een goede functie die het daadwerkelijk doet:

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;

Controleert of de db al bestaat in het lokale cluster. Als dat niet het geval is, gaat u verder met het maken ervan - met een opgeschoonde identifier. We zouden geen SQL-injectie willen uitnodigen.



  1. Hoe op te lossen dat de coderingsfout niet kan worden gewijzigd bij het invoegen van XML in SQL Server

  2. Functie voor maanden tussen twee datums

  3. Vijf coole dingen die ik heb geleerd op de PostgreSQL Conference Europe 2018

  4. Voeg CreatedBy en CreatedOn in alle ontbrekende gegevenstabellen in SQL