PostgreSQL 的 initdb 是如何工作的?如何使用它进行测试?

How does initdb of PostgreSQL work? How to use it for testing?

包括 Postgres 数据库在内的许多集成测试建议说我可以 initdb 在 RAM 磁盘中创建一个新的整个集群并对其进行处理。

据我了解initdb是一个新的文件夹,类似于与数据库相关的东西。

根据 Postgres 文档:

initdb creates a new PostgreSQL database cluster. A database cluster is a collection of databases that are managed by a single server instance.

是否创建新服务器?或者一个新的数据库?

Creating a database cluster consists of creating the directories in which the database data will live, generating the shared catalogue tables (tables that belong to the whole cluster rather than to any particular database), and creating the template1 and Postgres databases. When you later create a new database, everything in the template1 database is copied. (Therefore, anything installed in template1 is automatically copied into each database created later.) The Postgres database is a default database meant for use by users, utilities and third party applications.

上面这句话是否意味着从现在开始无论创建什么数据库,它都存储在那个新的 "cluster" 中?如果不是如何在这样的RAM盘集群中建表?


我如何使用它来设置它以进行测试?

在您的图像使用的术语中(来自 pgAdmin?),initdb 将为新的“服务器”创建数据目录。

在 PostgreSQL 中,这不称为服务器,而是数据库集群。它有一个数据目录,用 initdb 创建。如果您使用 pg_ctl start 启动集群,则会启动一个 PostgreSQL 服务器进程(称为 postmaster),它会侦听传入连接并启动 后端进程 在数据目录上工作。

一台机器上可以有多个PostgreSQL数据库集群,你只需要给它们不同的端口号即可。

运行 initdb 为您的集成测试创建数据库集群应该没问题。在 initdb 之后,您必须适当地编辑 postgresql.conf(例如设置 port)并使用 pg_clt start -D <data directory>.

启动 postmaster