使用 Azure Data Factory 或 Synapse Analytics 從 PostgreSQL 複製數據

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費啟動新的試用版

本文概述如何使用 Azure Data Factory 和 Synapse Analytics 管線中的複製活動,從 PostgreSQL 資料庫複製數據。 本文是根據複製活動概觀一文,該文提供複製活動的一般概觀。

重要

新的 PostgreSQL 連接器提供改良的原生 PostgreSQL 支援和更好的效能。 如果您在解決方案中使用舊版 PostgreSQL 連接器,則僅針對回溯相容性支援,請參閱 PostgreSQL 連接器(舊版) 一文。

支援的功能

下列功能支援此 PostgreSQL 連接器:

支援的功能 IR
複製活動 (來源/-) (1) (2)
查閱活動 (1) (2)

① Azure 整合執行階段 ② 自我裝載整合執行階段

如需複製活動所支援作為來源/接收器的資料存放區清單,請參閱支援的資料存放區表格。

具體而言,此 PostgreSQL 連接器支援 PostgreSQL 7.4 版和更新版本。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon 虛擬私人雲端中,則必須設定自我裝載整合執行階段以與其連線。

如果您的資料存放區是受控雲端資料服務,則可使用 Azure Integration Runtime。 如果只能存取防火牆規則中核准的 IP,您可以將 Azure Integration Runtime IP 新增至允許清單。

您也可以使用 Azure Data Factory 中的受控虛擬網路整合執行階段功能來存取內部部署網路,而不需要安裝和設定自我裝載整合執行階段。

如需 Data Factory 支援的網路安全性機制和選項的詳細資訊,請參閱資料存取策略

Integration Runtime 提供從 3.7 版開始的內建 PostgreSQL 驅動程式,因此您不需要手動安裝任何驅動程式。

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 PostgreSQL 的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立 PostgreSQL 的連結服務。

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 Postgre,然後選取 PostgreSQL 連接器。

    選取 PostgreSQL 連接器。

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    將連結服務設定為 PostgreSQL。

連接器設定詳細資料

下列各節提供屬性的相關詳細數據,這些屬性是用來定義PostgreSQL連接器專屬的Data Factory實體。

連結服務屬性

PostgreSQL 連結服務支援下列屬性:

屬性 描述 必要
type type 屬性必須設定為: PostgreSqlV2 Yes
伺服器 指定 PostgreSQL 執行所在的主機名和選擇性埠。 Yes
port PostgreSQL 伺服器的 TCP 連接埠。 No
database 要連接的 PostgreSQL 資料庫。 Yes
username 要連線的用戶名稱。 如果使用 IntegratedSecurity,則不需要。 Yes
password 要連線的密碼。 如果使用 IntegratedSecurity,則不需要。 Yes
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)
No
authenticationType 線上到資料庫的驗證類型。 僅支援 基本 Yes
connectVia 用於連線到資料存放區的 Integration Runtime。 深入了解必要條件一節。 如果未指定,就會使用預設的 Azure Integration Runtime。 No
其他連線屬性:
schema 設定架構搜尋路徑。 No
共用 是否應該使用連線共用。 No
connectionTimeout 在終止嘗試並產生錯誤之前,嘗試建立連線的時間(以秒為單位)。 No
commandTimeout 在終止嘗試並產生錯誤之前,嘗試執行命令的時間(以秒為單位)。 設定為零表示無限大。 No
trustServerCertificate 是否信任伺服器證書而不驗證它。 No
sslCertificate 要傳送至伺服器的客戶端憑證位置。 No
sslKey 要傳送至伺服器的用戶端憑證用戶端金鑰位置。 No
sslPassword 用戶端憑證金鑰的密碼。 No
readBufferSize 決定讀取時,Npgsql 所使用的內部緩衝區大小。 如果從資料庫傳輸大型值,增加可能會改善效能。 No
logParameters 啟用時,會在執行命令時記錄參數值。 No
timezone 取得或設定會話時區。 No
編碼 取得或設定將用來編碼/譯碼 PostgreSQL 字串數據的 .NET 編碼。 No

注意

若要在使用自我裝載整合運行時間時透過 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 Key Vault 中儲存密碼

{
    "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 數據集的類型屬性必須設定為: PostgreSqlV2Table Yes
schema 結構描述的名稱。 否 (如果已指定活動來源中的「查詢」)
table 資料表的名稱。 否 (如果已指定活動來源中的「查詢」)

範例

{
    "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 複製數據,複製活動 來源 區段中支援下列屬性:

屬性 描述 必要
type 複製活動來源的類型屬性必須設定為: PostgreSqlV2Source Yes
query 使用自訂 SQL 查詢來讀取資料。 例如: "query": "SELECT * FROM \"MySchema\".\"MyTable\"" 否 (如果已指定資料集中的 "tableName")

注意

結構描述和資料表名稱會區分大小寫。 在查詢中以 "" (雙引號) 括住它們。

範例:

"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\""
            },
            "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
NumbericArray String String
DateArray String String
Range String String
Bpchar String String

查閱活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

升級 PostgreSQL 鏈接服務

以下是可協助您升級 PostgreSQL 連結服務的步驟:

  1. 建立新的 PostgreSQL 鏈接服務,並藉由參考 鏈接的服務屬性加以設定。

  2. 最新 PostgreSQL 連結服務的數據類型對應與舊版的數據類型對應不同。 若要瞭解最新的數據類型對應,請參閱 PostgreSQL 的數據類型對應。

PostgreSQL 與 PostgreSQL 之間的差異(舊版)

下表顯示PostgreSQL與PostgreSQL之間的數據類型對應差異(舊版)。

PostgreSQL 數據類型 PostgreSQL 的過渡期服務數據類型 PostgreSQL 的過渡期服務資料類型 (舊版)
Money Decimal String
具有時區的時間戳 Datetime String
具有時區的時間 DateTimeOffset String
間隔 TimeSpan String
BigDecimal 不支援。 或者,利用 to_char() 函式將 BigDecimal 轉換為 String。 String

如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區