為 創建TLE擴展 SQL - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 創建TLE擴展 SQL

您可以在任何 執行個體) 中安裝使用建立的任何pg_tle擴充功能。pg_tle擴充功能的範圍是在其中安裝它的 Postgre SQL 資料庫。您使用TLE建立的擴充功能範圍設定在相同的資料庫中。

使用各種pgtle功能來安裝構成TLE擴充功能的程式碼。下列受信任語言延伸模組函數全都需要 pgtle_admin 角色。

範例:使用建立信任的語言延伸模組 SQL

以下範例顯示如何建立名為的副檔名,pg_distance該TLE副檔名包含一些使用不同公式計算距離的SQL函數。在清單中,您可以找到用於計算曼哈頓距離的函數,以及計算歐幾里得距離的函數。如需這些公式之間差異的詳細資訊,請參閱 Wikipedia 中的出租車幾何歐幾里得幾何

如果您已按照中的詳細說明設定pg_tle擴充功能,則可以在 RDS中使用此範例。在您的 行個體設定受信任語言擴充 SQL

注意

您必須具有 pgtle_admin 角色的權限才能遵循此程序。

若要建立範例TLE擴充功能

下列步驟會使用名為 labdb 的範例資料庫。此資料庫是由 postgres 主要使用者所擁有。postgres 角色也具有 pgtle_admin 角色的權限。

  1. 用於連線psql至您的 。RDS對於後置SQL數據庫實例。

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. pg_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 命令建立延伸模組。換句話說,您仍然需要建立延伸模組,以使其函數可供資料庫使用者使用。

  3. 若要建立延伸模組,請使用 CREATE EXTENSION 命令,如您對任何其他延伸模組所做一樣。與其他延伸模組一樣,資料庫使用者需要在資料庫中具有 CREATE 權限。

    CREATE EXTENSION pg_distance;
  4. 要測試pg_distanceTLE擴展,您可以使用它來計算四個點之間的曼哈頓距離

    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 屬性新增至其規格中。

  • IMMUTABLEIMMUTABLE 屬性確保查詢最佳化工具可以使用最佳化來改善查詢回應時間。有關更多信息,請參閱 Postgre SQL 文檔中的功能波動性類別

  • PARALLEL SAFEPARALLEL SAFE 屬性是允許 Postgre SQL 以 parallel 模式執行函數的另一個屬性。如需詳細資訊,請參閱 Postgre SQL 文件CREATEFUNCTION中的。

在下列範例中,您可以看到如何使用pgtle.install_update_path函式將這些屬性新增至每個函數,以建立pg_distanceTLE擴充功能0.2的版本。如需此函數狀態的詳細資訊,請參閱 pgtle.install_update_path。您必須具有 pgtle_admin 角色才能執行此任務。

若要更新現有的TLE擴充功能並指定預設版本
  1. 使用psql或其他入器執行個體。pgAdmin

    psql --host=db-instance-123456789012.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. 複製下列程式碼並將其貼到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)

    您可以將此版本的延伸模組設為預設版本,這樣資料庫使用者就不必在資料庫中建立或更新延伸模組時指定版本。

  3. 若要指定TLE延伸功能的修改版本 (版本 0.2) 為預設版本,請使用下列範例所示的pgtle.set_default_version函數。

    SELECT pgtle.set_default_version('pg_distance', '0.2');

    如需此函數狀態的詳細資訊,請參閱 pgtle.set_default_version

  4. 使用代碼,您可以通過使用ALTER EXTENSION ... UPDATE命令以通常的方式更新已安裝的TLE擴展程序,如下所示:

    ALTER EXTENSION pg_distance UPDATE;