Je regarde une création de table PostgreSQL et je suis tombé sur ceci:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
J'ai lu la documentation fournie par postgres et je connais le concept d'identifiant d'objet de la POO mais je ne saisis toujours pas,
- pourquoi un tel identifiant serait utile dans une base de données?
- raccourcir les requêtes?
- quand doit-il être utilisé?
sql
database
performance
postgresql
fabrizioM
la source
la source
old
colonne système .Réponses:
Les OID vous donnent essentiellement un identifiant intégré et globalement unique pour chaque ligne, contenu dans une colonne système (par opposition à une colonne d'espace utilisateur). C'est pratique pour les tables où vous n'avez pas de clé primaire, avez des lignes en double, etc. Par exemple, si vous avez une table avec deux lignes identiques et que vous souhaitez supprimer la plus ancienne des deux, vous pouvez le faire en utilisant le colonne oid.
D'après mon expérience, la fonctionnalité est généralement inutilisée dans la plupart des applications postgres (probablement en partie parce qu'elles ne sont pas standard), et leur utilisation est essentiellement obsolète :
la source
Les OID sont toujours utilisés pour Postgres avec des objets volumineux (bien que certaines personnes soutiennent que les objets volumineux ne sont généralement pas utiles de toute façon). Ils sont également largement utilisés par les tables système . Ils sont utilisés par exemple par TOAST qui stocke plus de 8 Ko de BYTEA (etc.) dans une zone de stockage séparée (de manière transparente) qui est utilisée par défaut par toutes les tables . Leur utilisation directe associée aux tables utilisateur "normales" est fondamentalement obsolète .
Apparemment, la séquence OID «fait» un bouclage si elle dépasse 4B 6 . Donc, en substance, c'est un compteur mondial qui peut envelopper. S'il s'enroule, un ralentissement peut commencer à se produire lorsqu'il est utilisé et "recherché" des valeurs uniques, etc.
Voir aussi https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F
la source
OID en cours d'élimination
L'équipe principale responsable de Postgres supprime progressivement les OID.
Postgres 12 supprime le comportement spécial des colonnes OID
L'utilisation d'OID comme colonne système facultative sur vos tables est désormais supprimée de Postgres 12. Vous ne pouvez plus utiliser:
CREATE TABLE … WITH OIDS
commanderdefault_with_oids (boolean)
paramètre de compatibilitéLe type de données
OID
reste dans Postgres 12. Vous pouvez créer explicitement une colonne du typeOID
.Après la migration vers Postgres 12 , toute colonne système éventuellement définie ne
oid
sera plus invisible par défaut. L'exécution d'unSELECT *
inclut désormais cette colonne. Notez que cette colonne «surprise» supplémentaire peut casser du code SQL écrit naïvement.la source
Pour supprimer tous les OID de vos tables de base de données, vous pouvez utiliser ce script Linux:
Tout d'abord, connectez-vous en tant que superutilisateur PostgreSQL:
Maintenant, exécutez ce script, en changeant YOUR_DATABASE_NAME avec votre nom de base de données:
J'ai utilisé ce script pour supprimer tous mes OID, car Npgsql 3.0 ne fonctionne pas avec cela, et ce n'est plus important pour PostgreSQL.
la source