PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Créer une base de données à l'aide d'une fonction stockée

Cette question est ancienne, mais par souci d'exhaustivité...

Comme cela a été souligné dans d'autres réponses, ce n'est pas simplement possible parce que (par documentation) :

Il a également été signalé que la restriction peut être contournée avec dblink .
Comment utiliser (installer) dblink dans PostgreSQL ?

Ce qui manquait jusqu'à présent, c'est une fonction appropriée qui le faisait :

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;

Vérifie si la base de données existe déjà dans le cluster local. Si ce n'est pas le cas, continuez à le créer - avec un identifiant épuré. Nous ne voudrions pas inviter l'injection SQL.