PostgreSQL-Erweiterungsfunktionen
- pg_clear_cache
- postgres_attach
- postgres_configure_pool
- postgres_execute
- postgres_hstore_get
- postgres_hstore_to_json
- postgres_query
- postgres_scan
- postgres_scan_pushdown
- read_postgres_binary
pg_clear_cache
pg_clear_cache() -> TABLELöscht gecachte Schema-Einträge (wie Tabellennamen mit Spaltenlisten) für alle angehängten PostgreSQL-Kataloge. Das angehängte Schema wird beim nächsten Zugriff erneut gelesen.
Parameter
Keine.
Rückgabe
Eine Tabelle mit den folgenden Spalten:
Success(BOOLEAN): ein Flag, ob das Leeren des Caches erfolgreich war
Derzeit wird das Tabellenergebnis immer mit null Zeilen zurückgegeben, sodass der Flag-Wert nicht verfügbar ist.
Beispiel
CALL pg_clear_cache()postgres_attach
Warning Diese Funktion ist veraltet und soll in zukünftigen Versionen entfernt werden. Stattdessen soll die Anweisung
ATTACHverwendet werden.
postgres_attach(connection_string VARCHAR [, ⟨optional named parameters⟩]) -> TABLEpostgres_configure_pool
FROM postgres_configure_pool([⟨optional named parameters⟩]) -> TABLEWenn eine PostgreSQL-Datenbank angehängt wird, wird für diese Datenbank ein Verbindungspool erstellt. Diese Funktion erlaubt es, die Konfigurationsoptionen eines Verbindungspools für die angegebene angehängte Datenbank zu ändern. Sie erlaubt außerdem, die aktuell wirksamen Konfigurationsoptionen und die gesammelten Laufzeitstatistiken eines Verbindungspools aufzulisten.
Parameter
catalog_name(VARCHAR): der Name (Alias) der angehängten Postgres-Datenbank, auf deren Pool die Konfigurationsänderung angewendet wird und deren Details zurückgegeben werden. BeiNULL(Standard) wird der aktuelle Zustand der Pools für alle angehängten Kataloge zurückgegeben, ohne deren Konfiguration zu ändern. Muss angegeben und nicht-NULL sein, wenn eine andere Option angegeben wird.acquire_mode(VARCHAR, Standard:'force'): wie Verbindungen aus dem Pool geholt werden:'force'(immer verbinden, Pool-Limit ignorieren),'wait'(blockieren, bis verfügbar),'try'(sofort fehlschlagen, wenn nicht verfügbar)max_connections(UBIGINT): maximale Anzahl von Verbindungen, die in einem Verbindungspool für jede angehängte Postgres-Datenbank gecacht werden dürfen. Diese Zahl kann bei parallelen Scans vorübergehend überschritten werden.wait_timeout_millis(UBIGINT): maximale Anzahl von Millisekunden, die gewartet werden soll, wenn eine Verbindung aus einem Pool geholt wird, in dem alle verfügbaren Verbindungen bereits belegt sind.enable_thread_local_cache(BOOLEAN): ob das Cachen von Verbindungen im thread-lokalen Cache aktiviert werden soll. Solche Verbindungen werden an die Threads gebunden und anderen Threads nicht zur Verfügung gestellt, belegen aber weiterhin einen Platz im Pool.max_lifetime_millis(UBIGINT): maximale Anzahl von Millisekunden, die die Verbindung offen gehalten werden kann. Diese Zahl wird geprüft, wenn die Verbindung aus dem Pool genommen und in den Pool zurückgegeben wird. Wenn der Connection-Pool-Reaper-Thread aktiviert ist (Argument'enable_reaper_thread'), wird diese Zahl regelmäßig im Hintergrund geprüft.idle_timeout_millis(UBIGINT): maximale Anzahl von Millisekunden, die die Verbindung im Pool idle gehalten werden kann. Diese Zahl wird geprüft, wenn die Verbindung aus dem Pool genommen wird. Wenn der Connection-Pool-Reaper-Thread aktiviert ist (Option'enable_reaper_thread'), wird diese Zahl regelmäßig im Hintergrund geprüft.enable_reaper_thread(BOOLEAN): ob der Connection-Pool-Reaper-Thread aktiviert werden soll, der den Pool regelmäßig prüft, um'max_lifetime_millis'und'idle_timeout_millis'zu kontrollieren und Verbindungen zu schließen, die die angegebenen Werte überschreiten. Entweder'max_lifetime_millis'oder'idle_timeout_millis'muss auf einen Wert ungleich null gesetzt sein, damit diese Option wirksam ist.health_check_query(VARCHAR): die Abfrage, mit der geprüft wird, ob die Verbindung gesund ist. Das Setzen dieser Option auf einen leeren String deaktiviert die Gesundheitsprüfung.
Rückgabe
Eine Tabelle mit den folgenden Spalten:
catalog_name(VARCHAR): der Name (Alias) der angehängten Postgres-Datenbankacquire_mode(VARCHAR): wie Verbindungen aus dem Pool geholt werden:'force'(immer verbinden, Pool-Limit ignorieren),'wait'(blockieren, bis verfügbar),'try'(sofort fehlschlagen, wenn nicht verfügbar)available_connections(UBIGINT): die Anzahl idle Verbindungen, die derzeit im Pool verfügbar sindmax_connections(UBIGINT): maximale Anzahl von Verbindungen, die im Pool gecacht werden dürfen.wait_timeout_millis(UBIGINT): maximale Anzahl von Millisekunden, die gewartet werden soll, wenn eine Verbindung aus einem Pool geholt wird, in dem alle verfügbaren Verbindungen bereits belegt sind; gilt nur für den Acquire-Moduswaitcache_hits(UBIGINT): Anzahl der Male, die eine gecachte Verbindung erfolgreich aus dem Pool zurückgegeben wurdecache_misses(UBIGINT): Anzahl der Male, die eine neue Verbindung vom Pool erstellt wurdetry_failures(UBIGINT): Anzahl der Male, die eine Verbindung vom Pool im Acquire-Modustryangefordert wurde und zu diesem Zeitpunkt keine Verbindung verfügbar war – sodass der Pool keine Verbindung bereitgestellt hat; beachten Sie, dass Worker-Threads bei parallelen Scans durch die Postgres-Erweiterung immer den Acquire-Modustryverwenden; wennSET threads = ⟨number_higher_then_pool_size⟩{:.language-sql .highlight} verwendet wird, können einige Worker-Threads keine Verbindung erhalten – sie kehren zurück, ohne Arbeit zu leisten und ohne einen Fehler zu werfenthread_local_cache_enabled(BOOLEAN): ob das Cachen der Verbindungen im thread-lokalen Cache aktiviert ist; thread-lokale Verbindungen werden vom Reaper-Thread NICHT geleertthread_local_cache_hits(UBIGINT): die Anzahl der Male, die Verbindungen erfolgreich aus einem thread-lokalen Cache geholt wurden, ohne den Hauptpool zu verwendenthread_local_cache_misses(UBIGINT): die Anzahl der Male, die Verbindungen im thread-lokalen Cache nicht verfügbar waren und stattdessen aus dem Hauptpool genommen wurdenmax_lifetime_millis(UBIGINT): maximale Anzahl von Millisekunden, die eine Verbindung offen gehalten werden kannidle_timeout_millis(UBIGINT): maximale Anzahl von Millisekunden, die eine Verbindung im Pool idle gehalten werden kannreaper_thread_running(BOOLEAN): ob der Pool-Reaper-Thread läuft; dieser Thread prüft den Pool regelmäßig auf'max_lifetime_millis'und'idle_timeout_millis'und schließt Verbindungen, die die angegebenen Werte überschreitenreaper_thread_period_millis(UBIGINT): der Zeitraum, in dem ein Reaper-Thread die Prüfungen durchführthealth_check_query(VARCHAR): die Abfrage, mit der geprüft wird, ob die Verbindung gesund ist
Beispiele
Die aktuell wirksamen Konfigurationsoptionen und die gesammelten Laufzeitstatistiken aller Verbindungspools (für alle angehängten Datenbanken) auflisten:
FROM postgres_configure_pool()Eine oder mehrere Konfigurationsoptionen für den Verbindungspool der angegebenen angehängten Datenbank ändern:
FROM postgres_configure_pool(catalog_name = 'db1', acquire_mode = 'wait', max_connections = 42)postgres_execute
postgres_execute(attached_db_name VARCHAR, sql_query VARCHAR[, ⟨optional named parameters⟩]) -> TABLEFührt die ⟨sql_query⟩{:.language-sql .highlight} in der angegebenen entfernten Postgres-Instanz aus, die zuvor mit ATTACH ... AS ⟨attached_db_name⟩{:.language-sql .highlight} angehängt wurde.
Diese Funktion gibt ein leeres Ergebnis zurück.
Parameter
attached_db_name(VARCHAR): der Name der angehängten PostgreSQL-Datenbanksql_query(VARCHAR): Abfrage, die zur Ausführung an PostgreSQL übergeben wird; DuckDB führt keine Transformation oder Analyse dieser Abfrage durch
Optionale benannte Parameter:
use_transaction(BOOLEAN, Standard:TRUE): ob eine PostgreSQL-Transaktion gestartet werden soll, falls sie zuvor nicht gestartet wurde.
Rückgabe
Eine Tabelle mit den folgenden Spalten:
Success(BOOLEAN): ein Flag, ob das Leeren des Caches erfolgreich war
Derzeit wird das Tabellenergebnis immer mit null Zeilen zurückgegeben, sodass der Flag-Wert nicht verfügbar ist.
Beispiel
CALL postgres_execute('db1', 'VACUUM ANALYZE', use_transaction = false)postgres_hstore_get
postgres_hstore_get(hstore_string VARCHAR, hstore_key VARCHAR) -> VARCHARParst die externe Darstellung einer PostgreSQL-hstore-Spalte und gibt den Wert des angegebenen hstore-Schlüssels zurück.
Parameter
hstore_string(VARCHAR): PostgreSQL-hstore-Wert in der Formkey => value.hstore_kay(VARCHAR): Schlüsselname, für den der Wert zurückgegeben werden soll.
Rückgabe
Der Wert für den angegebenen Schlüssel. NULL, wenn der Schlüssel nicht gefunden wird.
Beispiel
SELECT postgres_hstore_get('a=>b, c=>d', 'a')postgres_hstore_to_json
postgres_hstore_to_json(hstore_string VARCHAR) -> JSONKonvertiert die externe Darstellung einer PostgreSQL-hstore-Spalte in JSON.
Parameter
hstore_string(VARCHAR): PostgreSQL-hstore-Wert in der Formkey => value.
Rückgabe
JSON-Dictionary mit denselben Schlüssel/Wert-Paaren wie der Eingabe-hstore-String. Alle Werte werden als Strings zurückgegeben.
Beispiel
SELECT postgres_hstore_to_json('z=>1, a=>2, m=>3')postgres_query
postgres_query(attached_db_name VARCHAR, sql_query VARCHAR[, ⟨optional named parameters⟩]) -> TABLEFührt die Abfrage in der angegebenen entfernten DB aus, die zuvor mit ATTACH .. AS ⟨attached_db_name⟩{:.language-sql .highlight} angehängt wurde, und gibt das Abfrageergebnis als Tabelle zurück.
Parameter
attached_db_name(VARCHAR): der Name der angehängten PostgreSQL-Datenbanksql_query(VARCHAR): Abfrage, die zur Ausführung an PostgreSQL übergeben wird; DuckDB führt keine Transformation oder Analyse dieser Abfrage durch
Optionale benannte Parameter:
use_transaction(BOOLEAN, Standard:TRUE): ob eine PostgreSQL-Transaktion gestartet werden soll, falls sie zuvor nicht gestartet wurde.params(STRUCT): Abfrageparameter, die an den PostgreSQL-Server übergeben werden; nur unterstützt, wenn das Textprotokoll verwendet wird
Rückgabe
Eine Tabelle mit dem Abfrageergebnis.
Beispiel
FROM postgres_query('db11', 'SELECT $1::INTEGER, $2::TEXT', params=row(42::INTEGER, 'foo'::VARCHAR))postgres_scan
Warning Diese Funktion ist veraltet und soll in zukünftigen Versionen entfernt werden. Stattdessen sollen direkte SQL-Abfragen über die angehängte PostgreSQL-Datenbank verwendet werden.
postgres_scan(connection_string VARCHAR, schema_name VARCHAR, table_name VARCHAR) -> TABLEpostgres_scan_pushdown
Warning Diese Funktion ist veraltet und soll in zukünftigen Versionen entfernt werden. Stattdessen sollen direkte SQL-Abfragen über die angehängte PostgreSQL-Datenbank verwendet werden.
postgres_scan_pushdown(connection_string VARCHAR, schema_name VARCHAR, table_name VARCHAR) -> TABLEread_postgres_binary
FROM read_postgres_binary(file_path VARCHAR[, ⟨optional named parameters⟩]) -> TABLELiest binäre PostgreSQL-Dump-Dateien vom Dateisystem.
Parameter
file_path(VARCHAR): Dateisystempfad zur binären Dump-Datei im PostgreSQL-Format.
Optionale benannte Parameter:
columns(STRUCT): Typzuordnung in Form der Strukturcolumn_name -> column_type.buffer_size(UBIGINT, Standard: 32KB): Größe des Lesepuffers in Bytes.
Rückgabe
Inhalt der binären Dump-Datei als Tabelle.
Beispiel
COPY (SELECT 42::INTEGER AS a, 'foo'::VARCHAR AS b) TO 'path/to/test.bin' (FORMAT postgres_binary);
FROM read_postgres_binary('path/to/test.bin', columns = {a: 'INTEGER', b: 'VARCHAR'});