本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以在任何 Aurora Postgre SQL 資料庫叢集 (RDS適用TLE於已安裝擴充功能的 Postgre 資料SQL庫) 中安裝使用建立的任何pg_tle
擴充功能。pg_tle
擴充功能的範圍是在其中安裝它的 Postgre SQL 資料庫。您使用TLE建立的擴充功能範圍設定在相同的資料庫中。
使用各種pgtle
功能來安裝構成TLE擴充功能的程式碼。下列受信任語言延伸模組函數全都需要 pgtle_admin
角色。
範例:使用建立信任的語言延伸模組 SQL
以下範例顯示如何建立名為的副檔名,pg_distance
該TLE副檔名包含一些使用不同公式計算距離的SQL函數。在清單中,您可以找到用於計算曼哈頓距離的函數,以及計算歐幾里得距離的函數。如需這些公式之間差異的詳細資訊,請參閱 Wikipedia 中的出租車幾何
如果您已按照中的詳細說明設定pg_tle
擴充功能,則可以在 Po 個體的 Aurora Postgre 資料庫叢集RDS中使用此範例。在您的 Aurora Postgre SQL 資料庫叢集中 Postgre 資料庫執行個體設定受信任語言擴充 SQL
注意
您必須具有 pgtle_admin
角色的權限才能遵循此程序。
若要建立範例TLE擴充功能
下列步驟會使用名為 labdb
的範例資料庫。此資料庫是由 postgres
主要使用者所擁有。postgres
角色也具有 pgtle_admin
角色的權限。
用於連線
psql
至您的 Aurora Postgre SQL 資料庫叢集的寫入器執行個體。psql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdbpg_distance
透過複製下列程式碼並將其貼到psql
工作階段主控台來建立名為的TLE擴充功能。SELECT pgtle.install_extension ( 'pg_distance', '0.1', 'Distance functions for two points', $_pg_tle_$ CREATE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL; CREATE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL; CREATE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL; $_pg_tle_$ );
您會看到如下輸出。
install_extension --------------- t (1 row)
構成
pg_distance
延伸模組的成品現在已安裝在您的資料庫中。這些成品包括延伸模組的控制檔和程式碼,這些是必須存在的項目,如此才能使用CREATE EXTENSION
命令建立延伸模組。換句話說,您仍然需要建立延伸模組,以使其函數可供資料庫使用者使用。若要建立延伸模組,請使用
CREATE EXTENSION
命令,如您對任何其他延伸模組所做一樣。與其他延伸模組一樣,資料庫使用者需要在資料庫中具有CREATE
權限。CREATE EXTENSION pg_distance;
要測試
pg_distance
TLE擴展,您可以使用它來計算四個點之間的曼哈頓距離。 labdb=>
SELECT manhattan_dist(1, 1, 5, 5);
8
若要計算同一組點之間的歐幾里得距離
,您可以使用下列命令。 labdb=>
SELECT euclidean_dist(1, 1, 5, 5);
5.656854249492381
pg_distance
延伸模組會在資料庫中載入函數,並使其可供具有資料庫權限的任何使用者使用。
修改TLE擴充功能
若要改善此TLE延伸模組中封裝之函數的查詢效能,請將下列兩個 Postgre SQL 屬性新增至其規格中。
IMMUTABLE
–IMMUTABLE
屬性確保查詢最佳化工具可以使用最佳化來改善查詢回應時間。有關更多信息,請參閱 Postgre SQL 文檔中的功能波動性類別。 PARALLEL SAFE
—PARALLEL SAFE
屬性是允許 Postgre SQL 以 parallel 模式執行函數的另一個屬性。如需詳細資訊,請參閱 Postgre SQL 文件CREATEFUNCTION中的。
在下列範例中,您可以看到如何使用pgtle.install_update_path
函式將這些屬性新增至每個函數,以建立pg_distance
TLE擴充功能0.2
的版本。如需此函數狀態的詳細資訊,請參閱 pgtle.install_update_path。您必須具有 pgtle_admin
角色才能執行此任務。
若要更新現有的TLE擴充功能並指定預設版本
使用
psql
或其他用戶端工具 (例如) Connect 至 Postgre SQL 資料庫執RDS行個體的 Aurora Postgre SQL 資料庫叢集的寫個體。pgAdminpsql --host=
db-instance-123456789012
.aws-region
.rds.amazonaws.com --port=5432
--username=postgres
--password --dbname=labdb複製下列程式碼並將其貼到
psql
工作階段主控台,以修改現有的TLE擴充功能。SELECT pgtle.install_update_path ( 'pg_distance', '0.1', '0.2', $_pg_tle_$ CREATE OR REPLACE FUNCTION dist(x1 float8, y1 float8, x2 float8, y2 float8, norm int) RETURNS float8 AS $$ SELECT (abs(x2 - x1) ^ norm + abs(y2 - y1) ^ norm) ^ (1::float8 / norm); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION manhattan_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 1); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION euclidean_dist(x1 float8, y1 float8, x2 float8, y2 float8) RETURNS float8 AS $$ SELECT dist(x1, y1, x2, y2, 2); $$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; $_pg_tle_$ );
您會看到如下回應:
install_update_path --------------------- t (1 row)
您可以將此版本的延伸模組設為預設版本,這樣資料庫使用者就不必在資料庫中建立或更新延伸模組時指定版本。
若要指定TLE延伸功能的修改版本 (版本 0.2) 為預設版本,請使用下列範例所示的
pgtle.set_default_version
函數。SELECT pgtle.set_default_version('pg_distance', '0.2');
如需此函數狀態的詳細資訊,請參閱 pgtle.set_default_version。
使用代碼,您可以通過使用
ALTER EXTENSION ... UPDATE
命令以通常的方式更新已安裝的TLE擴展程序,如下所示:ALTER EXTENSION pg_distance UPDATE;