一、PostgreSQL 18 的 Docker 安装部署

1. 环境准备

  • Docker 版本要求:≥ 24.0
  • Docker Compose 版本:≥ 2.20.0
  • 宿主机配置:确保开放 5432 端口

2. Docker Compose 配置文件

version: '3.8'

services:
  postgres18:
    image: postgres:18
    container_name: postgres18
    restart: no  # 建议改为 always 保证自动重启
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=youpassword
      - POSTGRES_DB=appdb
      - POSTGRES_HOST_AUTH_METHOD=scram-sha-256
      - TZ=Asia/Shanghai
      - MAX_CONNECTIONS=200
      - PGDATA=/var/lib/postgresql/18/main  # 明确指定版本化目录
    volumes:
      - ./pgdata:/var/lib/postgresql  # 修改为挂载父目录
      - ./init:/docker-entrypoint-initdb.d  # 保持初始化脚本挂载
      - ./log/:/var/log/postgresql
    networks:
      - pg_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user"]
      interval: 15s
      timeout: 10s
      retries: 5

volumes:
  pgdata:  # 新增具名卷定义

networks:
  pg_network:
    driver: bridge

3. 关键配置解析

参数作用
image: postgres:18指定 PostgreSQL 18 官方镜像
PGDATA定义数据存储路径(保持默认即可)
healthcheck实现容器健康监测
volumes 挂载数据持久化与初始化脚本支持

二、Navicat 连接 PostgreSQL 18 报错解决

1. 报错现象

使用 Navicat Premium 15 及以下版本 连接 PostgreSQL 18 时,控制台报错:

column "datlastsysoid" does not exist

2. 问题根源

  • PostgreSQL 系统表变更
    PostgreSQL 12 开始逐步废弃 pg_database.datlastsysoid 字段,最终在 18 版本中移除。
  • Navicat 版本兼容性
    旧版 Navicat 的元数据查询逻辑未适配新版本系统表结构。

3. 解决方案对比

方法优点缺点
升级 Navicat官方适配新版本,长期稳定需付费升级,短期成本较高
降级 PostgreSQL无需修改工具放弃新版本特性,维护成本高
修改 DLL 文件无需升级工具/数据库存在兼容性风险,非官方方案

4. 推荐方案:修改 Navicat DLL 文件(简单高效)

操作步骤:

  1. 定位 Navicat 安装目录

    • 默认路径:C:\Program Files\Navicat Premium 15\
  2. 备份关键文件

    • 找到 libcc.dll,复制并重命名为 libcc.dll.bak
  3. 修改 DLL 文件

    • 使用 十六进制编辑器(如 HxD、HexEd.it)打开 libcc.dll
    • 搜索字符串 SELECT DISTINCT datlastsysoid
    • 将其替换为 SELECT DISTINCT dattablespace
    • 保存文件。
  4. 重启 Navicat

    • 重新连接 PostgreSQL 数据库,验证是否报错。

5. 注意事项

  • 风险提示:修改二进制文件可能导致 Navicat 功能异常,建议操作前备份。
  • 验证修改效果:执行 SELECT version(); 确认 PostgreSQL 版本。
  • 替代方案:推荐升级到 Navicat 16+ 或改用 DBeaver、DataGrip 等工具。

三、总结

通过 Docker 部署 PostgreSQL 18 可实现 分钟级安装秒级恢复,完美适配现代云原生环境。对于 Navicat 连接问题,修改 DLL 文件是最快速的应急方案,但建议尽快升级工具以获得长期稳定支持。

如需进一步优化性能或扩展功能,可参考以下资源:

通过本文的实践,您已掌握 PostgreSQL 18 的核心部署技能与常见问题解决方法,祝您在数据库管理的道路上越走越远!

标签: none

添加新评论