什么是PostgreSQL"群集",我该如何创建一个?

Sun*_*mar 59 sql database postgresql postgresql-9.1

我对数据库很新,我还没有很多工作.现在我想了解术语数据库集群.我google了很多,发现了许多有用的链接,但我无法理解它们 - 也许是因为我对数据库的基础知识很少,而且它们都是非常技术性的语言.

我需要就这几点提出建议:

  1. PostgreSQL中的数据库集群是什么?
  2. 如何在PostgreSQL中创建集群?

Cra*_*ger 109

PostgreSQL数据库"集群"是一个postmaster和一组补充进程,它们都管理包含一个或多个数据库的共享数据目录.

PostgreSQL中的术语"群集"是一个历史怪癖*,与"计算群集"的一般含义完全不同,"计算群集"通常指的是一起工作以实现更高性能和/或可用性的计算机组.它与PostgreSQL命令无关CLUSTER,后者是关于组织表的.


如果您正在阅读本文,您可能实际上正在寻找有关高可用性,复制或池的信息,在这种情况下,您应该阅读复制,群集和高可用性 wiki文章以及PostgreSQL手册的高可用性部分,然后查看工具像repmgr.


通常在安装PostgreSQL时为您创建一个集群; 安装通常会initdb为您提供一个新的集群.对于基本用户或中间用户来说,创建集群或管理多个集群是非常不寻常的,因此如果您解释了为什么要这样做,以及您要解决的根本问题是什么,这将有所帮助.该用户手册大概可以解释这更好,因为它假设你是从源代码安装PostgreSQL和相对较少的人真的这样做.

每个集群的数据目录与创建initdb(Windows服务,并与同时通过系统服务启动邮政局长管理launchd,init,upstart,systemd,等这取决于操作系统和版本上),或者直接通过pg_ctl.

集群具有内置数据库template0,template1并且postgres; 其他数据库由用户创建.

集群的postmaster通过侦听tcp端口接受传入连接,并将这些连接交给工作人员后端.只有一个postmaster可以在给定端口上运行,因此每个群集必须具有不同的端口.

我在之前的回答中写了更多关于PostgreSQL结构的文章.见小标题"关系?架构?嗯?".

如何在Pg中"创建"集群完全取决于你如何运行它.既然你问,我怀疑你是在使用的Ubuntu系统上pg_wrapper,在这种情况下你会使用pg_wrapper像这样的命令pg_createcluster.


* PostgreSQL术语中的"集群"与术语"集群"的常见用法之间的混淆是令人困惑和令人遗憾的历史奇怪,特别是在讨论PostgreSQL实例的集群时.你可以拥有一个PostgreSQL集群集群,这很痛苦.

  • @SunilKumar祝你好运.我强烈建议你在学习时做的主要事情是阅读*整个*PostgreSQL手册,它将教你很多关于SQL和数据库,而不仅仅是PostgreSQL.在你去的时候尝试`psql`,尝试一下想法和技巧.一旦你学到了更多并且能够理解更多,你会想要稍后再回来阅读它.另外,学会喜欢用于性能调优的`EXPLAIN ANALYZE`命令.您还应该阅读一些关于数据库理论的介绍性文章(关系/表格,字段/列,实体,建模,主键和外键等). (18认同)
  • *PostgreSQL数据库"集群"是一个postmaster和一组补充进程,它们都管理包含一个或多个数据库的共享数据目录.*第一行. (5认同)
  • 我觉得你没有回答这个问题:什么是postgresql集群?你能明确地解释它是什么,而不是停留在它不是什么? (4认同)

ome*_*ooq 12

这个答案可能已经很晚了,但它可能会对初学者有所帮助。

最基本意义上的集群是什么:

用最基本的术语来说,postgres 集群是一组具有自己配置的数据库。例如,您可能有一个使用 postgres v9 的集群,其中有 2 个数据库,并且所有数据库都将使用该集群提供的相同配置,例如缓冲区大小、允许的连接数、连接池大小等。同样,您可以拥有另一个集群,其中使用 postgres 12,它也可以有多个数据库。您还可以拥有多个具有相同版本但配置不同的集群。

以下命令仅在 ubuntu 上进行测试,这些命令可能不适用于其他操作系统。

要检查您有多少个集群,您可以运行命令

pg_lsclusters
Run Code Online (Sandbox Code Playgroud)

这将为您提供集群列表,其中包含其状态、端口、名称、数据目录位置等。状态表明该集群是否在线。您无法连接到离线集群。

要创建新集群,请运行此命令

initdb -D /usr/local/pgsql/data
Run Code Online (Sandbox Code Playgroud)

这告诉 postgres 初始化一个新的数据库以及在哪里创建数据目录。当然用户应该有创建这个目录的权限。此外,这还将创建默认配置,该配置通常位于 /var/lib/postgresql/version/clusterName 中。

要连接到集群,请使用此命令

psql -U postgres -p 5436 -h localhost
Run Code Online (Sandbox Code Playgroud)

每个集群都有唯一的端口号,因此请确保选择正确的端口。

您还可以启动、停止或检查集群的状态

pg_ctlcluster 12 main stop
Run Code Online (Sandbox Code Playgroud)

这里 12 是 postgres 版本,main 是集群的名称。

在集群中创建新数据库

要创建新数据库,您需要首先连接到集群(使用上面提到的命令)。然后运行这个命令。

CREATE DATABASE mynewdb;
Run Code Online (Sandbox Code Playgroud)