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

升级PostgreSQL 11.20至12.15时遇'abstime不存在'错误,求解决方法

解决PostgreSQL 11→12升级时abstime类型不存在的问题

方案一:先在原11库替换非标准时间类型(推荐)

abstime、reltime、tinterval属于废弃的非标准类型,彻底替换为标准类型能从根源避免后续升级问题:

  • 找出所有使用这些类型的表和字段:
    SELECT table_schema, table_name, column_name, data_type
    FROM information_schema.columns
    WHERE data_type IN ('abstime', 'reltime', 'tinterval');
    
  • 逐个字段转换为标准类型,比如将abstime转为timestamptz(带时区的时间戳):
    ALTER TABLE 你的表名 ALTER COLUMN 字段名 TYPE timestamptz USING 字段名::timestamptz;
    
    注意:转换前一定要备份原数据,tinterval可以转为interval类型,具体转换逻辑根据业务场景调整。
  • 替换完成后重新生成备份,再执行升级或恢复操作。

方案二:在目标12库临时创建废弃类型定义

如果暂时无法修改原库数据,可在恢复前手动在12库中创建这些类型:

  • 连接到目标12数据库,执行以下SQL:
    CREATE TYPE abstime AS (abstime timestamp with time zone);
    CREATE TYPE reltime AS (reltime interval);
    CREATE TYPE tinterval AS (tinterval tsrange);
    
  • 执行完后再运行pg_restore,恢复完成后务必尽快将相关字段替换为标准类型,避免后续版本升级再出兼容问题。

方案三:用pg_upgrade直接升级(跳过备份恢复流程)

如果是直接升级而非备份恢复,pg_upgrade工具能自动处理部分废弃类型的兼容:

  • 确认新旧版本的bin目录和数据目录路径正确,执行升级命令:
    pg_upgrade -b /path/to/postgres11/bin -B /path/to/postgres12/bin -d /path/to/postgres11/data -D /path/to/postgres12/data
    
    若数据库中有依赖这些类型的自定义函数,升级后需要手动调整函数定义。

内容的提问来源于stack exchange,提问作者om joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:37:30