【问题标题】:Create roles in multiple postgresql cluster在多个 postgresql 集群中创建角色
【发布时间】:2015-09-26 06:48:46
【问题描述】:

我对 PostgreSQL 数据库很陌生。一周前,我们已经开始使用它作为我们项目需求的一部分。我们花了一段时间才了解数据库的架构。

阅读了许多文章和文件。我们已经理解了以下几点:

  1. PostgreSQL 中的数据库集群是数据库的集合
  2. 在默认安装数据库的情况下,有一个名为 main 的默认集群,默认情况下是激活的
  3. 我们可以通过以下命令在数据库中创建并启动一个新集群: pg_createcluster 9.2 cluster1 -d /usr/local/cluster1 --start
  4. 与 MySQL 中的用户不同,postgresql 中的角色在创建时是集群范围的。即,每个集群可以有不同的角色。使用以下内容创建角色: createuser --interactive

我已将 postgresql 安装到我的 ubuntu 系统中。除了默认的“主”集群之外,我还创建了 5 个不同的集群。我可以使用 pg_lsclusters 命令列出它们。我现在想在每个集群中创建名为“test、test2、dev、dev2、live、live2”的不同角色。当我创建角色时,它不会询问我应该在哪个集群中创建角色。

此外,在对数据库执行任何操作时,如何选择我希望在其中执行命令的特定集群。

【问题讨论】:

  • 第 2 点目前仅适用于 Debian/Ubuntu,因为它是由于操作系统使用 pg_wrapper 工具来管理多个 PostgreSQL 实例和版本,而不是 PostgreSQL 本身。跨度>

标签: database postgresql


【解决方案1】:

PostgreSQL 中的“集群”名称有点误导,因为它根本不是一个真正的集群。集群本质上是运行 PostgreSQL 系统的用户所拥有的文件系统目录。该目录下是包含与集群相关的所有数据的文件和更多目录。一个集群可以容纳多个数据库,所有数据库都由一个正在运行的 PostgreSQL 实例控制(这个实例也可以称为postmaster)。 (集群可以使用表空间分布在不同的文件系统上,但这不是重点。)

您确实可以在单个系统上拥有多个集群,但一个 PostgreSQL 实例一次只能访问一个集群,在启动 postmaster 时在命令行中指定。其他集群可以被其他 PostgreSQL 实例使用。

每个集群可以包含多个数据库。一个集群也可以有多个roles(用户,组),在集群上所有数据库之间共享;角色永远不会在集群之间共享。现在在 PostgreSQL 中,您将使用命令 CREATE ROLE 来创建用户和组。它们具有相同的权限结构,基本区别在于用户可以登录数据库系统而组不能。

除非您的要求非常具体(即您必须在特定服务器发布版本上运行一个数据库,而在另一个服务器发布版本上运行另一个数据库),否则您应该能够只使用一个集群。

【讨论】:

  • 感谢@Patrick 的回答。我应该自动化密码轮换方案,其中有多台机器,每台机器都有一个集群及其角色集。我需要编写一个 bash 脚本,它可以远程连接到每个集群并更改角色的密码。为了模拟这个需求,我打算在同一台机器上创建 5 个集群,并在进行远程之前测试功能
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 2022-07-28
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-06
  • 2015-11-05
  • 2022-01-04
相关资源
最近更新 更多