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

注意

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

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

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

要在剧本中使用它,请指定: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 arg 描述 https://postgresql.ac.cn/docs/current/sql-copy.html

选择

  • false ← (默认)

  • true

session_role

字符串

连接后切换到 session_role。指定的 session_role 必须是当前 login_user 是其成员的角色。

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 到该帐户。

  • 为了避免“用户 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)