Zuordnung Toast Datensatz

Hallo,

ich muss einen Datensatz einer TOAST Tabelle der Basistabelle zuordnen. Wisst ihr, über welchen Schlüssel o.ä. die verkmüpft sind? In der Doku und in den Weiten des WWW hab ich nichts dazu gefunden.

Bin für jeden Hinweis dankbar.

wenn ich dich richtig verstehe, hast Du eine TOAST-Tabelle und willst wissen, zu welcher Basistabelle diese gehört?

pg_class, Spalte reltoastrelid. Dort suchst Du die OID Deiner Toast-Tabelle und kannst dann die Basistabelle ablesen.

Nein, das weiss ich. Ich habe eine defekte page in einer toast tabelle und will rausfinden welcher Datensatz aus der Basistabelle dazu gehört.

Hrm. Wir haben da ein Tool bzw. Extension: “This extension allows user to check and report corrupt data in toast.”

und:
"The function can be invoked on a regular relation (relkind = ‘r’). It performs
a sequential scan on the table using a MVCC snapshot, checks for toastable
attributes and confirms if the toasted value is in a sane state. If it detects
a problem with any row, it reports that row via elog(NOTICE) message.
"

aber:

“Licensed for use on PostgreSQL servers covered by 2ndQuadrant Product Support”

Sorry.


Ich hab vor Jahren mal bei einem Kunden versucht, möglichst viel aus eine korrupten Tabelle (TOAST war korrupt, Tabelle selber nicht) auszulesen. Ich hab dann IIRC mir alle CTID’s geholt und in einem shell-script via psql versucht jeweils den Datensatz komplett zu der CTID zu holen. Da konnte ich dann die CTID’s erkennen, die einen Treffer in der TOAST hatten. Mit dieser Liste von CTID’s konnte ich dann die Tabelle vollständig kopieren, unter Ausschluß der korrupten CTID’s.

Falls Dir das hilft: viel Erfolg. Falls nicht: werd unser Kunde :wink:

OK, so hat es dann geklappt.

Danke für den Tipp!

Fein!

Wohin kann ich nun die Rechnung schicken? :wink: