Ich schaue mir eine PostgreSQL-Tabellenerstellung an und bin darauf gestoßen:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
Ich habe die Dokumentation von postgres gelesen und kenne das Konzept der Objektkennung von OOP, verstehe es aber immer noch nicht.
- Warum wäre eine solche Kennung in einer Datenbank nützlich?
- Abfragen kürzer machen?
- Wann sollte es verwendet werden?
sql
database
performance
postgresql
fabrizioM
quelle
quelle
old
Systemspalte erfordert .Antworten:
OIDs geben Ihnen im Grunde eine integrierte, global eindeutige ID für jede Zeile, die in einer Systemspalte enthalten ist (im Gegensatz zu einer User-Space-Spalte). Dies ist praktisch für Tabellen, in denen Sie keinen Primärschlüssel, doppelte Zeilen usw. haben. Wenn Sie beispielsweise eine Tabelle mit zwei identischen Zeilen haben und die älteste der beiden löschen möchten, können Sie dies mit dem tun oid Spalte.
Nach meiner Erfahrung wird die Funktion in den meisten von Postgres unterstützten Anwendungen im Allgemeinen nicht verwendet (wahrscheinlich teilweise, weil sie nicht dem Standard entsprechen), und ihre Verwendung ist im Wesentlichen veraltet :
quelle
OIDs werden immer noch für Postgres mit großen Objekten verwendet (obwohl einige Leute argumentieren würden, dass große Objekte im Allgemeinen sowieso nicht nützlich sind). Sie werden auch häufig von Systemtabellen verwendet . Sie werden beispielsweise von TOAST verwendet, das BYTEAs (usw.) mit mehr als 8 KB in einem separaten Speicherbereich (transparent) speichert, der standardmäßig von allen Tabellen verwendet wird . Ihre direkte Verwendung in Verbindung mit "normalen" Benutzertabellen ist grundsätzlich veraltet .
Anscheinend wird die OID-Sequenz "umbrochen", wenn sie 4B 6 überschreitet . Im Wesentlichen handelt es sich also um einen globalen Zähler, der umbrochen werden kann. Wenn es umbrochen wird, kann es zu einer gewissen Verlangsamung kommen, wenn es verwendet und nach eindeutigen Werten usw. "durchsucht" wird.
Siehe auch https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F
quelle
OIDs werden auslaufen
Das für Postgres zuständige Kernteam setzt OIDs schrittweise aus.
Postgres 12 entfernt das spezielle Verhalten von OID-Spalten
Die Verwendung von OID als optionale Systemspalte in Ihren Tabellen wurde jetzt aus Postgres 12 entfernt. Sie können nicht mehr Folgendes verwenden:
CREATE TABLE … WITH OIDS
Befehldefault_with_oids (boolean)
KompatibilitätseinstellungDer Datentyp
OID
bleibt in Postgres 12. Sie können explizit eine Spalte des Typs erstellenOID
.Nach der Migration zu Postgres 12 ist eine optional definierte Systemspalte
oid
standardmäßig nicht mehr unsichtbar. Das Durchführen einesSELECT *
Testaments enthält jetzt diese Spalte. Beachten Sie, dass diese zusätzliche "Überraschungs" -Spalte möglicherweise naiv geschriebenen SQL-Code beschädigt.quelle
Um alle OIDs aus Ihren Datenbanktabellen zu entfernen, können Sie dieses Linux-Skript verwenden:
Melden Sie sich zunächst als PostgreSQL-Superuser an:
Führen Sie nun dieses Skript aus und ändern Sie YOUR_DATABASE_NAME mit Ihrem Datenbanknamen:
Ich habe dieses Skript verwendet, um alle meine OIDs zu entfernen, da Npgsql 3.0 damit nicht funktioniert und es für PostgreSQL nicht mehr wichtig ist.
quelle