【发布时间】:2020-05-11 11:07:24
【问题描述】:
也许我在说傻话,但是否可以在其他数据库中使用超级用户(如 postgres)创建扩展,并拥有自己的架构和所有者?
我有一个名为 sdmed 的数据库,有两个模式,public 和 sdmed。我还有一个名为 sdmed 的角色。此角色只能创建表。
我想在这些数据库中创建一个扩展。该扩展具有函数、表和类型。
如果不是,那么更好的方法是什么?
编辑:
我最初的问题不完整。我的意思是我想从其他数据库中的用户 postgres (或超级用户)创建扩展,其中包含所有者、角色和模式。此外,这些扩展名将用于那些数据库。
我试试这个:
首先,我只为那些模式创建一个函数(sdmed 是一个数据库,具有一个名为 sdmed 的模式,它的所有者是 sdmed):
CREATE OR REPLACE FUNCTION sdmed.di_hola()
RETURNS void AS
$BODY$
BEGIN
RAISE NOTICE 'Hola';
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sdmed.di_hola()
OWNER TO sdmed;
还有(在prepare my own extension之后)
postgres=# create extension hola;
ERROR: schema "sdmed" does not exist
(数据库角色和架构sdmed存在)
如果我从 sdmed 数据库尝试:
sdmed=> create extension hola;
ERROR: permission denied to create extension "hola"
HINT: Must be superuser to create this extension.
我会让sdmed 成为超级用户,但为了保持最佳做法,我想避免这样做。
【问题讨论】:
标签: postgresql