2017-06-01 2 views
0

Speichern Indizes in PG eine Art interne ID der Zeile oder speichern den Primärschlüssel der Zeile?Wie indiziert PostgreSQL Referenzzeilen?

Ich folge, es muss eine interne Zeile ID sein, da Tabellen nicht PK haben müssen. Ich kann jedoch keine spezifische Antwort auf diese Frage finden.

Antwort

1

In jeder Zeile ist eine interne "Adresse" in der Systemspalte ctid gespeichert (sehr ähnlich der rowid von Oracle). Dieser ctid-Wert wird im Index gespeichert.

Weitere Details finden Sie im Handbuch:

Sie die Spalte auswählen können, wenn Sie wollen:

select ctid, t.* 
from your_table t; 
+0

So jede Aktualisierung einer Zeile wird Benötigen Sie eine Indexaktualisierung, da sich das ctid ändert, richtig? – IamIC

+1

@IamIC: Nur wenn das Update indizierte Spalten ändert. Wenn nicht, kann Postgres ein "HOT" (heap-only-tuple) Update verwenden: https://github.com/postgres/postgres/blob/master/src/backend/access/heap/README.HOT Siehe auch [this antwort] (https://dba.stackexchange.com/a/84859/1822) und [dieser Postgres-Wiki-Artikel] (https://wiki.postgresql.org/wiki/Index-only_scans#Interaction_with_HOT) –

Verwandte Themen