PostgreSQL 的 chown -R 等效项

mir*_*los 5 postgresql permissions

我们偶尔会遇到这样的问题:在升级某些软件和数据库时,缺乏经验(或工作过度,不排除我自己)的系统管理员(除了 Oracle 之外,我们没有单独的 DBA)以用户身份运行数据库升级脚本,而不是以用户身份运行数据库升级脚本。postgres正确的应用程序用户

\n\n

更新:添加了重点。正如记录的那样,我们的正常操作模式涉及以普通用户身份运行这些脚本。提出这个问题是为了解决那些意外未遵循该程序的情况。

\n\n

如何将(一个)数据库中所有对象的所有权(无论它们属于谁)更改为特定用户?

\n\n

这里描述的方法对我不起作用,因为:

\n\n
    \n
  • REASSIGN OWNED显然是每个集群,而不是每个数据库(太宽泛)
  • \n
  • REASSIGN OWNED不适用于拥有的对象postgres
  • \n
  • @AlexSoto\xe2\x80\x99s 答案的手动枚举需要事先知道所涉及对象的类型
  • \n
\n\n

我真的想要基本上相当于 Unixchown -R newowner /path命令,只是为了整个 PostgreSQL 数据库(其中的所有模式、表、indic\xc4\x93s 等)。

\n\n

所涉及的最低 PostgreSQL 版本是 9.1 (Debian wheezy),无论 Debian不稳定在任何给定时间有什么最高版本。

\n

Col*_*art 2

我的回答不是直接回答你的问题,而是解决你的操作方法。

您不应该以 as 身份登录,就像您不应该以 as在服务器上postgres登录一样。root在您的服务器上,您应该以真实用户身份登录,并sudo在需要超级用户权限的奇怪场合使用。最好sudo su - <other_user>不要直接使用sudo <command>.

在 PostgreSQL 中我们可以实现更细粒度的策略。

创建一个类似于以下的角色结构:

create role admin noinherit;
grant <owner> to admin;
grant admin to <real_person>;
Run Code Online (Sandbox Code Playgroud)

然后登录为<real_person>.

在要部署到的脚本中<owner>,添加第一行:

set role <owner>;
Run Code Online (Sandbox Code Playgroud)

那么您应该永远不会再遇到您在问题中描述的问题。

而且您永远不需要以超级用户身份登录——除非您需要创建新的模式或用户。