# PostgreSQL

此區段說明如何使用 PostgreSQL 目標連接器對 PostgreSQL 目標設定連線能力。PostgreSQL 僅可作為複寫任務中的目標使用。您需要先在資料庫上設定 [必要權限](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/postgresql-target.htm#Permissi)，才能連線至 PostgreSQL 目標。若您正透過 資料移動閘道 連線至 PostgreSQL，您也需要按照 [驅動程式的設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/postgresql-target.htm#Driver) 中的說明安裝驅動程式。

如需關於使用 PostgreSQL 連接器時的限制和考慮事項的資訊，請參閱 [限制和考慮事項](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/postgresql-target.htm#Limitati)。

## 設定連線屬性

若要設定連接器，進行下列事項：

1. 在連線中，按一下建立連線。

2. 選取 PostgreSQL 目標連接器，然後提供下列設定：

### 資料目標

* 資料閘道：使用 資料移動閘道 時，選取將會用來測試 PostgreSQL 目標連線的資料閘道。其閘道應與用來存取資料來源的閘道相同。

  資訊備註

  * 此欄位無法用於 Qlik Talend Cloud 啟動器 訂閱，因為此訂閱層級不支援 資料移動閘道。

  * 您也需要在 資料移動閘道 機器上安裝適當的驅動程式。如需詳細資訊，請參閱以下的 [驅動程式的設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/postgresql-target.htm#Driver)。

* 雲端提供者：在適當時選擇以下項目之一：

  * 無 - 在使用以下內容時選取：

    * PostgreSQL 內部部署
    * Amazon Aurora
    * 適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器
    * 否 資料移動閘道

  * Amazon RDS

    適用於 Amazon RDS for PostgreSQL。

  * Google Cloud - 在使用以下內容時選取：

    * Google Cloud SQL for PostgreSQL
    * Google Cloud AlloyDB for PostgreSQL

  * Microsoft Azure

    適用於 Microsoft Azure Database for PostgreSQL。

* 主機：PostgreSQL 資料庫安裝所在電腦的主機名稱或 IP 位址。

* 連接埠：連線至資料庫時使用的連接埠。預設值為 5432。

### 帳戶屬性

使用者名稱和密碼：獲得授權可存取 PostgreSQL Server 資料庫的使用者的使用者名稱和密碼。

### 資料庫屬性

* 資料庫名稱：有兩種方法可用來指定資料庫：

  * 方法 1 - 從清單中選取：按一下載入資料庫，然後選取資料庫。
  * 方法 2 - 手動：選取手動輸入資料庫名稱，然後輸入資料庫名稱。

* SSL 模式：選擇以下其中一項：

  * 停用 - 僅使用姓氏和密碼連線。
  * 允許 - 若伺服器要求，則建立加密連線。
  * 偏好 - 此為預設。如果伺服器支援加密連線，建立加密連線，如果無法建立加密連線，返回未加密連線。
  * 需要：如果伺服器支援加密連線，建立加密連線。如果無法建立加密連線，連線嘗試失敗。
  * Verify CA：類似 Required，但也驗證設定 CA 憑證的伺服器憑證授權單位 (CA) 憑證。如果未找到有效相符 CA 憑證，連線嘗試失敗。
  * Verify Full：類似 Verify CA，但也會透過檢查用戶端用於連限制伺服器的主機名稱執行主機名稱辨識驗證（比如Qlik Talend Data Integration），辨識伺服器發送給用戶端的憑證。用戶端檢查用於連線的主機名稱是否符合伺服器憑證中的一般名稱值。如果不相符則連線失敗。

* 信任憑證： 以 PEM 格式發出用戶端憑證檔案的憑證授權單位 (CA)。

* 用戶端憑證：上傳伺服器要求的用戶端憑證。

* 用戶端憑證金鑰：PEM 格式的用戶端私人金鑰檔案。

* CRL：CRL 憑證。此檔案包含憑證授權單位撤銷的憑證。如果伺服器憑證出現在此清單，連線會失敗。

* SSL 壓縮：選擇此選項在加密前壓縮檔案。

* 最大檔案大小 (KB)：請先選取或輸入 CSV 檔案的最大大小 (單位為 KB)，再載入到 PostgreSQL 目標資料庫中。預設值為 32000 KB。

### 內部屬性

內部屬性用於特殊使用情況，因此不會在對話方塊中顯示。您只能在 Qlik 支援指示下使用。

根據需要使用欄位右側的 the 新建 icon 和 the 取消 icon 按鈕以新增或移除屬性。

### 名稱

連線的顯示名稱。

## 必要條件

### 必要權限

連接器設定中指定的使用者必須是 PostgreSQL 資料庫中已註冊的使用者。

此外，必須授予下列權限：

* 可以登入

* 建立資料庫

  資訊備註若目標結構描述已存在於資料庫中，則不需要「建立資料庫」權限。

### 驅動程式的設定

您可以使用驅動程式安裝公用程式 (建議) 或手動安裝 driver。只能在不太可能發生的事件 (您在使用驅動程式安裝公用程式時遇到問題) 中嘗試手動安裝。

#### 使用驅動程式安裝公用程式來安裝驅動程式

此區段描述如何安裝所需的 driver。該流程涉及執行將會自動下載、安裝並設定所需 driver 的指令碼。您也可以執行指令碼，以根據需求更新並解除安裝 driver。

準備安裝

* 確認 Python 3.6 或更高版本安裝於 Data Movement 閘道伺服器。

  Python 會預先安裝在大部分的 Linux 發行版。您可以執行下列命令，以查看哪個 Python 版本安裝在您的系統上：

  python3 --version

安裝 driver

若要下載並安裝 driver：

1. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

2. 執行下列命令：

   語法：

   ./install postgres

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 install postgres 命令。

   否則，就會顯示 driver 的 EULA。

3. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

4. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。

   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。

   * 輸入「v」並按下 [Enter] 以再次檢視 EULA。

   將會安裝 driver。

更新 driver

若您想要在安裝提供的 driver 之前解除安裝先前的 driver 版本，請執行更新命令。

若要下載並更新 driver：

1. 在 Data Movement 閘道機器上，將工作目錄變更為：

   opt/qlik/gateway/movement/drivers/bin

2. 執行下列命令：

   語法：

   ./update postgres

   若無法下載 driver (由於存取限制或技術問題)，將會顯示訊息，指示您到哪裡下載 driver 以及在 Data Movement 閘道機器上的何處複製。完成後，再次執行 update postgres 命令。

   否則，就會顯示 driver 的 EULA。

3. 執行下列其中一個動作：

   * 重複按下 [Enter] 以緩慢瀏覽 EULA。
   * 重複按下空格鍵以快速瀏覽 EULA。
   * 按下 q 以結束授權文字並呈現 EULA 接受選項。

4. 執行下列其中一個動作：

   * 輸入「y」並按下 [Enter] 以接受 EULA 並開始安裝。
   * 輸入「n」並按下 [Enter] 以拒絕 EULA 並退出安裝。
   * 輸入「v」並按下 [Enter] 以從頭檢閱 EULA。

   將會解除安裝舊版 driver，並安裝新版 driver。

解除安裝 driver

若您想要解除安裝 driver，請執行解除安裝命令。

若要解除安裝 driver：

1. 停止設定為使用此連接器的所有任務。

2. 在 Data Movement 閘道機器上，將工作目錄變更為：

   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&lt;version&gt;-libs-&lt;version&gt;PGDG.rhel9.x86\_64.rpm
* postgresql&lt;version&gt;-&lt;version&gt;PGDG.rhel9.x86\_64.rpm
* postgresql&lt;version&gt;-odbc-&lt;version&gt;PGDG.rhel9.x86\_64。

若 資料移動閘道 安裝於 Red Hat 8.x：

* postgresql&lt;version&gt;-libs-&lt;version&gt;PGDG.rhel8.x86\_64.rpm
* postgresql&lt;version&gt;-&lt;version&gt;PGDG.rhel8.x86\_64.rpm
* postgresql&lt;version&gt;-odbc-&lt;version&gt;PGDG.rhel8.x86\_64.rpm

在 Data Movement gateway 伺服器上，開啟 shell prompt 並進行以下項目：

1. 停止 Data Movement gateway 服務：

   sudo systemctl stop repagent

2. 可自選，確認服務已停止：

   sudo systemctl status repagent

   狀態應如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 安裝 RPM 檔案。

4. 變更任務目錄至 &lt;Data Movement gateway-Install-Dir&gt;/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. 開始 Data Movement gateway 服務：

   sudo systemctl start repagent

9. 可自行選擇確認服務已開始：

   sudo systemctl status repagent

   狀態應如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

## 限制和考慮事項

使用 PostgreSQL 作為複寫目標時，下列限制適用：

* 不支援沒有主要金鑰/唯一索引且包含複寫記錄的表格上的更新和刪除操作。對這些表格的任何變更將會影響目標中的所有記錄。
* 批次最佳化套用模式不支援具有金鑰 LOB 欄的表格。若 VARBINARY 欄作為來源表格金鑰使用，將會在目標中建立 BYTEA 欄。這會在批次最佳化套用模式中造成無法預測的行為。作為因應措施，我們建議使用 SQLite HEX 函數，以將 VARBINARY 轉換至 VARCHAR。

## 資料類型

會保留原生資料類型資訊，並顯示在資料集檢視的原生資料類型欄中。若看不見欄，您需要開啟資料集檢視的欄選擇器並選取原生資料類型欄。

警告備註若從具有對應至 PostgreSQL 目標上 BYTEA 之欄的來源表格 移動，請確保[在任務設定中](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Replicating/replicating-settings.htm#LOB)啟用複寫 LOB 欄選項 (預設)。

資料類型

| Qlik Cloud 資料類型 | PostgreSQL 資料類型 |
| --- | --- |
| BOOL | BOOL |
| 位元組 | BYTEA |
| 日期 | 日期 |
| 時間 | 時間 |
| 日期時間 | 若刻度為 =&gt; 0 且 =&lt; 6，則：<br><br>時間戳記<br><br>若刻度為 =&gt; 7 且 =&lt; 12，則：<br><br>VARCHAR (37) |
| INT1 | SMALLINT |
| INT2 | SMALLINT |
| INT4 | 整數 |
| INT8 | BIGINT |
| 數字 | 小數點 (P,S) |
| REAL4 | FLOAT4 |
| REAL8 | FLOAT8 |
| 字串 | 若長度為 1 - 21845，則：<br><br>VARCHAR (單位為位元組的長度 = STRING 值乘以三)<br><br>若長度為 21846 - 2147483647，則：<br><br>VARCHAR (65535) |
| UINT1 | SMALLINT |
| UINT2 | 整數 |
| UINT4 | BIGINT |
| UINT8 | BIGINT |
| WSTRING | 若長度為 1 - 21845，則：<br><br>VARCHAR (單位為位元組的長度 = WSTRING 值乘以三)<br><br>若長度為 21846 - 2147483647，則：<br><br>VARCHAR (65535) |
| BLOB | BYTEA |
| NCLOB | 文字 |
| CLOB | 文字 |

### 從 PostgreSQL 來源複寫時的資料類型

從 PostgreSQL 來源複寫時，將會為所有欄以相同的資料類型建立目標表格，但具有使用者定義或 PostGIS 資料類型的欄除外。在這類情況下，將會建立資料類型作為目標中的「字元變化」。