管理PostgreSQL擴展

在PostgreSQL,擴充功能是提供額外函數、運算子或類型的模組。 IBM Cloud® Databases for PostgreSQL中提供許多延伸。 若要使用這些功能,請先為您的服務設定 設定管理員密碼,然後設定 請使用 psql 進行連線。

列出已安裝的擴充

使用 \dx 指令,取得資料庫上已安裝的所有延伸的清單。

例如,在 Databases for PostgreSQL 預設資料庫上執行時,\dx 的輸出會顯示唯一已安裝的延伸。

ibmclouddb=> \dx
                 List of installed extensions
  Name   | Version |   Schema   |         Description
---------+---------+------------+------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
(1 row)

安裝延伸

若要在資料庫上安裝延伸,請使用 CREATE EXTENSION。 例如,要在 ibmclouddb 資料庫上安裝 pg_stat_statements,請使用下列指令:

ibmclouddb=> CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION

延伸會安裝至唯讀 ibm_extension 綱目。 綱目是 search_path 的一部分,因此延伸物件不需要以綱目來限定。 必須從 public 綱目變更為 ibm_extension 綱目,才能保護資料的安全和完整性。

如果您在安裝延伸之後執行 \dx 指令,它會出現在表格中。

ibmclouddb=> \dx
                                             List of installed extensions
        Name        | Version |    Schema     |                              Description
--------------------+---------+---------------+------------------------------------------------------------------------
 pg_stat_statements | 1.10    | ibm_extension | track planning and execution statistics of all SQL statements executed
 plpgsql            | 1.0     | pg_catalog    | PL/pgSQL procedural language
(2 rows)

PostgreSQL 中的資料庫延伸是根據資料庫來管理。 如果您有多個資料庫需要安裝延伸,請在每一個資料庫上執行 CREATE 指令。

升級擴充

若要列出當前資料庫中已有更新版本的擴充套件,請執行以下查詢:

SELECT e.extname, e.extversion AS installed_version, a.default_version AS available_version
FROM pg_catalog.pg_extension AS e
JOIN pg_catalog.pg_available_extensions AS a ON a.name = e.extname
WHERE e.extversion <> a.default_version;

若要更新擴充套件,請在安裝了該擴充套件的每個資料庫中執行以下指令 ALTER EXTENSION:

ALTER EXTENSION <extension_name> UPDATE;

以下副檔名需遵循不同的處理程序:

  • 若要升級「pg_repack」擴充套件,請在每個使用該擴充套件的資料庫中,依序執行 DROP EXTENSION pg_repack; 以及 CREATE EXTENSION pg_repack;。
  • PostgreSQL 匿名化工具 (anon) 不支援 ALTER EXTENSION ... UPDATE。 若要進行升級,請參閱《 升級 PostgreSQL 匿名化工具 》。
  • 將 3.x 版本更新後 pgRouting,將升級至 4.0 版本,此版本已移除若干功能。 更新前,請參閱 pgRouting。

特定於擴展的註釋

pg_repack

  • pg_repack 文件

  • 當您運行 pg_repack 命令時,傳遞-k標誌以繞過對超級用戶的檢查。 請參閱下列範例:

    pg_repack -k [OPTION]... [DBNAME]
    
  • 任何使用者都可以執行 pg_repack,但指令只能重新包裝他們具有許可權的表格。

  • pg_repack 需要對重組結束時正在重組的物件採取專用鎖定。 如果在特定期間之後無法取得此鎖定,則會取消所有衝突的查詢。 如果它無法這樣做,則 reorg 會失敗。 預設情況下,只有管理員使用者能夠取消衝突的查詢。 若要讓其他資料庫使用者能夠取消查詢,請由管理員使用者 授予他們「pg_signal_backend」角色。

pgaudit

  • 該服務會在啟動時載入 pgaudit 函式庫。 您無法建立「pgaudit」擴充功能,因此稽核日誌中的 DDL 記錄不會包含該物件的類型與名稱。 若要啟用 pgaudit 日誌,請參閱《 使用 pgaudit 進行日誌記錄 》。

pgvector

  • 若要新增 pgvector 延伸至您的部署,請使用 create extension vector 指令。
  • 重要:pgvector 需要 PostgreSQL 15 或更高版本。

可用的擴展

請參閱下列所有可用擴充套件的清單。 如需部署上可用延伸的清單,請使用 psql 中的 SELECT name FROM pg_available_extensions;。

ibmclouddb=> SELECT name FROM pg_available_extensions order by 1;
             name
------------------------------
 address_standardizer
 address_standardizer_data_us
 amcheck
 autoinc
 bloom
 btree_gin
 btree_gist
 citext
 cube
 dblink
 dict_int
 dict_xsyn
 earthdistance
 file_fdw
 fuzzystrmatch
 hstore
 insert_username
 intagg
 intarray
 isn
 lo
 ltree
 moddatetime
 old_snapshot
 pageinspect
 pg_buffercache
 pg_freespacemap
 pg_prewarm
 pg_repack
 pg_stat_statements
 pg_surgery
 pg_trgm
 pg_visibility
 pg_walinspect
 pgaudit
 pgcrypto
 pgrouting
 pgrowlocks
 pgstattuple
 plpgsql
 postgis
 postgis_raster
 postgis_tiger_geocoder
 postgis_topology
 postgres_fdw
 refint
 seg
 sslinfo
 tablefunc
 tcn
 tsm_system_rows
 tsm_system_time
 unaccent
 uuid-ossp
 xml2
(55 rows)
ibmclouddb=> select version();
                                                 version
----------------------------------------------------------------------------------------------------------
 PostgreSQL 16.6 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-2), 64-bit
(1 row)