想象一下现有的数据库,store_a其中包含一张产品表。还有一个用户叫store_a_user. 数据库、表、数据、对象等均归 拥有store_a_user。
现在,我通过使用此命令对数据库进行模板化来创建一个名为 的新用户store_b_user和一个名为 的新数据库。这将创建新数据库作为. 唯一的问题是数据/对象仍然属于. 为了解决这个问题,我必须以 postgres 用户身份连接到数据库,通过运行此命令来重新分配所有的角色store_bstore_aCREATE DATABASE store_b WITH TEMPLATE store_a OWNER store_b_userstore_bstore_astore_a_userstore_bstore_a_userstore_b_userREASSIGN OWNED BY store_a_user TO store_b_user。
正如 Postgres 文档所示,重新分配拥有的命令。为了重新分配角色,您必须连接到相关数据库,并连接到对这两个用户都具有权限的用户(在我们的示例中为store_a_user和store_b_user)。直接引用文档:
由于 REASSIGN OWNED 不会影响其他数据库中的对象,因此通常需要在包含要删除的角色所拥有的对象的每个数据库中执行此命令。
一旦REASSIGN OWNED BY store_a_user TO store_b_user运行,其中的所有内容store_b现在都归其所有,store_b_owner这正是我想要的。store_a唯一的问题是运行该命令会更改to的所有者store_b_user,但只是表的所有者,而不是其中的所有数据store_a。
该文档还指出,它将影响旧角色拥有的所有“共享对象”,并重新分配给新的、直接引用文档的内容:
...以及该角色拥有的所有共享对象(数据库、表空间)将被重新分配给 new_role
我有一些问题:
store_a运行连接时,为什么原始表会在重新分配拥有的命令下更改所有权? …鉴于这个例子:
桌子:
CREATE TABLE public.animals
(
name character varying(64),
whitelist animal_whitelist[]
)
Run Code Online (Sandbox Code Playgroud)
自定义枚举类型animal_whitelist:
CREATE TYPE public.animal_whitelist AS ENUM
('dog',
'cat',
'bird');
Run Code Online (Sandbox Code Playgroud)
我怎样才能专门选择白名单。
在伪代码中,这是我想要选择的。
animal_whitelist等于的行doganimal_whitelist等于和的行dog catanimal_whitelist等于或的任何行dog catanimal_whitelist是不是 dog,cat或bird