71

我对数据库很陌生,我还没有做很多工作。现在我想了解术语数据库集群。我用谷歌搜索了很多,发现了很多有用的链接,但我无法理解它们——可能是因为我对数据库的基本知识很少,而且它们的语言非常技术性。

我需要关于以下几点的建议:

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

2 回答 2

142

PostgreSQL 数据库“集群”是一个 postmaster 和一组子进程,它们都管理一个包含一个或多个数据库的共享数据目录。

PostgreSQL 中的“集群”一词是一个历史怪癖*,与“计算集群”的一般含义完全不同,“计算集群”通常是指协同工作以实现更高性能和/或可用性的计算机组。它也与 PostgreSQL command 无关CLUSTER,后者是关于组织表的。


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


安装 PostgreSQL 时通常会为您创建一个集群;安装通常会initdb为您创建一个新集群。基本用户或中级用户需要创建集群或管理多个集群是非常不寻常的,因此如果您解释了为什么要这样做,以及您要解决的潜在问题是什么,将会有所帮助。用户手册可能会更好地解释这一点,因为它假设您是从源代码安装 PostgreSQL,而实际上这样做的人相对较少。

每个集群的数据目录都是initdb使用 postmaster 创建和管理的,该 postmaster 通过系统服务(Windows 服务、launchdinitupstartsystemd等,取决于操作系统和版本)或直接通过pg_ctl.

集群具有内置数据库template0template1并且postgres;其他数据库由用户创建。

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

我在之前的回答中写了更多关于 PostgreSQL 结构的内容。请参阅子标题“关系?模式?嗯?”。

如何在 Pg 中“创建”集群完全取决于您如何运行它。既然你在问,我怀疑你在一个使用 Ubuntu 系统上pg_wrapper,在这种情况下你会使用pg_wrapperpg_createcluster.


* PostgreSQL 术语中的“集群”与术语“集群”的常见用法之间的混淆是一个令人困惑且令人遗憾的历史怪事,尤其是在讨论 PostgreSQL 实例的集群时。你可以拥有一个 PostgreSQL 集群,这很痛苦。

于 2012-10-16T05:44:49.657 回答
4

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

什么是最基本的集群:

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

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

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

pg_lsclusters

这会给你一个集群列表,包括它们的状态、端口、名称、数据目录的位置等。状态告诉你这个集群是否在线。您无法连接到离线集群。

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

initdb -D /usr/local/pgsql/data

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

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

psql -U postgres -p 5436 -h localhost

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

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

pg_ctlcluster 12 main stop

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

在集群中创建新数据库

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

CREATE DATABASE mynewdb;
于 2021-07-06T12:39:26.390 回答