DeepSeek总结的使用 Docker 对 PostgreSQL 进行 Beta 测试

张开发
2026/6/7 12:42:34 15 分钟阅读

分享文章

DeepSeek总结的使用 Docker 对 PostgreSQL 进行 Beta 测试
来源https://andyatkinson.com/postgresql-beta-testing-docker使用 Docker 对 PostgreSQL 进行 Beta 测试作者:Andy Atkinson日期:未注明分类:PostgreSQL 数据库Postgres 社区非常重视对 Beta 版本进行测试的反馈而借助 Docker可以更轻松地启动和运行预发布版本。随着最近 PostgreSQL 19 Beta 1 的发布让我们启动它并测试一些新功能。使用 Docker 获取 Postgres 预发布版本首先你需要为你的操作系统安装 Docker为你的操作系统和处理器架构例如 ARM 或 AMD/Intel/x86获取所需的版本。在 MacOS 上运行uname -m或sw_vers来了解你的硬件细节。对于 Windows请查看《在 Windows 上安装 Docker Desktop》。构建和运行用于 Docker Postgres 的官方 Postgres 镜像仅限于正式发布版本。幸运的是yosifkit 创建了一个 PR添加了 19 Beta 1由 tianon 合并并提供了如何使用docker buildx构建预发布版本的说明。以下命令会下载并构建postgres:19beta1-trixiedockerbuildx build-tpostgres:19beta1-trixie\https://github.com/infosiftr/postgres.git#19-rc:19/trixie构建完成后我可以使用postgres:19beta1-trixie调用docker run。我将其命名为pg19。我还根据我运行其他 Docker Postgres 容器的方式传递了以下环境变量这些选项可能不是必需的。最终命令dockerrun\--namepg19\--envPOSTGRES_USERpostgres\--envPOSTGRES_PASSWORDpostgres\--detachpostgres:19beta1-trixie要检查它是否正在运行我运行docker ps -a。要查看日志我会运行docker logs -f postgres:19beta1-trixie。通过 psql 连接容器正在运行日志显示了我们想要的信息“database system is ready to accept connections”。让我们使用容器上的psql连接到postgres数据库dockercontainerexec-itpg19 psql-Upostgres我们应该会看到类似显示版本 19 的输出psql (19beta1 (Debian 19~beta1-1.pgdg131)) Type help for help.在 19 中测试新功能太好了。让我们尝试一下 19 中的一些新功能。19 添加了一个用于查看锁的新系统视图。让我们试试postgres# select * from pg_stat_lock;我们得到了很多新数据比如等待计数、等待时间等等。那新的pg_plan_advice扩展呢首先让我们加载它然后创建一个表t进行实验postgres# LOAD pg_plan_advice;postgres# create table t (id int);完成后我们可以使用新的PLAN_ADVICE参数通过EXPLAIN显示输出postgres# EXPLAIN (PLAN_ADVICE) SELECT * FROM t;QUERYPLAN-----------------------------------------------------Seq Scanont(cost0.00..35.50rows2550width4)GeneratedPlanAdvice: SEQ_SCAN(t)NO_GATHER(t)(4rows)我想知道为什么默认的行数估计是 2550让我们运行analyze t;。这样做之后估计行数变为 1看起来更合理了postgres# EXPLAIN (PLAN_ADVICE) SELECT * FROM t;QUERYPLAN-------------------------------------------------Seq Scanont(cost0.00..0.00rows1width4)GeneratedPlanAdvice: SEQ_SCAN(t)NO_GATHER(t)(4rows)pg_stat_statements的新增功能扩展pg_stat_statements在 19 中获得了新功能。让我们试试postgres# select * from pg_stat_statements;ERROR: relationpg_stat_statementsdoesnotexist哦我们需要先将其添加到shared_preload_libraries。我们可以看到目前情况并非如此postgres# show shared_preload_libraries;shared_preload_libraries--------------------------(1row)使用docker run实现这一点的一种方法是使用-c参数如下所示dockerrun\--namepg19\--envPOSTGRES_USERpostgres\--envPOSTGRES_PASSWORDpostgres\--detachpostgres:19beta1-trixie\-cshared_preload_librariespg_stat_statements现在我们在shared_preload_libraries中看到了我们想要的内容postgres# show shared_preload_libraries;shared_preload_libraries--------------------------pg_stat_statements(1row)不过鉴于\dx没有列出它我们还没有启用该扩展。让我们这样做psqlcreateextensionifnotexistspg_stat_statements;现在\dx显示它我们已经准备好查询它了。新增功能之一是跟踪预备语句的使用。让我们创建一个基础表和一个预备语句。如果需要再次创建表createtableifnotexistst(idint);创建一个简单的预备语句get_t并执行它。这里的目标是让pg_stat_statements增加generic_plan_calls字段。PREPAREget_tASSELECT*FROMt;现在让我们执行它EXECUTEget_t;它起作用了吗postgres# select left(query,100),generic_plan_calls from pg_stat_statements limit 1;left|generic_plan_calls--------------------------------------PREPAREget_tAS|1SELECT*|FROMt|它起作用了我们看到generic_plan_calls已经递增。这对于监控预备语句的使用情况看起来非常有用。总结请尝试一下并实验 Postgres 19 中的新功能添加 19.x 版本当前为 beta 1https://github.com/docker-library/postgres/pull/1415

更多文章