關(guān)于 PolarDB PostgreSQL 版
PolarDB PostgreSQL 版是一款阿里云自主研發(fā)的云原生關(guān)系型數(shù)據(jù)庫產(chǎn)品,100% 兼容 PostgreSQL,高度兼容Oracle語法;采用基于 Shared-Storage 的存儲計算分離架構(gòu),具有極致彈性、毫秒級延遲、HTAP 、Ganos全空間數(shù)據(jù)處理能力和高可靠、高可用、彈性擴展等企業(yè)級數(shù)據(jù)庫特性。同時,PolarDB PostgreSQL 版具有大規(guī)模并行計算能力,可以應(yīng)對 OLTP 與 OLAP 混合負載。
功能介紹
Foreign Data Wrapper(FDW)是 PostgreSQL 提供的一個非常有意思的特性,中文翻譯為 外部數(shù)據(jù)包裝器。從字面意思上,PostgreSQL 數(shù)據(jù)庫能夠通過 FDW 擴展來操作當前數(shù)據(jù)庫以外的數(shù)據(jù)。這些外部的數(shù)據(jù)源可以是:
文件
關(guān)系型數(shù)據(jù)庫(PostgreSQL / Oracle / MySQL / ...)
非關(guān)系型數(shù)據(jù)庫
Git 倉庫
網(wǎng)頁
大數(shù)據(jù)平臺(Hadoop / Hive / ...)
...
oss_fdw 插件是 PolarDB for PostgreSQL 的一個外部數(shù)據(jù)包裝器,能夠?qū)?阿里云對象存儲 OSS (Object Storage Service) 上的數(shù)據(jù)與數(shù)據(jù)庫中的外部表定義關(guān)聯(lián),使用戶能夠?qū)?shù)據(jù)庫表的數(shù)據(jù)存放到 OSS 上的同時,而依舊能夠通過標準 SQL 來讀寫這些數(shù)據(jù)。阿里云 OSS 是一款海量、安全、低成本、高可靠的云存儲服務(wù),提供最高可達 99.995% 的服務(wù)可用性,具備多種存儲類型供選擇,能夠全面優(yōu)化存儲成本。數(shù)據(jù)庫中的歷史數(shù)據(jù)、只讀歸檔數(shù)據(jù)、冷數(shù)據(jù)非常適合存放到 OSS 上,以節(jié)約數(shù)據(jù)庫存儲成本。
基本使用方法
開通阿里云 OSS 并創(chuàng)建 Bucket
請參考阿里云 OSS 的 產(chǎn)品文檔。
安裝插件
CREATE EXTENSION oss_fdw;
創(chuàng)建外部數(shù)據(jù)服務(wù)器
配置 OSS 連接信息,創(chuàng)建 PolarDB-PG 到 OSS Bucket 的映射。其中需要的參數(shù)包含:
host:阿里云 OSS 的訪問域名 (EndPoint)
bucket:阿里云 OSS 的存儲空間 (Bucket) 名稱
id / key:阿里云賬號 Access Key 的 ID 和 Secret
CREATE SERVER ossserver
FOREIGN DATA WRAPPER oss_fdw
OPTIONS (
host 'oss-cn-xxx.aliyuncs.com',
bucket 'mybucket',
id 'xxx',
key 'xxx'
);
將外部表映射到某個 OSS 目錄
在 PolarDB-PG 中創(chuàng)建一個 OSS 外部表,映射到上一步配置的 OSS 外部數(shù)據(jù)源的某個目錄下:
CREATE FOREIGN TABLE t1_oss (
id INT,
f FLOAT,
txt TEXT
)
SERVER ossserver
OPTIONS (dir 'archive/');
向 OSS 外部表中導入數(shù)據(jù):
=> INSERT INTO t1_oss VALUES (generate_series(1,100), 0.1, 'hello');
NOTICE: begin writing data to oss location archive/, with block size 10 MB and oss file size 1024 MB
INSERT 0 100
此時,插入該表的數(shù)據(jù)已經(jīng)寫入到 OSS archive/ 路徑下的文件中。使用如下方法可以查詢該外部表:
=> EXPLAIN SELECTCOUNT(*) FROM t1_oss;
QUERY PLAN
-----------------------------------------------------------------
Aggregate (cost=6.54..6.54 rows=1 width=8)
-> Foreign Scan on t1_oss (cost=0.00..6.40 rows=54 width=0)
Directory on OSS: archive/
Number Of OSS file: 1
(4 rows)
=> SELECTCOUNT(*) FROM t1_oss;
NOTICE: a total of 1 files will be loaded, beginarchive/_t1_oss_741147075942690, endarchive/_t1_oss_741147075942690, compression: none
count
-------
100
(1row)
對該表進行 TRUNCATE,將會移除該外部表在 OSS 上的所有映射文件:
=> TRUNCATE t1_oss;
TRUNCATE TABLE
=> SELECT COUNT(*) FROM t1_oss;
WARNING: does not match any file in oss
count
-------
0
(1 row)
卸載插件
DROP EXTENSION oss_fdw;
使用限制
oss_fdw 外部表僅支持 SELECT、INSERT 和 TRUNCATE 操作,不支持 UPDATE 和 DELETE 操作。因此,只適用于 數(shù)據(jù)歸檔 場景:數(shù)據(jù)被寫入 OSS 后,只會被讀取,不再被更新。
PolarDB for PostgreSQL 11 全版本支持該插件;PolarDB for PostgreSQL 14 自 v14.5.3.0 (20221130) 起支持該插件。