你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 数据工厂或 Synapse Analytics 从 PostgreSQL 复制数据

适用于: Azure 数据工厂 Azure Synapse Analytics

提示

试用 Microsoft Fabric 中的数据工厂,这是一种适用于企业的一站式分析解决方案。 Microsoft Fabric 涵盖从数据移动到数据科学、实时分析、商业智能和报告的所有内容。 了解如何免费开始新的试用

本文概述如何使用 Azure 数据工厂和 Synapse Analytics 管道中的复制活动从 PostgreSQL 数据库复制数据。 它是基于概述复制活动总体的复制活动概述一文。

重要

新的 PostgreSQL 连接器提供了改进的本机 PostgreSQL 支持。 如果你在解决方案中使用的是旧版 PostgreSQL 连接器,请在 2024 年 10 月 31 日之前升级 PostgreSQL 连接器。 有关旧版和最新版本之间的差异的详细信息,请参阅此部分

支持的功能

以下功能支持此 PostgreSQL 连接器:

支持的功能 IR
复制活动(源/-) ① ②
Lookup 活动 ① ②

① Azure 集成运行时 ② 自承载集成运行时

有关复制活动支持作为源/接收器的数据存储列表,请参阅支持的数据存储表。

具体而言,此 PostgreSQL 连接器支持 PostgreSQL 12 及更高版本

先决条件

如果数据存储位于本地网络、Azure 虚拟网络或 Amazon Virtual Private Cloud 内部,则需要配置自承载集成运行时才能连接到该数据存储。

如果数据存储是托管的云数据服务,则可以使用 Azure Integration Runtime。 如果访问范围限制为防火墙规则中允许的 IP,你可以选择将 Azure Integration Runtime IP 添加到允许列表。

此外,还可以使用 Azure 数据工厂中的托管虚拟网络集成运行时功能访问本地网络,而无需安装和配置自承载集成运行时。

要详细了解网络安全机制和数据工厂支持的选项,请参阅数据访问策略

集成运行时从版本 3.7 开始提供内置 PostgreSQL 驱动程序,因此无需手动安装任何驱动程序。

入门

若要使用管道执行复制活动,可以使用以下工具或 SDK 之一:

使用 UI 创建一个到 PostgreSQL 的链接服务

使用以下步骤在 Azure 门户 UI 中创建一个到 PostgreSQL 的链接服务。

  1. 浏览到 Azure 数据工厂或 Synapse 工作区中的“管理”选项卡并选择“链接服务”,然后单击“新建”:

  2. 搜索 Postgre 并选择 PostgreSQL 连接器。

    选择 PostgreSQL 连接器。

  3. 配置服务详细信息、测试连接并创建新的链接服务。

    配置到 PostgreSQL 的链接服务。

连接器配置详细信息

对于特定于 PostgreSQL 连接器的数据工厂实体,以下部分提供有关用于定义这些实体的属性的详细信息。

链接服务属性

PostgreSQL 链接的服务支持以下属性:

属性 描述 必需
type type 属性必须设置为:PostgreSqlV2
服务器 指定运行 PostgreSQL 的主机名和端口(可选)。
port PostgreSQL 服务器的 TCP 端口。
database 要连接到的 PostgreSQL 数据库。
username 要连接的用户名。 如果使用 IntegratedSecurity,则不需要。
password 要用于连接的密码。 如果使用 IntegratedSecurity,则不需要。
sslMode 控制是否使用 SSL,具体取决于服务器支持。
- 禁用:已禁用 SSL。 如果服务器需要 SSL,则连接将失败。
- 允许:如果服务器允许非 SSL 连接,则首选非 SSL 连接,但允许 SSL 连接。
- 首选:如果服务器允许 SSL 连接,则首选 SSL 连接,但允许不使用 SSL 的连接。
- 要求:如果服务器不支持 SSL,则连接会失败。
- Verify-ca:如果服务器不支持 SSL,则连接失败。 同时验证服务器证书。
- Verify-full:如果服务器不支持 SSL,则连接失败。 另请使用主机名验证服务器证书。
选项:禁用 (0) / 允许 (1) / 首选 (2)(默认)/ 需要 (3) / Verify-ca (4) / Verify-full (5)
authenticationType 用于连接到数据库的身份验证类型。 仅支持“基本”
connectVia 用于连接到数据存储的集成运行时。 在先决条件部分了解更多信息。 如果未指定,则使用默认 Azure Integration Runtime。
其他连接属性:
schema 设置架构搜索路径。
是否应使用连接池。
connectionTimeout 在终止尝试并生成错误之前,尝试建立连接的等待时间(以秒为单位)。
commandTimeout 在终止尝试并生成错误之前,尝试执行命令的等待时间(以秒为单位)。 对于无穷大,设置为零。
trustServerCertificate 是否信任服务器证书而不验证它。
sslCertificate 要发送到服务器的客户端证书的位置。
sslKey 要发送到服务器的客户端证书的客户端密钥位置。
sslPassword 客户端证书密钥的密码。
readBufferSize 确定读取时 Npgsql 使用的内部缓冲区大小。 如果从数据库传输大型值,则增加大小可能会提高性能。
logParameters 启用后,在执行命令时将会记录参数值。
timezone 获取或设置会话时区。
encoding 获取或设置将用于编码/解码 PostgreSQL 字符串数据的 .NET 编码。

注意

若要在使用自承载 Integration Runtime 时通过 ODBC 连接进行完全 SSL 验证,必须使用 ODBC 类型连接而不是显式使用 PostgreSQL 连接器,并完成以下配置:

  1. 在任何 SHIR 服务器上设置 DSN。
  2. 将正确的 PostgreSQL 证书放在 SHIR 服务器上的 C:\Windows\ServiceProfiles\DIAHostService\AppData\Roaming\postgresql\root.crt 中。 这是 ODBC 驱动程序在连接到数据库时查找要验证的 SSL 证书的位置。
  3. 在数据工厂连接中,使用 ODBC 类型连接,并将连接字符串指向在 SHIR 服务器上创建的 DSN。

示例:

{
    "name": "PostgreSqlLinkedService",
    "properties": {
        "type": "PostgreSqlV2",
        "typeProperties": {
            "server": "<server>",
            "port": 5432,
            "database": "<database>",
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "sslmode": <sslmode>,
            "authenticationType": "Basic"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

示例:在 Azure 密钥保管库中存储密码

{
    "name": "PostgreSqlLinkedService",
    "properties": {
        "type": "PostgreSqlV2",
        "typeProperties": {
            "server": "<server>",
            "port": 5432,
            "database": "<database>",
            "username": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>",
                    "type": "LinkedServiceReference"
                },
                "secretName": "<secretName>"
            }
            "sslmode": <sslmode>,
            "authenticationType": "Basic"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

数据集属性

有关可用于定义数据集的各部分和属性的完整列表,请参阅数据集一文。 本部分提供 PostgreSQL 数据集支持的属性列表。

从 PostgreSQL 复制数据时,支持以下属性:

属性 描述 必需
type 数据集的 type 属性必须设置为:PostgreSqlV2Table
schema 架构的名称。 否(如果指定了活动源中的“query”)
表的名称。 否(如果指定了活动源中的“query”)

示例

{
    "name": "PostgreSQLDataset",
    "properties":
    {
        "type": "PostgreSqlV2Table",
        "linkedServiceName": {
            "referenceName": "<PostgreSQL linked service name>",
            "type": "LinkedServiceReference"
        },
        "annotations": [],
        "schema": [],
        "typeProperties": {
            "schema": "<schema name>",
            "table": "<table name>"
        }
    }
}

如果使用 RelationalTable 类型数据集,该数据集仍按原样受支持,但我们建议今后使用新数据集。

复制活动属性

有关可用于定义活动的各部分和属性的完整列表,请参阅管道一文。 本部分提供 PostgreSQL 源支持的属性列表。

以 PostgreSQL 作为源

从 PostgreSQL 复制数据时,复制活动的 source 节支持以下属性:

属性 描述 必需
type 复制活动源的 type 属性必须设置为:PostgreSqlV2Source
query 使用自定义 SQL 查询读取数据。 例如:"query": "SELECT * FROM \"MySchema\".\"MyTable\"" 否(如果指定了数据集中的“tableName”)
queryTimeout 终止尝试执行命令并生成错误之前的等待时间,默认值为 120 分钟。 如果为此属性设置了参数,则允许的值是时间跨度,例如“02:00:00”(120 分钟)。 有关详细信息,请参阅 CommandTimeout
如果同时配置了 commandTimeoutqueryTimeout,则 queryTimeout 优先。

注意

架构和表名称区分大小写。 在查询中将名称括在 ""(双引号)中。

示例:

"activities":[
    {
        "name": "CopyFromPostgreSQL",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<PostgreSQL input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "PostgreSqlV2Source",
                "query": "SELECT * FROM \"MySchema\".\"MyTable\"",
                "queryTimeout": "00:10:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

如果使用 RelationalSource 类型源,该源仍按原样受支持,但我们建议今后使用新源。

PostgreSQL 的数据类型映射

从 PostgreSQL 复制数据时,将使用以下映射从 PostgreSQL 数据类型映射到服务在内部使用的临时数据类型。 若要了解复制活动如何将源架构和数据类型映射到接收器,请参阅架构和数据类型映射

PostgreSql 数据类型 临时服务数据类型 适用于 PostgreSQL(旧版)的临时服务数据类型
SmallInt Int16 Int16
Integer Int32 Int32
BigInt Int64 Int64
Decimal(精度 <= 28) Decimal Decimal
Decimal(精度 > 28) 不支持 String
Numeric Decimal Decimal
Real Single Single
Double Double Double
SmallSerial Int16 Int16
Serial Int32 Int32
BigSerial Int64 Int64
Money Decimal String
Char String String
Varchar String String
Text String String
Bytea Byte[] Byte[]
Timestamp DateTime DateTime
Timestamp with time zone DateTime String
Date DateTime DateTime
Time TimeSpan TimeSpan
Time with time zone DateTimeOffset String
Interval TimeSpan String
Boolean Boolean Boolean
Point String String
Line String String
Iseg String String
Box String String
Path String String
Polygon String String
Circle String String
Cidr String String
Inet String String
Macaddr String String
Macaddr8 String String
Tsvector String String
Tsquery String String
UUID Guid Guid
Json String String
Jsonb String String
Array String String
Bit Byte[] Byte[]
Bit varying Byte[] Byte[]
XML String String
IntArray String String
TextArray String String
NumericArray String String
DateArray String String
Range String String
Bpchar String String

查找活动属性

若要了解有关属性的详细信息,请查看 Lookup 活动

升级 PostgreSQL 连接器

下面是帮助你升级 PostgreSQL 连接器的步骤:

  1. 创建新的 PostgreSQL 链接服务,并通过引用链接服务属性配置它。

  2. 最新 PostgreSQL 链接服务的数据类型映射不同于旧版的数据类型映射。 要了解最新的数据类型映射,请参阅 PostgreSQL 的数据类型映射

PostgreSQL 与 PostgreSQL(旧版)之间的差异

下表显示了 PostgreSQL 与 PostgreSQL(旧版)之间的数据类型映射差异。

PostgreSQL 数据类型 适用于 PostgreSQL 的临时服务数据类型 适用于 PostgreSQL(旧版)的临时服务数据类型
金钱 Decimal 字符串
带时区的时间戳 DateTime 字符串
带时区的时间 DateTimeOffset 字符串
时间间隔 TimeSpan 字符串
BigDecimal 不支持。 或者,利用 to_char() 函数将 BigDecimal 转换为 String。 字符串

有关复制活动支持作为源和接收器的数据存储的列表,请参阅支持的数据存储