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

使用pg_restore从生产环境恢复本地PostgreSQL数据库失败求助

解决pg_restore恢复数据库的两类错误

你遇到的恢复错误分两类,对应不同问题,逐个解决:

一、修复set_user扩展缺失的错误

错误核心是本地PostgreSQL未安装set_user扩展,步骤如下:

  • 根据本地系统和PostgreSQL版本安装扩展包:
    • Debian/Ubuntu(以PostgreSQL 14为例):
      sudo apt install postgresql-14-set-user
      
    • CentOS/RHEL(以PostgreSQL 14为例):
      sudo yum install postgresql14-contrib-set_user
      
    注意:包名中的版本号必须和本地PostgreSQL版本完全匹配,比如本地是15就改成对应15的包名。
  • 手动在目标数据库创建扩展:
    psql -d server_employees -c "CREATE EXTENSION IF NOT EXISTS set_user WITH SCHEMA public;"
    
  • 重新执行你的pg_restore命令即可。

二、修复pg_stat_statements视图的列歧义错误

这个错误是因为本地PostgreSQL版本和生产环境不一致,导致pg_stat_statements函数的返回列结构变化,或是视图定义里的别名与列名冲突。解决方法:

  1. 优先对齐PostgreSQL版本:
    分别查看本地和生产环境的版本:
    # 本地版本
    psql --version
    # 生产环境版本(若能访问)
    ssh 生产服务器地址 "psql --version"
    
    如果版本不一致,将本地PostgreSQL升级到和生产环境一致的版本后再重新恢复,这是最彻底的解决方式。
  2. 手动修改视图定义(无法升级版本时):
    修改错误中的CREATE VIEW语句,把表别名改掉避免和列名冲突,比如将pg_stat_statements改为pss,修改后的语句如下:
    CREATE VIEW metric_helpers.pg_stat_statements AS
     SELECT pss.userid,
        pss.dbid,
        pss.queryid,
        pss.query,
        pss.plans,
        pss.total_plan_time,
        pss.min_plan_time,
        pss.max_plan_time,
        pss.mean_plan_time,
        pss.stddev_plan_time,
        pss.calls,
        pss.total_exec_time,
        pss.min_exec_time,
        pss.max_exec_time,
        pss.mean_exec_time,
        pss.stddev_exec_time,
        pss.rows,
        pss.shared_blks_hit,
        pss.shared_blks_read,
        pss.shared_blks_dirtied,
        pss.shared_blks_written,
        pss.local_blks_hit,
        pss.local_blks_read,
        pss.local_blks_dirtied,
        pss.local_blks_written,
        pss.temp_blks_read,
        pss.temp_blks_written,
        pss.blk_read_time,
        pss.blk_write_time,
        pss.wal_records,
        pss.wal_fpi,
        pss.wal_bytes
       FROM metric_helpers.pg_stat_statements(true) pss(userid, dbid, queryid, query, plans, total_plan_time, min_plan_time, max_plan_time, mean_plan_time, stddev_plan_time, calls, total_exec_time, min_exec_time, max_exec_time, mean_exec_time, stddev_exec_time, rows, shared_blks_hit, shared_blks_read, shared_blks_dirtied, shared_blks_written, local_blks_hit, local_blks_read, local_blks_dirtied, local_blks_written, temp_blks_read, temp_blks_written, blk_read_time, blk_write_time, wal_records, wal_fpi, wal_bytes);
    
    先执行这条修改后的SQL创建视图,再重新运行pg_restore。
  3. 跳过该视图恢复(非必需视图时):
    如果这个视图不是业务必需的,可以直接跳过它的恢复:
    pg_restore --exclude-table=metric_helpers.pg_stat_statements server_employees.tar -d server_employees
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:10:26