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
的目錄。
一般設定屬性¶
屬性名稱 |
描述 |
預設 |
---|---|---|
|
|
|
|
|
|
|
不區分大小寫地比對資料集和資料表名稱。 |
|
|
快取遠端資料集和資料表名稱的持續時間。設定為 |
|
查詢 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 類型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支援其他類型。
PrestoDB 到 PostgreSQL 類型映射¶
連接器會將 PrestoDB 類型對應到對應的 PostgreSQL 類型
PrestoDB 類型 |
PostgreSQL 類型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不支援其他類型。
具有不支援欄位的資料表¶
如果您使用 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 陳述式