当前位置: 首页 > news >正文

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 -msw_vers来了解你的硬件细节。

对于 Windows,请查看《在 Windows 上安装 Docker Desktop》。

构建和运行

用于 Docker Postgres 的官方 Postgres 镜像仅限于正式发布版本。

幸运的是,@yosifkit 创建了一个 PR,添加了 19 Beta 1(由 @tianon 合并),并提供了如何使用docker buildx构建预发布版本的说明。

以下命令会下载并构建postgres:19beta1-trixie

dockerbuildx 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_USER=postgres\--envPOSTGRES_PASSWORD=postgres\--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.pgdg13+1)) 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(cost=0.00..35.50rows=2550width=4)GeneratedPlanAdvice: SEQ_SCAN(t)NO_GATHER(t)(4rows)

我想知道为什么默认的行数估计是 2550?让我们运行analyze t;

这样做之后,估计行数变为 1,看起来更合理了:

postgres=# EXPLAIN (PLAN_ADVICE) SELECT * FROM t;QUERYPLAN-------------------------------------------------Seq Scanont(cost=0.00..0.00rows=1width=4)GeneratedPlanAdvice: SEQ_SCAN(t)NO_GATHER(t)(4rows)

pg_stat_statements的新增功能

扩展pg_stat_statements在 19 中获得了新功能。

让我们试试:

postgres=# select * from pg_stat_statements;ERROR: relation"pg_stat_statements"doesnotexist

哦,我们需要先将其添加到shared_preload_libraries。我们可以看到目前情况并非如此:

postgres=# show shared_preload_libraries;shared_preload_libraries--------------------------(1row)

使用docker run实现这一点的一种方法是使用-c参数,如下所示:

dockerrun\--namepg19\--envPOSTGRES_USER=postgres\--envPOSTGRES_PASSWORD=postgres\--detachpostgres:19beta1-trixie\-cshared_preload_libraries=pg_stat_statements

现在我们在shared_preload_libraries中看到了我们想要的内容:

postgres=# show shared_preload_libraries;shared_preload_libraries--------------------------pg_stat_statements(1row)

不过,鉴于\dx没有列出它,我们还没有启用该扩展。让我们这样做:

psql>createextensionifnotexistspg_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 1)
https://github.com/docker-library/postgres/pull/1415

http://www.cnnetsun.cn/news/2807813.html

相关文章:

  • 海洋声场建模MATLAB工具包:集成FFP、简正波、射线追踪与抛物方程四种核心算法
  • 如何在Windows 11 24H2 LTSC系统上轻松安装微软商店:完整免费解决方案
  • NS-USBloader:Switch玩家的全能文件管家,3大核心模块助你轻松管理游戏文件
  • Mythos安全大模型:可替代人类红队的AI范式跃迁
  • AMD Ryzen处理器终极调优指南:用RyzenAdj释放隐藏性能
  • STM32开发环境搭建:IAR+J-Link硬件连接与软件配置全解析
  • STM32核心板+主板分离式设计:从寄存器编程到PCB调试全解析
  • 用Python解析GPS/北斗NMEA0183数据:从串口读取到经纬度转换的保姆级教程
  • Protel/Altium Designer中DXF文件导入PCB板框的完整指南与避坑要点
  • 抖音批量下载神器:高效保存无水印视频的完整指南
  • PCB通孔反回蚀缺陷:原理、观测与产线控制实战
  • Cowabunga Lite 终极指南:无需越狱实现 iOS 15+ 深度个性化定制
  • ExifToolGui照片元数据管理:从混乱到专业,5大核心功能彻底改变你的图片工作流
  • 告别手动操作:京东自动化工具助你高效管理日常任务
  • 如何在电脑上免费畅玩任天堂Switch游戏:yuzu模拟器终极指南
  • 基于ASMX的C#轻量Web服务:浏览器直连Access Northwind数据库查询
  • 电路误差分析:从偏微分到蒙特卡洛的工程实践
  • 解决CodeWarrior绿色版USB仿真器驱动缺失问题
  • MATLAB GUI里两个实用时间控件:实时系统时钟显示 + 5秒倒计时功能演示
  • 抖音批量下载工具终极指南:3分钟学会免费保存无水印短视频
  • 如何快速掌握SMAPI模组框架:星露谷物语玩家的完整实用指南
  • 无需训练的AI换脸革命:roop-unleashed终极指南
  • 告别玄学调参!用Uber CausalML实战Meta-Learner:S/T/X/R模型怎么选?
  • 012、权限策略设计进阶:allow、deny、ask 的粒度控制、范围限定与正则匹配技巧
  • AI编排:企业级大模型落地的数据管道工程实践
  • 数据科学第一性原理:从问题本质拆解到可验证落地
  • 51单片机最小系统设计全解析:从复位电路到PCB布局实战指南
  • 纯C写的PDF417扫码工具,直接读PBM图+自带RS纠错,编译即用
  • CSS 性能诊断与选择器层级优化实战:浏览器渲染链路深度剖析
  • 专业指南:Windows任务栏透明化工具TranslucentTB的深度使用与配置