MyS*_*DBA 5 database postgresql transactions stored-functions
我是PostgreSQL的新手,想要使用存储函数创建数据库.
例如:
CREATE OR REPLACE FUNCTION mt_test(dbname character varying)
RETURNS integer AS
$BODY$
Create Database $1;
Select 1;
$BODY$
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)
当我尝试执行此函数时,我收到语法错误.
Postgres是否支持CREATE DATABASE
存储函数中的语句?
Erw*_*ter 10
这个问题很古老,但为了完整起见......
正如其他答案所指出的那样,这不是简单的可能,因为(根据文件):
CREATE DATABASE
无法在事务块内执行.
据报道,可以绕过限制dblink
.
如何在PostgreSQL中使用(安装)dblink?
到目前为止缺少的是实际执行的正确功能:
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;
Run Code Online (Sandbox Code Playgroud)
检查数据库是否已存在于本地群集中.如果没有,继续创建它 - 使用已清理的标识符.我们不想邀请SQL注入.
归档时间: |
|
查看次数: |
13210 次 |
最近记录: |