You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL升级时出现段错误:是否与内存相关?如何解决?

PostGIS+PostgreSQL升级段错误(libc.so.6)解决步骤

1. 排查PostGIS兼容性与依赖问题

  • 确认PG14的PostGIS是针对该版本编译的官方包:执行dpkg -l | grep postgis查看包信息,避免使用Ubuntu默认仓库中与PG版本不匹配的PostGIS包。若来源不符,卸载现有PG14的PostGIS后重新安装:apt purge postgresql-14-postgis-3 && apt install postgresql-14-postgis-3。
  • 检查两个版本PostGIS的完整性:
    • 连接PG10执行:psql -U postgres -d your_db -c "SELECT postgis_full_version();",确认是3.2.3的完整版本。
    • 连接PG14执行相同命令,确认PostGIS 3.4.0正常加载。
  • 清理冲突依赖:如果手动安装过GDAL/GEOS库,执行apt purge libgdal* libgeos*后重新安装PG14对应的依赖包,避免版本不兼容导致的底层调用错误。

2. 绕过pg_upgrade全表分析阶段的段错误

段错误出现在"Analyzing all rows"阶段,多为PostGIS空间类型统计时的内存异常,可通过以下方式规避:

  • 升级前在PG10数据库中调整PostGIS扩展的统计逻辑:
    ALTER EXTENSION postgis SET SCHEMA pg_catalog;
    ANALYZE pg_catalog.geometry;
    ALTER EXTENSION postgis SET SCHEMA public;
    
  • 执行pg_upgrade时拆分分析阶段,避免一次性处理所有空间数据:
    pg_upgrade --old-datadir=/var/lib/postgresql/10/main --new-datadir=/var/lib/postgresql/14/main \
    --old-bindir=/usr/lib/postgresql/10/bin --new-bindir=/usr/lib/postgresql/14/bin \
    --old-options="-c autovacuum=off" --new-options="-c autovacuum=off" \
    --analyze-in-stages
    

3. 优化内存配置(适配32G服务器)

不合理的内存分配可能触发libc段错误,临时调整两个集群的postgresql.conf:

shared_buffers = 8GB
work_mem = 64MB
maintenance_work_mem = 2GB
autovacuum = off

修改后重启两个集群:systemctl restart postgresql@10-main postgresql@14-main

4. 核心转储定位深层问题(可选)

若以上步骤无效,生成核心转储定位段错误具体位置:

  • 临时放开核心转储限制:ulimit -c unlimited
  • 重新执行pg_upgrade,失败后找到当前目录或/var/lib/postgresql/下的core文件
  • 用gdb分析调用栈:gdb /usr/lib/postgresql/14/bin/postgres core,执行bt查看段错误触发的函数链,重点关注PostGIS相关调用。

5. 备选方案:逻辑升级(pg_dump/pg_restore)

如果pg_upgrade始终无法绕过错误,改用逻辑升级,稳定性更高:

  • 导出PG10空间数据库:
    pg_dump -U postgres -d your_spatial_db -F d -f /tmp/pg10_dump_dir --no-owner --no-privileges
    
  • 在PG14中创建空数据库并初始化PostGIS:
    CREATE DATABASE your_spatial_db;
    \c your_spatial_db
    CREATE EXTENSION postgis;
    CREATE EXTENSION postgis_topology; -- 按需启用
    
  • 导入数据并更新统计:
    pg_restore -U postgres -d your_spatial_db /tmp/pg10_dump_dir --no-owner --no-privileges
    
    导入完成后执行ANALYZE;更新数据库统计信息。

内容的提问来源于stack exchange,提问作者NonReformed Bayesianist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 06:43:39