PostgreSQL 連接器

PostgreSQL 連接器允許在外部 PostgreSQL 資料庫中查詢和建立資料表。這可用於在不同系統(如 PostgreSQL 和 Hive)之間,或在兩個不同的 PostgreSQL 執行個體之間加入資料。

設定

若要設定 PostgreSQL 連接器,請在 etc/catalog 中建立一個目錄屬性檔案,例如命名為 postgresql.properties,以將 PostgreSQL 連接器掛載為 postgresql 目錄。建立具有以下內容的檔案,並將連線屬性替換為適合您設定的值

connector.name=postgresql
connection-url=jdbc:postgresql://example.net:5432/database
connection-user=root
connection-password=secret

多個 PostgreSQL 資料庫或伺服器

PostgreSQL 連接器只能存取 PostgreSQL 伺服器內的單一資料庫。因此,如果您有多個 PostgreSQL 資料庫,或想要連線到多個 PostgreSQL 伺服器,您必須設定 PostgreSQL 連接器的多個執行個體。

若要新增另一個目錄,只需在 etc/catalog 中新增另一個具有不同名稱的屬性檔案(確保它以 .properties 結尾)。例如,如果您將屬性檔案命名為 sales.properties,Presto 將使用設定的連接器建立一個名為 sales 的目錄。

一般設定屬性

屬性名稱

描述

預設

user-credential-name

extraCredentials 屬性的名稱,其值為 JDBC 驅動程式的使用者名稱。請參閱 參數參考 中的 extraCredentials

password-credential-name

extraCredentials 屬性的名稱,其值為 JDBC 驅動程式的使用者密碼。請參閱 參數參考 中的 extraCredentials

case-insensitive-name-matching

不區分大小寫地比對資料集和資料表名稱。

false

case-insensitive-name-matching.cache-ttl

快取遠端資料集和資料表名稱的持續時間。設定為 0ms 以停用快取。

1m

查詢 PostgreSQL

PostgreSQL 連接器會為每個 PostgreSQL 綱要提供一個綱要。您可以執行 SHOW SCHEMAS 來查看可用的 PostgreSQL 綱要

SHOW SCHEMAS FROM postgresql;

如果您有一個名為 web 的 PostgreSQL 綱要,您可以執行 SHOW TABLES 來查看此綱要中的資料表

SHOW TABLES FROM postgresql.web;

您可以使用下列任一方法,查看 web 資料庫中 clicks 資料表中的欄位清單

DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;

最後,您可以存取 web 綱要中的 clicks 資料表

SELECT * FROM postgresql.web.clicks;

如果您為目錄屬性檔案使用了不同的名稱,請在上述範例中使用該目錄名稱,而不是 postgresql

類型映射

PrestoDB 和 PostgreSQL 各自支援對方不支援的類型。從 PostgreSQL 讀取或寫入時,Presto 會將資料類型從 PostgreSQL 轉換為對等的 Presto 資料類型,並從 Presto 轉換為對等的 PostgreSQL 資料類型。

PostgreSQL 到 PrestoDB 類型映射

連接器會將 PostgreSQL 類型對應到對應的 PrestoDB 類型

PostgreSQL 到 PrestoDB 類型映射

PostgreSQL 類型

PrestoDB 類型

BIT

BOOLEAN

BOOLEAN

BOOLEAN

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE PRECISION

DOUBLE

REAL

REAL

NUMERIC(p, s)

DECIMAL(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

ENUM

VARCHAR

BYTEA

VARBINARY

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ

TIMESTAMP

MONEY

DOUBLE

UUID

UUID

JSON

JSON

JSONB

JSON

不支援其他類型。

PrestoDB 到 PostgreSQL 類型映射

連接器會將 PrestoDB 類型對應到對應的 PostgreSQL 類型

PrestoDB 到 PostgreSQL 類型映射

PrestoDB 類型

PostgreSQL 類型

BOOLEAN

BOOLEAN

SMALLINT

SMALLINT

INTEGER

INTEGER

BIGINT

BIGINT

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

NUMERIC(p, s)

CHAR(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

VARBINARY

BYTEA

DATE

DATE

TIME

TIME

TIMESTAMP

TIMESTAMP

UUID

UUID

不支援其他類型。

具有不支援欄位的資料表

如果您使用 Presto 連接器查詢 PostgreSQL 資料表,且該資料表沒有任何支援的欄位,或僅包含不支援的資料類型,Presto 會傳回類似以下範例的錯誤

查詢 20231120_102910_00004_35dqb 失敗: 資料表 'public.unsupported_type_table' 沒有支援的欄位 (所有 1 個欄位均不受支援)。

SQL 支援

PostgreSQL 連接器允許查詢和建立資料表。以下是一些支援的 SQL 作業範例

ALTER TABLE

ALTER TABLE postgresql.public.sample_table ADD COLUMN new_col INT;
ALTER TABLE postgresql.public.sample_table DROP COLUMN new_col;
ALTER TABLE postgresql.public.sample_table RENAME COLUMN is_active TO is_enabled;
ALTER TABLE postgresql.public.sample_table RENAME TO renamed_table;

注意

Presto 不支援使用 ALTER TABLE 命令直接變更欄位的資料類型。

ALTER TABLE postgresql.public.users ALTER COLUMN age TYPE BIGINT;

會傳回類似以下的錯誤

查詢 20240322_091317_00007_syzb3 失敗: 1:19 行: 不符的輸入 'ALTER'。 預期: 'FUNCTION'、'SCHEMA'、'TABLE'

CREATE TABLE

public 綱要中建立一個名為 test_integer 的新資料表

CREATE TABLE postgresql.public.test_integer ( id INTEGER );

注意

Presto 不會強制執行主鍵限制。例如,下列陳述式

CREATE TABLE users (
        id INT PRIMARY KEY,
        name VARCHAR,
        email VARCHAR
    );

會傳回類似以下的錯誤

查詢 20240322_095447_00010_syzb3 失敗: 2:19 行: 輸入不符 'PRIMARY'。 預期: ')', ','

CREATE TABLE AS SELECT

從現有的 renamed_table 表格建立一個新的表格 new_table

CREATE TABLE postgresql.public.new_table AS SELECT * FROM postgresql.public.renamed_table;

DESCRIBE

若要查看 web 資料庫中 clicks 表格的欄位列表,請使用下列任一方法

DESCRIBE postgresql.web.clicks;
SHOW COLUMNS FROM postgresql.web.clicks;

INSERT INTO

將資料插入 renamed_table 表格

INSERT INTO postgresql.public.renamed_table (id, name) VALUES (1, 'Test');

SELECT

SELECT * FROM postgresql.public.test_integer;

SHOW SCHEMAS

查看可用的 PostgreSQL 綱要

SHOW SCHEMAS FROM postgresql;

SHOW TABLES

查看名為 web 的 PostgreSQL 綱要中的表格

SHOW TABLES FROM postgresql.web;

TRUNCATE

renamed_table 表格刪除所有資料,但不刪除表格

TRUNCATE TABLE postgresql.public.renamed_table;

PostgreSQL 連接器限制

不支援下列 SQL 陳述式