本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 lo 模組管理大型物件
lo 模組 (擴充功能) 適用於透過 JDBC 或 ODBC 驅動程式使用 PostgreSQL 資料庫的資料庫使用者與開發人員。JDBC 和 ODBC 都期望當對它們的參照變更時,資料庫會處理大型物件的刪除。但是,PostgreSQL 不是這樣運作的。PostgreSQL 不會假設當某個物件其參照變更時應該予以刪除。結果是物件會保留在磁碟上,未被參照。lo 擴充功能包含一個功能,用於在參照變更時視需要觸發該功能以刪除物件。
提示
若要判定資料庫是否可以從 lo 擴充功能受益,請使用 vacuumlo 公用程式檢查是否有孤立大型物件。若要在不採取任何動作的情況下取得孤立大型物件的計數,請以 -n
選項執行該公用程式 (無操作)。若要了解如何操作,請參閱下文中的 vacuumlo utility。
lo 模組適用於 Aurora PostgreSQL 13.7、12.11、11.16、10.21 和更新的次要版本。
若要安裝此模組 (擴充功能),您需要 rds_superuser
權限。安裝 lo 擴充功能會將下列項目新增至資料庫:
lo
– 這是一個大型物件 (lo) 資料類型,可用於二進位大型物件 (BLOB) 和其他大型物件。lo
資料類型是oid
資料類型的領域。換言之,它是具有選用限制的物件識別碼。如需詳細資訊,請參閱 PostgreSQL 文件中的物件識別碼。簡言之,您可以使用 lo
資料類型,來區分保存大型物件參照的資料庫欄與其他物件識別碼 (OID)。-
lo_manage
– 這是一個函數,您可以在包含大型物件參照的資料表欄上的觸發程序中使用此函數。只要您刪除或修改參照大型物件的值時,觸發程序都會取消該物件 (lo_unlink
) 與其參照的連結。只有在資料欄是對該大型物件的唯一資料庫參照時,才對該資料欄使用觸發程序。
如需大型物件模組的詳細資訊,請參閱 PostgreSQL 文件中的 lo
安裝 lo 擴充功能
安裝 lo 擴充功能之前,請確定您已具備 rds_superuser
權限。
安裝擴充功能
使用
psql
連線到 Aurora PostgreSQL 資料庫叢集的主要資料庫執行個體。psql --host=
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --password出現提示時,輸入您的密碼。
psql
用戶端連接並顯示預設管理連接資料庫postgres=>
作為提示。安裝擴充功能,如下所示。
postgres=>
CREATE EXTENSION lo;
CREATE EXTENSION
您現在可以使用 lo
資料類型來定義資料表中的資料欄。例如,您可以建立一個資料表 (images
),其中包含點陣影像資料。您可以將 lo
資料類型用於資料欄 raster
,如下列建立資料表的範例所示。
postgres=>
CREATE TABLE images (image_name text, raster lo);
使用 lo_Manage 觸發程序函數刪除物件
您可以將 lo_manage
函數用於當更新或刪除 lo
時所要清理 lo
或其他大型物件欄中的觸發程序。
在參照大型物件的資料欄上設定觸發程序
執行下列任意一項:
-
使用引數的資料欄名稱,在每個資料欄上建立 BEFORE UPDATE OR DELETE 觸發程序,以包含對大型物件的唯一參照。
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OR DELETE ON images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster); -
僅正在更新資料欄時套用觸發程序。
postgres=>
CREATE TRIGGER t_raster BEFORE UPDATE OF images FOR EACH ROW EXECUTE FUNCTION lo_manage(raster);
-
lo_manage
觸發程序函數只有在插入或刪除資料欄資料 (視您定義觸發程序的方式而定) 的背景下才會運作。當您執行 DROP
或 TRUNCATE
操作時則不會起作用。這意味著您應先將任何資料表中的物件資料欄刪除,再捨棄資料表,以免產生孤立物件。
例如,假設您想要捨棄包含 images
資料表的資料庫。您如下所示刪除資料欄。
postgres=>
DELETE FROM images COLUMN raster
假設在該資料欄上定義 lo_manage
函數來處理刪除,現在您可以放心地捨棄該資料表。
使用 vacuumlo 公用程式
vacuumlo 公用程式會識別孤立大型物件並從資料庫中刪除。此公用程式自 PostgreSQL 9.1.24 起可供使用。如果您的資料庫使用者會例行性地使用大型物件,建議您偶爾執行 vacuumlo 以清理孤立大型物件。
在安裝 lo 擴充功能之前,您可以使用 vacuumlo 來評估您的 Aurora PostgreSQL 資料庫叢集是否會受益。若要這麼做,請將 vacuumlo
搭配 -n
選項 (無操作) 使用,以顯示要刪除的內容,如下所示:
$
vacuumlo -v -n -h
your-cluster-instance-1.666666666666
.aws-region
.rds.amazonaws.com -p 5433 -U postgresdocs-lab-spatial-db
Password:
*****
Connected to database "docs-lab-spatial-db" Test run: no large objects will be removed! Would remove 0 large objects from database "docs-lab-spatial-db".
如輸出結果所示,孤立大型對象不是此特定資料庫的問題。
如需此公用程式的詳細資訊,請參閱 PostgreSQL 文件中的 vacuumlo