gpt4 book ai didi

postgresql - 使用它自己的所有者创建从 postgres super 用户到另一个数据库的扩展?

转载 作者:行者123 更新时间:2023-12-05 06:21:18 25 4
gpt4 key购买 nike

也许我说的很愚蠢,但是是否有可能从 super 用户(如 postgres)创建一个扩展,在其他具有自己的模式和所有者的数据库中?

我有一个名为 sdmed 的数据库,它有两个模式,publicsdmed。我还有一个名为 sdmed 的角色。该角色只能创建表。

我想在这些数据库中创建一个扩展。该扩展具有函数、表和类型。

如果不是,那最好的方法是什么?

编辑:

我原来的问题不完整。我的意思是我想从其他数据库中的用户 postgres(或 super 用户)创建扩展,包括所有者、角色和模式。此外,这些扩展名将在那些数据库中使用。

我试试这个:

首先,我只为那些模式创建一个函数(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 成为 super 用户,但我想避免这种情况以保持最佳实践。

最佳答案

我不确定我是否答对了你的问题,但如果你想知道它是否会以某种方式使扩展无法正常工作,答案是:这应该不是问题 :)

由于用户sdmed 是数据库sdmed 的所有者,因此它可以访问该数据库中的所有对象——无论它们是谁创建的!因此,由用户 postgres 创建的函数安装的对象应该可以毫无问题地与用户 sdmed 一起使用。

关于postgresql - 使用它自己的所有者创建从 postgres super 用户到另一个数据库的扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59908007/

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