Frage Postgres Features

drdimitri

Datenbank-Guru
Beiträge
279
Hi,

ich hab einige Fragen zu speziellen PG Features:
- Ist es in der aktuellen Version noch so, dass das komplette Ergebnis im Speicher gecached wird, oder wird auf der Remote DB nachgelesen?
- Gibt es Restriktionen bzw. Probleme, wenn man über dblink bytea Daten überträgt?
- bytea ist beschrieben als binary string im Hexformat. D.h. die Datenmenge verdoppelt sich beim Import in die DB?
- ist bytea das, was man in Oracle als BLOB bezeichnet, also beliebige Binärdaten mit (fast) beliebiger Größe?
- Gibt es die Möglichkeit bei einem Ins/Upd einen fehlerhaften Satz wegzuloggen ohne das ganze Statement abbrechen zu lassen? Ich meine nicht ON DUPLICATE, sondern wenn z.B. eine RI Verletzung o.ä. auftritt.
- Gibt es neben pg_cron auch einen nativen Scheduler?
- Besteht die Möglichkeit Daten aus einer Tabelle zu entladen und dabei eine Bedingung mitzugeben, also quasi eine WHERE Klausel für pg_dump. Kann ich diesen Dump dann über einen foreign data wrapper wieder in ein SQL einbinden?

Dim
 
Werbung:
Hi,

ich hab einige Fragen zu speziellen PG Features:
- Ist es in der aktuellen Version noch so, dass das komplette Ergebnis im Speicher gecached wird, oder wird auf der Remote DB nachgelesen?
Du meinst bei einer Abfrage? Kommt drauf an, wie der Client das handelt. Das ist sein Problem, wie er das macht, nicht das der DB.

- Gibt es Restriktionen bzw. Probleme, wenn man über dblink bytea Daten überträgt?
Mir keine bekannt, ich hab allerdings mit dblink nicht vel Erfahrung

- bytea ist beschrieben als binary string im Hexformat. D.h. die Datenmenge verdoppelt sich beim Import in die DB?
Nein, BYTEA hat 2 verschiedene Ein/Ausgabeformate, HEX und Escape-Format. PostgreSQL: Documentation: 10: 8.4. Binary Data Types

- ist bytea das, was man in Oracle als BLOB bezeichnet, also beliebige Binärdaten mit (fast) beliebiger Größe?
Vermutlich, ich bin kein Oracle-Experte

- Gibt es die Möglichkeit bei einem Ins/Upd einen fehlerhaften Satz wegzuloggen ohne das ganze Statement abbrechen zu lassen? Ich meine nicht ON DUPLICATE, sondern wenn z.B. eine RI Verletzung o.ä. auftritt.
Alles-oder-Nichts. Du bekommst eine Fehlermeldung mit der Information über den ersten gefunden Fehler. Du kannst aber mit Savepoints arbeiten. PostgreSQL: Documentation: 10: SAVEPOINT

- Gibt es neben pg_cron auch einen nativen Scheduler?
Nicht in PG.

- Besteht die Möglichkeit Daten aus einer Tabelle zu entladen und dabei eine Bedingung mitzugeben, also quasi eine WHERE Klausel für pg_dump. Kann ich diesen Dump dann über einen foreign data wrapper wieder in ein SQL einbinden?

Du kannst JEDES Select als Basis für einen COPY-Befehl nehmen und damit die Daten nach außen blasen. Das kann dann wieder als Input für einen COPY-Befehl dienen, der die Daten einliest.
PostgreSQL: Documentation: 10: COPY enthält Beispiele.

Evtl. willst Du auch pg_logical verwenden, damit kannst Du eine logische Replikation zwischen 2 Datenbanken machen. Diese kannst Du auf einzelne Tabellen definieren und da auch Records filtern.
PostgreSQL: Announcing The Release Of pglogical 2.0

PG10 hat auch logical Replication, aber derzeit noch ohne Filter-Funktion.
 
Du meinst bei einer Abfrage? Kommt drauf an, wie der Client das handelt. Das ist sein Problem, wie er das macht, nicht das der DB.
In einem Forum hab ich folgendes gefunden:
dblink is a very thin wrapper for libpq. From the querying database,
the overhead is pretty light -- basically the query is fired and the
results are interpreted from text into whatever the database has in
the receiving result via the various typein functions. For all
intents and purposes, this is pretty similar to sending in queries
over the regular sql interface. One gotcha of course is that libpq
buffers the entire result in memory
which can be dangerous, so be
advised.


Du kannst JEDES Select als Basis für einen COPY-Befehl nehmen und damit die Daten nach außen blasen. Das kann dann wieder als Input für einen COPY-Befehl dienen, der die Daten einliest.
Ok COPY ist das Zauberwort, danke.

Evtl. willst Du auch pg_logical verwenden, damit kannst Du eine logische Replikation zwischen 2 Datenbanken machen. Diese kannst Du auf einzelne Tabellen definieren und da auch Records filtern.
Das hab ich mir auch schon angesehen, aber soweit ich gelesen hab, ist damit keine Multimaster Replikation möglich. Mit COPY ebenfalls nicht, aber das brauch ich auch für was anderes ;-)
 
Ahhh, das bezog sich auf dblink.

Falls Du Multi-Master suchst: BDR kann das, Bi-Directional Replication, daher das BDR. Es gibt die frei verfügbare 1er-Version, die aber nicht mehr groß weiterentwickelt wird. Die Entwicklung erfolgt in der 2er-Version (verfügbar nur für Support-Kunden) und intern in der 3er-Version. BDR ist bei vielen mittlerweile im Einsatz, insbesondere für Replikation über große Entfernungen (zwischen Kontinenten) mit hohen Latenzen. Es ist robust genug aufgebaut, damit klarzukommen.
 
Werbung:
Zurück
Oben