PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Criar banco de dados usando uma função armazenada


Esta pergunta é antiga, mas por uma questão de completude ...

Como foi apontado em outras respostas, isso não é simplesmente possível porque (por documentação) :

Também foi relatado que a restrição pode ser ignorada com dblink .
Como fazer usar (instalar) dblink no PostgreSQL?

O que estava faltando até agora é uma função adequada realmente fazendo isso:
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;

Verifica se o banco de dados já existe no cluster local. Caso contrário, prossiga para criá-lo - com um identificador higienizado. Não gostaríamos de convidar a injeção de SQL.