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

Ansible postgresql_schema模块不支持单模式备份恢复及报错咨询

解决Ansible备份Postgres单模式时的报错问题

我来帮你理清这个问题——你遇到的报错根源很明确,而且你后来的判断完全正确:Ansible的postgresql_schema模块根本不支持单模式的备份/恢复功能。

为什么会出现这个报错?

postgresql_schema模块的核心作用是管理Postgres模式的生命周期:比如创建、删除模式,修改模式所有者,设置级联删除规则等。它从设计上就没有备份(dump)或恢复的能力,你在playbook里写的state: dump和target参数,都不在这个模块的支持参数列表里,所以Ansible直接抛出了参数不兼容的错误:

fatal: [192.168.1.18]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (postgresql_schema) module: target Supported parameters include: ca_cert, cascade_drop, database, login_host, login_password, login_unix_socket, login_user, owner, port, schema, session_role, ssl_mode, state"}

正确的单模式备份/恢复方案

要备份Postgres的单个模式,最可靠的方式是直接调用Postgres官方的pg_dump工具,通过Ansible的command或shell模块执行命令。下面给你完整的playbook示例:

备份指定模式

- hosts: dbserver
  become: true
  gather_facts: yes
  vars:
    dbname: dbname
    dbuser: dbuser
    password: dbpassword
    schema_name: schema1
    backup_path: /tmp/schema.sql.gz
  tasks:
    - name: 备份单个Postgres模式
      command: >
        pg_dump -U {{ dbuser }} -d {{ dbname }} -n {{ schema_name }} | gzip > {{ backup_path }}
      environment:
        PGPASSWORD: "{{ password }}"  # 通过环境变量传密码,避免命令行明文暴露
      args:
        creates: "{{ backup_path }}"  # 仅当备份文件不存在时执行,避免重复备份

恢复指定模式

如果需要恢复备份,用psql命令解压并导入即可:

- name: 恢复单个Postgres模式
      command: >
        gzip -dc {{ backup_path }} | psql -U {{ dbuser }} -d {{ dbname }}
      environment:
        PGPASSWORD: "{{ password }}"

关于postgresql_db模块的补充

你提到也试过postgresql_db模块,这个模块确实支持dump状态,但它是针对整个数据库的备份,无法单独指定某个模式,所以同样不满足你的单模式备份需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:07:56