community.postgresql.postgresql_slot 模块 – 从 PostgreSQL 数据库添加或删除复制槽

注意

此模块是 community.postgresql 集合(版本 3.9.0)的一部分。

如果您正在使用 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.postgresql。您需要其他要求才能使用此模块,请参阅 要求了解详细信息。

要在 playbook 中使用它,请指定: community.postgresql.postgresql_slot

概要

  • 从 PostgreSQL 数据库添加或删除物理或逻辑复制槽。

要求

在执行此模块的主机上需要以下要求。

  • psycopg2 >= 2.5.1

参数

参数

注释

ca_cert

别名: ssl_rootcert

字符串

指定包含 SSL 证书颁发机构 (CA) 证书的文件名。

如果文件存在,将验证服务器的证书是否由这些机构之一签名。

connect_params

字典

在 community.postgresql 2.3.0 中添加

要传递给 libpg 的任何其他参数。

这些参数具有优先权。

默认值: {}

db

别名: login_db

字符串

要连接的数据库的名称。

immediately_reserve

布尔值

可选参数,当 true 时,指定立即为该复制槽保留 LSN,否则默认值 false 指定 LSN 在来自流式复制客户端的第一个连接时保留。

可从 PostgreSQL 版本 9.6 获得。

仅与 *slot_type=physical* 一起使用。

与 *slot_type=logical* 互斥。

选项

  • false ←(默认)

  • true

login_host

别名: host

字符串

运行数据库的主机。

如果在使用 localhost 时遇到连接问题,请尝试使用 127.0.0.1 代替。

默认值: ""

login_password

字符串

此模块应使用的密码,以建立其 PostgreSQL 会话。

默认值: ""

login_unix_socket

别名: unix_socket

字符串

本地连接的 Unix 域套接字的路径。

默认值: ""

login_user

别名: login

字符串

此模块应使用的用户名,以建立其 PostgreSQL 会话。

默认值: "postgres"

name

别名: slot_name

字符串 / 必需

要添加或删除的复制槽的名称。

output_plugin

字符串

所有逻辑槽都必须指示它们正在使用的输出插件解码器。

此参数不适用于物理槽。

它将在 *slot_type=physical* 时被忽略。

默认值: "test_decoding"

port

别名: login_port

整数

要连接的数据库端口。

默认值: 5432

session_role

字符串

连接后切换到 session_role。指定的 session_role 必须是当前 login_user 所属的角色。

对 SQL 命令的权限检查的执行方式,就好像 session_role 是最初登录的用户一样。

slot_type

字符串

槽类型。

选项

  • "logical"

  • "physical" ←(默认)

ssl_cert

路径

在 community.postgresql 2.4.0 中添加

指定客户端 SSL 证书的文件名。

ssl_key

路径

在 community.postgresql 2.4.0 中添加

指定客户端证书的私钥的位置。

ssl_mode

字符串

确定是否以及以何种优先级与服务器协商建立安全的 SSL TCP/IP 连接。

有关模式的更多信息,请参阅 https://postgresql.ac.cn/docs/current/static/libpq-ssl.html

默认值 prefer 与 libpq 默认值匹配。

选项

  • "allow" (允许)

  • "disable" (禁用)

  • "prefer" ← (默认)

  • "require" (要求)

  • "verify-ca" (验证 CA)

  • "verify-full" (完全验证)

state (状态)

字符串

槽的状态。

state=present 表示槽必须存在于系统中。

state=absent 表示必须从 target_roles 中撤销 groups

选项

  • "absent" (不存在)

  • "present" ← (默认)

trust_input (信任输入)

布尔值

在 community.postgresql 0.2.0 中添加

如果 false,则检查 session_role 的值是否可能存在危险。

仅当通过 session_role 可能发生 SQL 注入时,使用 false 才有意义。

选项

  • false (假)

  • true ← (默认)

属性

属性

支持

描述

check_mode (检查模式)

支持:完全

可以在 check_mode 中运行并返回更改状态预测,而无需修改目标。

注意事项

注意

  • 物理复制槽在 PostgreSQL 9.4 版本中引入,而逻辑复制槽从 10.0 版本开始添加。

  • 默认身份验证假设您正在以主机上的 postgres 帐户登录或使用 sudo。

  • 为避免“Peer authentication failed for user postgres”错误,请使用 postgres 用户作为 become_user

  • 此模块使用 psycopg,一个 Python PostgreSQL 数据库适配器。在使用此模块之前,必须确保主机上安装了 psycopg2 >= 2.5.1psycopg3 >= 3.1.8

  • 如果远程主机是 PostgreSQL 服务器(默认情况),则还必须在远程主机上安装 PostgreSQL。

  • 对于基于 Ubuntu 的系统,在使用此模块之前,请在远程主机上安装 postgresqllibpq-devpython3-psycopg2 包。

另请参阅

另请参阅

PostgreSQL pg_replication_slots 视图参考

PostgreSQL pg_replication_slots 视图的完整参考。

PostgreSQL 流复制协议参考

PostgreSQL 流复制协议文档的完整参考。

PostgreSQL 逻辑复制协议参考

PostgreSQL 逻辑复制协议文档的完整参考。

示例

- name: Create physical_one physical slot if doesn't exist
  become_user: postgres
  community.postgresql.postgresql_slot:
    slot_name: physical_one
    db: ansible

- name: Remove physical_one slot if exists
  become_user: postgres
  community.postgresql.postgresql_slot:
    slot_name: physical_one
    db: ansible
    state: absent

- name: Create logical_one logical slot to the database acme if doesn't exist
  community.postgresql.postgresql_slot:
    name: logical_slot_one
    slot_type: logical
    state: present
    output_plugin: custom_decoder_one
    db: "acme"

- name: Remove logical_one slot if exists from the cluster running on another host and non-standard port
  community.postgresql.postgresql_slot:
    name: logical_one
    login_host: mydatabase.example.org
    port: 5433
    login_user: ourSuperuser
    login_password: thePassword
    state: absent

返回值

通用返回值记录在 此处,以下是此模块独有的字段

描述

name (名称)

字符串

槽的名称。

返回: 成功

示例: "physical_one"

queries (查询)

字符串

已执行的查询列表。

返回: 成功

示例: "[\"SELECT pg_create_physical_replication_slot('physical_one', False, False)\"]"

作者

  • John Scalia (@jscalia)

  • Andrew Klychkov (@Andersson007)

  • Thomas O’Donnell (@andytom)