sql >> Base de Datos >  >> RDS >> PostgreSQL

Crear base de datos usando una función almacenada

Esta pregunta es antigua, pero en aras de la exhaustividad...

Como se ha señalado en otras respuestas, eso no es simplemente posible porque (por documentación) :

También se ha informado que la restricción se puede eludir con dblink .
Cómo usar (instalar) dblink en PostgreSQL?

Lo que faltaba hasta ahora es una función adecuada que realmente lo hiciera:

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;

Comprueba si la base de datos ya existe en el clúster local. De lo contrario, proceda a crearlo, con un identificador desinfectado. No nos gustaría invitar a la inyección SQL.