小编Ale*_*ier的帖子

为什么 PostgreSQL 会重新分配角色命令,更改模板数据库的所有者

想象一下现有的数据库,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_userstore_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

我有一些问题:

  1. 什么是共享对象?(我似乎找不到这方面的文档)
  2. 当以用户身份store_a运行连接时,为什么原始表会在重新分配拥有的命令下更改所有权? …

database postgresql

4
推荐指数
1
解决办法
1249
查看次数

Postgres 选择枚举数组中的特定数组

鉴于这个例子:

桌子:

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等于的行dog
  • 任何animal_whitelist等于和的dog cat
  • animal_whitelist等于或的任何行dog cat
  • 任何行,其中animal_whitelist不是 dogcatbird

sql postgresql

1
推荐指数
1
解决办法
1524
查看次数

标签 统计

postgresql ×2

database ×1

sql ×1