gpt4 book ai didi

database - 使用存储函数创建数据库

转载 作者:太空狗 更新时间:2023-10-30 01:50:18 25 4
gpt4 key购买 nike

我是 PostgreSQL 新手,想使用存储函数创建数据库。
例如:

CREATE OR REPLACE FUNCTION mt_test(dbname character varying)
RETURNS integer AS
$BODY$

Create Database $1;

Select 1;

$BODY$
LANGUAGE sql;

当我尝试执行此函数时出现语法错误。

Postgres 是否支持存储函数中的CREATE DATABASE 语句?

最佳答案

这个问题很老了,但是为了完整起见...

正如其他答案中指出的那样,这不仅仅是可能的,因为 (per documentation) :

CREATE DATABASE cannot be executed inside a transaction block.

也有报告称可以使用 dblink 绕过限制。
How to use (install) dblink in PostgreSQL?

到目前为止缺少的是实际执行此操作的适当函数:

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;

检查数据库是否已经存在于本地集群中。如果没有,请继续创建它 - 使用经过清理的标识符。我们不想邀请 SQL 注入(inject)。

关于database - 使用存储函数创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com