community.postgresql.postgresql_publication 模块 – 添加、更新或删除 PostgreSQL 发布

注意

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

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

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

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

概要

  • 添加、更新或删除 PostgreSQL 发布。

要求

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

  • psycopg2 >= 2.5.1

参数

参数

注释

ca_cert

别名:ssl_rootcert

字符串

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

如果该文件存在,则将验证服务器的证书是否由此机构签名。

cascade

布尔值

删除发布依赖项。仅当 state=absent 时有效。

选项

  • false ← (默认)

  • true

columns

字典

在 community.postgresql 3.8.0 中添加

要添加到发布的表及其列的列表。

如果未传递表的列,则将整体发布该表。

tablestables_in_schema 互斥。

comment

字符串

在 community.postgresql 3.3.0 中添加

在发布上设置注释。

要重置注释,请传递一个空字符串。

connect_params

字典

在 community.postgresql 2.3.0 中添加

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

这些参数优先。

默认: {}

db

别名:login_db

字符串

要连接的数据库的名称,以及将在其中更改发布状态的数据库。

login_host

别名:host

字符串

运行数据库的主机。

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

默认: ""

login_password

字符串

此模块应使用此密码来建立其 PostgreSQL 会话。

默认: ""

login_unix_socket

别名:unix_socket

字符串

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

默认: ""

login_user

别名:login

字符串

此模块应使用此用户名来建立其 PostgreSQL 会话。

默认: "postgres"

name

字符串 / 必需

要添加、更新或删除的发布的名称。

owner

字符串

发布所有者。

如果未定义 owner,则所有者将设置为 login_usersession_role

parameters

字典

包含可选发布参数的字典。

可用参数取决于 PostgreSQL 版本。

port

别名:login_port

整数

要连接的数据库端口。

默认: 5432

session_role

字符串

在 community.postgresql 0.2.0 中添加

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

SQL 命令的权限检查就像 session_role 是最初登录的角色一样进行。

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"

  • "verify-full"

state

字符串

发布状态。

选项

  • "absent"

  • "present" ← (默认)

tables

list / elements=string

要添加到发布的表列表。

如果未设置任何值,则以所有表为目标。

如果发布已存在于特定表,并且未传递 tables,则不会进行任何更改。

如果需要将所有表添加到具有相同名称的发布中,请删除现有表并创建新表,而无需传递 tables

tables_in_schemacolumns 互斥。

tables_in_schema

list / elements=string

在 community.postgresql 3.5.0 中添加

指定要添加到发布中的模式列表,以复制这些模式中所有表的更改。

如果要删除所有模式,请显式传递一个空列表 []

PostgreSQL 15 及更高版本支持。

tablescolumns 互斥。

trust_input

布尔值

在 community.postgresql 0.2.0 中添加

如果为 false,请检查参数 nametablesownersession_roleparams 的值是否可能存在危险。

仅当通过参数进行 SQL 注入时,使用 false 才有意义。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持: 完全

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

注释

注意

  • PostgreSQL 版本必须为 10 或更高版本。

  • 默认身份验证假定您以 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 包。

另请参阅

另请参阅

CREATE PUBLICATION 参考

CREATE PUBLICATION 命令文档的完整参考。

ALTER PUBLICATION 参考

ALTER PUBLICATION 命令文档的完整参考。

DROP PUBLICATION 参考

DROP PUBLICATION 命令文档的完整参考。

示例

- name: Create a new publication with name "acme" targeting all tables in database "test"
  community.postgresql.postgresql_publication:
    db: test
    name: acme
    comment: Made by Ansible

- name: Create publication "acme" publishing only prices and vehicles tables
  community.postgresql.postgresql_publication:
    name: acme
    tables:
    - prices
    - vehicles

- name: Create publication "acme" publishing only prices table and id and named from vehicles tables
  community.postgresql.postgresql_publication:
    name: acme
    columns:
      prices:
      vehicles:
        - id
        - name

- name: Create a new publication "acme" for tables in schema "myschema"
  community.postgresql.postgresql_publication:
    db: test
    name: acme
    tables_in_schema: myschema

- name: Remove all schemas from "acme" publication
  community.postgresql.postgresql_publication:
    db: test
    name: acme
    tables_in_schema: []

- name: >
    Create publication "acme", set user alice as an owner, targeting all tables
    Allowable DML operations are INSERT and UPDATE only
  community.postgresql.postgresql_publication:
    name: acme
    owner: alice
    parameters:
      publish: 'insert,update'

- name: >
    Assuming publication "acme" exists and there are targeted
    tables "prices" and "vehicles", add table "stores" to the publication
  community.postgresql.postgresql_publication:
    name: acme
    tables:
    - prices
    - vehicles
    - stores

- name: Remove publication "acme" if exists in database "test"
  community.postgresql.postgresql_publication:
    db: test
    name: acme
    state: absent

返回值

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

描述

alltables

布尔值

标志指示是否发布了所有表。

返回: 如果发布存在

示例: false

exists

布尔值

标志指示在运行时结束时发布是否存在。

返回: 成功

示例: true

owner

字符串

运行时结束时发布的所有者。

返回: 如果发布存在

示例: "alice"

parameters

字典

运行时结束时的发布参数。

返回: 如果发布存在

示例: {"publish": {"delete": false, "insert": false, "update": true}}

queries

字符串

执行的查询列表。

返回: 成功

示例: "['DROP PUBLICATION \"acme\" CASCADE']"

tables

list / elements=string

运行时结束时发布中的表列表。

如果发布了所有表,则返回空列表。

返回: 如果发布存在

示例: ["\"public\".\"prices\"", "\"public\".\"vehicles\""]

作者

  • Loic Blot (@nerzhul)

  • Andrew Klychkov (@Andersson007)