PostgreSQL-Erweiterungen verwalten

In PostgreSQL sind Erweiterungen Module, die zusätzliche Funktionen, Operatoren oder Typen bereitstellen. Viele Erweiterungen sind in IBM Cloud® Databases for PostgreSQL verfügbar. Um sie zu nutzen, wählen Sie Das Administratorpasswort festlegen für Ihren Dienst und dann Verwenden Sie psql zur Verbindung.

Installierte Erweiterungen auflisten

Sie können mit dem Befehl \dx eine Liste aller Erweiterungen abrufen, die in einer Datenbank installiert sind.

Zum Beispiel zeigt die Ausgabe für \dx bei Ausführung für die Databases for PostgreSQL-Standarddatenbank die einzige installierte Erweiterung an.

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

Erweiterungen installieren

Um eine Erweiterung in einer Datenbank zu installieren, verwenden Sie CREATE EXTENSION. Um beispielsweise auf pg_stat_statements der Datenbank ibmclouddb zu installieren, verwenden Sie den folgenden Befehl:

ibmclouddb=> CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION

Erweiterungen werden im schreibgeschützten ibm_extension-Schema installiert. Das Schema ist Teil von search_path, sodass Erweiterungsobjekte nicht mit einem Schema qualifiziert werden müssen. Die Änderung des Schemas public in das Schema ibm_extension ist erforderlich, um die Sicherheit und Integrität Ihrer Daten zu schützen.

Wenn Sie den Befehl \dx nach der Installation einer Erweiterung ausführen, wird er in der Tabelle angezeigt.

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)

Datenbankerweiterungen in PostgreSQL werden pro Datenbank verwaltet. Wenn Sie mehrere Datenbanken haben, auf denen Sie eine Erweiterung installieren müssen, führen Sie den Befehl CREATE auf jeder Datenbank aus.

Erweiterungen aktualisieren

Um die Erweiterungen in der aktuellen Datenbank aufzulisten, für die eine neuere Version verfügbar ist, führen Sie die folgende Abfrage aus:

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;

Um eine Erweiterung zu aktualisieren, führen Sie den Befehl ALTER EXTENSION in jeder Datenbank aus, in der die Erweiterung installiert ist:

ALTER EXTENSION <extension_name> UPDATE;

Für die folgenden Erweiterungen ist ein anderes Vorgehen erforderlich:

  • Um die Erweiterung pg_repack zu aktualisieren, führen Sie aus und DROP EXTENSION pg_repack; anschließend CREATE EXTENSION pg_repack; in jeder Datenbank, die diese Erweiterung verwendet.
  • Der PostgreSQL-Anonymisierer (anon) wird nicht unterstützt ALTER EXTENSION ... UPDATE. Informationen zum Upgrade finden Sie unter Upgrade des PostgreSQL-Anonymisierers.
  • Durch ein Update von 3.xpgRouting wird auf Version 4.0 umgestellt, wodurch mehrere Funktionen entfernt werden. Bevor Sie das Update durchführen, lesen Sie bitte pgRouting.

Erweiterungsspezifische Hinweise

pg_repack

  • pg_repack-Dokumentation

  • Wenn Sie den Befehl pg_repack ausführen, übergeben Sie das Flag -k, um die Überprüfung der Superuser-Berechtigung zu umgehen. Sehen Sie sich das folgende Beispiel an:

    pg_repack -k [OPTION]... [DBNAME]
    
  • Jeder Benutzer kann pg_repack ausführen, aber mit dem Befehl kann er nur eine Tabelle austauschen, für die er die Berechtigungen hat.

  • pg_repack muss eine exklusive Sperre für Objekte nehmen, die am Ende der Reorganisation reorganisiert werden. Wenn es diese Sperre nach einem bestimmten Zeitraum nicht abrufen kann, bricht es alle im Konflikt stehenden Abfragen ab. Wenn dieser Fall eintritt, schlägt die Reorganisation fehl. Standardmäßig kann nur der Admin-Benutzer konfliktbehaftete Abfragen abbrechen. Damit andere Datenbankbenutzer Abfragen abbrechen können, weisen Sie ihnen die Rolle pg_signal_backend vom Admin-Benutzer zu.

pgaudit

  • Der Dienst lädt die Bibliothek pgaudit beim Start. Sie können die Erweiterung pgaudit nicht erstellen, daher enthalten die DDL-Einträge in den Audit-Protokollen weder den Objekttyp noch den Namen. Informationen zum Aktivieren von pgaudit Protokollen finden Sie unter Protokollierung mit pgaudit …

pgvector

  • Um die Erweiterung pgvector zu Ihrer Bereitstellung hinzuzufügen, verwenden Sie den Befehl create extension vector.
  • Wichtig: pgvector erfordert PostgreSQL Version 15 oder höher.

Verfügbare Erweiterungen

Sehen Sie sich die folgende Liste aller verfügbaren Erweiterungen an. Um eine Liste der verfügbaren Erweiterungen für Ihre Bereitstellung zu erhalten, verwenden Sie SELECT name FROM pg_available_extensions; in psql.

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)