【问题标题】:How does initdb of PostgreSQL work? How to use it for testing?PostgreSQL 的 initdb 是如何工作的?如何使用它进行测试?
【发布时间】:2017-10-06 05:37:57
【问题描述】:

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

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

根据 Postgres 文档:

initdb 创建一个新的 PostgreSQL 数据库集群。数据库集群是由单个服务器实例管理的数据库集合。

它会创建一个新服务器吗?还是新的数据库?

创建数据库集群包括创建数据库数据所在的目录、生成共享目录表(属于整个集群而不是任何特定数据库的表),以及创建 template1 和 Postgres 数据库。稍后创建新数据库时,会复制 template1 数据库中的所有内容。 (因此,安装在 template1 中的任何内容都会自动复制到以后创建的每个数据库中。)Postgres 数据库是供用户、实用程序和第三方应用程序使用的默认数据库。

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


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

【问题讨论】:

  • 恐怕我无法回答您的问题,但您是否考虑过使用 PostGres 的 Docker 实例进行集成测试?我在这方面取得了巨大的成功,我认为它不会比 initdb 方法更有效

标签: postgresql integration-testing ramdisk


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-09
    • 2018-09-13
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 1970-01-01
    相关资源
    最近更新 更多