跳到主要内容 跳到补充内容

PostgreSQL

本节介绍如何使用 PostgreSQL 目标连接器配置与 PostgreSQL 目标的连接。PostgreSQL 只能在复制任务中用作目标。在连接到 PostgreSQL 目标之前,您需要在数据库上配置 所需的权限。如果您通过 数据移动网关 连接到 PostgreSQL,还需要安装驱动程序设置中所述的驱动程序。

有关使用 PostgreSQL 连接器时的限制和注意事项的信息,请参阅限制和考虑事项

设置连接属性

本节介绍可用的连接属性。除非另有说明,否则所有属性都是必需的。

数据目标

  • 数据网关选择将用于测试与 PostgreSQL 目标的连接的 数据移动网关。这应该是用于访问数据源的同一网关。

    信息注释
    • 需要 数据移动网关 2023.5.10 或更高版本。
    • 您还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息,请参见下文的驱动程序设置

  • 云提供商:根据情况选择以下选项之一:

      • 内部 PostgreSQL
      • Amazon Aurora
      • Azure Database for PostgreSQL - Flexible Server。
    • 对于 Amazon RDS for PostgreSQL。

      • Google Cloud SQL for PostgreSQL
      • Google Cloud AlloyDB for PostgreSQL
    • 对于 Microsoft Azure Database for PostgreSQL。

  • 主机:安装 PostgreSQL 数据库的计算机的主机名或 IP 地址。

  • 端口:连接到数据库时要使用的端口。默认值为 5432。

帐户属性

用户名密码: 经授权可访问 PostgreSQL Server 数据库的用户的用户名和密码。

数据库属性

  • 数据库名称:有两种方法可以用于指定数据库:

    • 方法 1 - 从列表中选择:单击加载数据库,然后选择一个数据库。
    • 方法 2 - 手动:选择手动输入数据库名称,然后输入数据库名称。
  • SSL 模式:选择以下选项之一:
    • 禁用 - 仅使用姓氏和密码连接。
    • 允许 - 如果服务器请求,则建立加密连接。
    • 优选 - 这是默认设置。Preferred - 如果服务器支持加密连接,则建立加密连接,如果无法建立加密连接则返回到未加密连接。
    • Required - 如果服务器支持加密连接,则建立加密连接。如果无法建立加密连接,则连接尝试失败。
    • Verify CA - 类似于 Required,但也根据配置的 CA 证书验证服务器证书机构 (CA) 证书。如果找不到有效的匹配 CA 证书,则连接尝试失败。
    • Verify Full - 类似于 Verify CA,但也通过对比服务器发送到客户端的证书中的身份,检查客户端用来连接到服务器的主机名(即 数据移动网关)。客户端检查用于连接的主机名是否与服务器证书中的“公用名”值匹配。如果不匹配,连接将失败。
  • 可信证书:颁发 PEM 格式客户端证书文件的证书机构 (CA)。
  • 客户端证书:上传服务器请求的客户端证书。
  • 客户端证书密钥:PEM 格式的客户端私钥文件。
  • CRL:CRL 证书。此文件包含证书颁发机构吊销的证书。如果服务器证书出现在此列表中,则连接将失败。
  • SSL 压缩:选择此选项可在数据加密之前对其进行压缩。
  • 最大文件大小 (KB):在将 CSV 文件加载到 PostgreSQL 目标数据库之前,选择或键入其最大大小(以 KB 为单位)。默认值为 32000 KB。

内部属性

内部属性用于特殊用例,因此不会在对话框中公开。只有在 Qlik 支持部门的指示下,您才应该使用它们。

使用字段右侧的 新建取消 按钮可以根据需要添加或删除特性。

名称

连接的显示名称。

先决条件

所需的权限

连接器设置中指定的用户必须是 PostgreSQL 数据库中的注册用户。

此外,还必须授予以下权限:

  • 可以登录
  • 创建数据库
信息注释如果目标架构已存在于数据库中,则不需要“创建数据库”权限。

驱动程序设置

您可以使用驱动程序安装实用程序(推荐)安装 driver 或手动安装。只有在您遇到驱动程序安装实用程序发生问题的少见情况下,才应尝试手动安装。

使用驱动程序安装实用程序安装驱动程序

本部分介绍如何安装所需的 driver。这个过程包括运行一个脚本,该脚本将自动下载、安装和配置所需的 driver。您还可以根据需要运行脚本来更新和卸载 driver

  • 请确保在 数据移动 网关服务器上安装了 Python 3.6 或更高版本。

    Python 预装在大多数 Linux 发行版上。您可以通过运行以下命令来检查系统上安装了哪个 Python 版本。

    python3 --version

下载并安装 driver

  1. 数据移动 网关计算机上,将工作目录更改为:

    opt/qlik/gateway/movement/drivers/bin

  2. 然后运行以下命令:

    语法:

    ./install postgres

    如果无法下载 driver(由于访问限制或技术问题),将显示一条消息,为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后,请再次运行 install postgres 命令。

    否则,将显示 driver 的 EULA。

  3. 执行以下选项之一:

    • 重复按 [Enter] 可在 EULA 中缓慢滚动。
    • 重复按空格键可快速滚动 EULA。
    • 按 q 退出许可证文本并显示 EULA 接受选项。
  4. 执行以下操作之一:

    • 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
    • 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
    • 键入“v”并按 [Enter] 以再次查看 EULA。

  5. 将会安装 driver

如果要在安装提供的 driver 之前卸载以前版本的 driver,请运行 update 命令。

下载并更新 driver

  1. 数据移动 网关计算机上,将工作目录更改为:

    opt/qlik/gateway/movement/drivers/bin

  2. 然后运行以下命令:

    语法:

    ./update postgres

    如果无法下载 driver(由于访问限制或技术问题),将显示一条消息,为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后,请再次运行 update postgres 命令。

    否则,将显示 driver 的 EULA。

  3. 执行以下选项之一:

    • 重复按 [Enter] 可在 EULA 中缓慢滚动。
    • 重复按空格键可快速滚动 EULA。
    • 按 q 退出许可证文本并显示 EULA 接受选项。
  4. 执行以下操作之一:

    • 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
    • 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
    • 键入“v”并按 [Enter] 可从头开始查看 EULA。
  5. 将卸载旧的 driver,并安装新的 driver

如果要卸载 driver,请运行 uninstall 命令。

卸载 driver

  1. 停止所有配置为使用此连接器的任务。

  2. 数据移动 网关计算机上,将工作目录更改为:

    opt/qlik/gateway/movement/drivers/bin

  3. 然后运行以下命令:

    语法:

    ./uninstall postgres

    将卸载 driver

手动安装驱动程序和库

只有在自动驱动程序安装未成功完成的情况下,才应尝试手动安装 driver

安装 数据移动网关 后,下载以下 RPM 文件。您可以在 /opt/qlik/gateway/movement/drivers/manifests/postgres.yaml 中找到 binary-artifacts 下文件的直接下载链接。下载完成后,将文件复制到 数据移动网关 机器上。

在 Red Hat 9.x 上安装 数据移动网关 时:

  • postgresql<version>-libs-<version>PGDG.rhel9.x86_64.rpm
  • postgresql<version>-<version>PGDG.rhel9.x86_64.rpm
  • postgresql<version>-odbc-<version>PGDG.rhel9.x86_64.

在 Red Hat 8.x 上安装 数据移动网关 时:

  • postgresql<version>-libs-<version>PGDG.rhel8.x86_64.rpm
  • postgresql<version>-<version>PGDG.rhel8.x86_64.rpm
  • postgresql<version>-odbc-<version>PGDG.rhel8.x86_64.rpm

 

数据移动网关 服务器上,打开 shell 提示符并执行以下操作:

  1. 停止 数据移动网关 服务:

    sudo systemctl stop repagent

  2. 可选择确认服务已停止:

    sudo systemctl status repagent

    状态应如下所示:

    Active: inactive (dead) since <timestamp> ago

  3. 安装 RPM 文件。

  4. 将工作目录更改为 <数据移动网关_Install_Dir>/bin.

  5. 如下将驱动程序位置复制到 site_arep_login.sh 文件:

    echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/lib:/usr/lib64:/usr/pgsql-<version>/lib" >> site_arep_login.sh

    这将把驱动程序添加到 "LD_LIBRARY_PATH" 并更新 site_arep_login.sh 文件中的驱动程序位置。

  6. 可选择确认已将驱动程序位置复制:

    cat site_arep_login.sh
  7. 确保 /etc/odbcinst.ini 文件包含 PostgreSQL 的条目,如以下示例所示:

    [PostgreSQL]

    Description = PostgreSQL ODBC driver

    Driver = /usr/pgsql-13/lib/psqlodbc.so

    Setup = /usr/pgsql-13/lib/psqlodbcw.so

    UsageCount = 1

  8. 启动 数据移动网关 服务:

    sudo systemctl start repagent

  9. 可选择确认服务已启动:

    sudo systemctl status repagent

    状态应如下所示:

    Active: active (running) since <timestamp> ago

限制和考虑事项

当使用 PostgreSQL 作为复制目标时,以下限制适用:

  • 不支持对没有包含重复记录的主键/唯一索引的表执行 UPDATE 和 DELETE 操作。对这些表的任何更改都将影响目标中的所有记录。
  • 在批处理优化应用模式下,不支持键中包含 LOB 列的表。当 VARBINARY 列用作源表键时,将在目标中创建 BYTEA 列。这会导致“批量优化应用”模式中出现不可预测的行为。作为一种变通方法,我们建议使用 SQLite HEX 函数将 VARBINARY 转换为 VARCHAR。

数据类型

本机数据类型信息将被保留,并显示在数据集视图的本机数据类型列中。如果列不可见,则需要打开数据集视图的列选择器,然后选择本机数据类型列。

数据类型
Qlik Cloud 数据类型 PostgreSQL 数据类型

BOOL

BOOL

BYTES

BYTEA

DATE

DATE

TIME

TIME

DATETIME

如果刻度 => 0 且 =< 6,那么:

TIMESTAMP

如果刻度 => 7 且 =< 12,那么:

VARCHAR (37)

INT1

SMALLINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL (p,s)

REAL4

FLOAT4

REAL8

FLOAT8

STRING

如果长度为 1 - 21845,则为:

VARCHAR(以字节为单位的长度 = STRING 值乘以三)

如果长度为 21846 - 2147483647,则为:

varchar(65535)

UINT1

SMALLINT

UINT2

INTEGER

UINT4

BIGINT

UINT8

BIGINT

WSTRING

如果长度为 1 - 21845,则为:

VARCHAR(以字节为单位的长度 = WSTRING 值乘以三)

如果长度为 21846 - 2147483647,则为:

varchar(65535)

BLOB

BYTEA

NCLOB

TEXT

CLOB

TEXT

PostgreSQL 源复制时的数据类型

PostgreSQL 源复制时,除了具有用户定义或 PostGIS 数据类型的列外,将为所有列创建具有相同数据类型的目标表。在这种情况下,数据类型将在目标中创建为“变化字符”。

本页面有帮助吗?

如果您发现此页面或其内容有任何问题 – 打字错误、遗漏步骤或技术错误 – 请告诉我们如何改进!