【问题标题】:What's a PostgreSQL "Cluster" and how do I create one?什么是 PostgreSQL“集群”,我如何创建一个?
【发布时间】:2012-10-06 04:04:13
【问题描述】:

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

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

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

【问题讨论】:

  • 我正在使用 windows 7。我使用 windows 的 PostgreSQL 安装程序,版本是 9.0

标签: sql database postgresql postgresql-9.1


【解决方案1】:

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

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


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


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

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

集群内置数据库template0template1postgres;其他数据库由用户创建。

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

我在this previous answer 中写了更多关于 PostgreSQL 结构的文章。请参阅子标题“关系?架构?嗯?”。

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


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

【讨论】:

  • @SunilKumar 祝你好运。我强烈建议你在学习时做的主要事情是阅读整个 PostgreSQL 手册,它将教你很多关于 SQL 和一般数据库的知识,而不仅仅是 PostgreSQL。随时尝试psql,尝试各种想法和技术。一旦你学到了更多并且可以理解更多,你会想回来再读一遍。此外,学会爱上EXPLAIN ANALYZE 命令进行性能调整。您还应该阅读一些关于数据库理论的介绍性文章(关系/表、字段/列、实体、建模、主键和外键等)。
  • 我觉得你没有回答这个问题:什么是 postgresql 集群?您能否明确解释它是什么,而不是停留在它不是什么?
  • 一个 PostgreSQL 数据库“集群”是一个 postmaster 和一组子进程,它们都管理一个包含一个或多个数据库的共享数据目录。第一行。跨度>
【解决方案2】:

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

什么是最基本的集群:

在最基本的术语中,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;

【讨论】:

  • @a_horse_with_no_name 感谢您的更正。我已经更新了我的答案。
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多