community.postgresql.postgresql_copy 模块 – 在文件/程序和 PostgreSQL 表之间复制数据

注意

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

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

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

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

概要

  • 在文件/程序和 PostgreSQL 表之间复制数据。

要求

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

  • psycopg2 >= 2.5.1

参数

参数

注释

ca_cert

别名:ssl_rootcert

字符串

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

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

columns

别名:column

列表 / 元素=字符串

用于 COPY FROM/TO 的 src/dst 表的列名列表。

connect_params

字典

在 community.postgresql 2.3.0 中添加

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

这些参数具有优先级。

默认值: {}

copy_from

别名:from

路径

将数据从文件复制到表(将数据追加到表中已有的数据)。

copy_tosrc 互斥。

copy_to

别名:to

路径

将表的内容复制到文件。

也可以复制 SELECT 查询的结果。

copy_fromdst 互斥。

db

别名:login_db

字符串

要连接到的数据库的名称。

dst

别名:destination

字符串

将数据从 copy_from=/path/to/data.file 复制到 dst=tablename

仅与 copy_from 一起使用。

login_host

别名:host

字符串

运行数据库的主机。

如果使用 localhost 时出现连接问题,请尝试使用 127.0.0.1

默认值: ""

login_password

字符串

此模块应用于建立其 PostgreSQL 会话的密码。

默认值: ""

login_unix_socket

别名:unix_socket

字符串

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

默认值: ""

login_user

别名:login

字符串

此模块应用于建立其 PostgreSQL 会话的用户名。

默认值: "postgres"

options

字典

COPY 命令的选项。

查看可用选项的完整列表 https://postgresql.ac.cn/docs/current/sql-copy.html

port

别名:login_port

整数

要连接到的数据库端口。

默认值: 5432

program

布尔值

src/dst 标记为程序。数据将复制到/从程序。

参见示例块和 PROGRAM 参数说明 https://postgresql.ac.cn/docs/current/sql-copy.html

选项

  • false ← (默认)

  • true

session_role

字符串

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

SQL命令的权限检查将视为session_role是最初登录的用户。

src

别名: source

字符串

将数据从copy_from复制到src=tablename

仅与copy_to一起使用。

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"

trust_input

布尔值

在community.postgresql 0.2.0中添加

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

只有当可能发生SQL注入时,使用false才合乎情理。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

check_mode

支持: 部分

如果check_mode=true,我们只检查src/dst表的可用性并返回实际上未执行的COPY查询。

如果i(check_mode=true)并且源代码已作为SQL传递,模块将执行它并回滚事务,但请注意,这可能会影响数据库性能(例如,如果SQL收集大量数据)。

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

备注

注意

  • 支持PostgreSQL 9.4+ 版本。

  • COPY命令仅允许数据库超级用户使用。

  • 默认身份验证假设您正在以主机上的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包。

另请参见

另请参见

COPY 命令参考

COPY命令文档的完整参考。

示例

- name: Copy text TAB-separated data from file /tmp/data.txt to acme table
  community.postgresql.postgresql_copy:
    copy_from: /tmp/data.txt
    dst: acme

- name: Copy CSV (comma-separated) data from file /tmp/data.csv to columns id, name of table acme
  community.postgresql.postgresql_copy:
    copy_from: /tmp/data.csv
    dst: acme
    columns: id,name
    options:
      format: csv

- name: >
    Copy text vertical-bar-separated data from file /tmp/data.txt to bar table.
    The NULL values are specified as N
  community.postgresql.postgresql_copy:
    copy_from: /tmp/data.csv
    dst: bar
    options:
      delimiter: '|'
      null: 'N'

- name: Copy data from acme table to file /tmp/data.txt in text format, TAB-separated
  community.postgresql.postgresql_copy:
    src: acme
    copy_to: /tmp/data.txt

- name: Copy data from SELECT query to/tmp/data.csv in CSV format
  community.postgresql.postgresql_copy:
    src: 'SELECT * FROM acme'
    copy_to: /tmp/data.csv
    options:
      format: csv

- name: Copy CSV data from my_table to gzip
  community.postgresql.postgresql_copy:
    src: my_table
    copy_to: 'gzip > /tmp/data.csv.gz'
    program: true
    options:
      format: csv

- name: >
    Copy data from columns id, name of table bar to /tmp/data.txt.
    Output format is text, vertical-bar-separated, NULL as N
  community.postgresql.postgresql_copy:
    src: bar
    columns:
    - id
    - name
    copy_to: /tmp/data.csv
    options:
      delimiter: '|'
      null: 'N'

返回值

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

描述

dst

字符串

数据目标。

返回:成功

示例:"/tmp/data.csv"

queries

字符串

已执行查询的列表。

返回:成功

示例:"[\"COPY test_table FROM '/tmp/data_file.txt' (FORMAT csv, DELIMITER ',', NULL 'NULL')\"]"

src

字符串

数据源。

返回:成功

示例:"mytable"

作者

  • Andrew Klychkov (@Andersson007)