SQL, Postgres Oid, Quels sont-ils et pourquoi sont-ils utiles?
Je suis à la recherche à un certain PostgreSQL création de la table et je suis tombé sur ceci:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
J'ai lu la documentation fournie par postgres et je sais que le concept de l'identificateur d'objet à partir de la programmation orientée objet, mais encore je ne saisis pas,
- pourquoi un tel identificateur serait utile dans une base de données?
- de faire des requêtes plus courte?
- quand doit-il être utilisé?
- Je ne peux pas trouver toutes les références à citer pour le moment, mais pour info j'ai entendu dire que l'aide de Microsoft Access en tant que front-end pour Postgres nécessite la présence de la
old
système de colonne.
Vous devez vous connecter pour publier un commentaire.
Oid fondamentalement vous donner un intégré, à l'échelle mondiale id unique pour chaque ligne, contenue dans un système de colonne (par opposition à un utilisateur de l'espace de la colonne). C'est très pratique pour les tables où vous n'avez pas de clé primaire, ont des lignes en double, etc. Par exemple, si vous avez un tableau avec deux lignes identiques, et que vous souhaitez supprimer le plus ancien des deux, vous pourriez le faire à l'aide de la colonne oid.
Dans mon expérience, la fonctionnalité est généralement utilisé dans la plupart des postgres adossés à des applications (probablement en partie parce qu'ils sont non-standard), et leur utilisation est essentiellement obsolète:
OID sont encore en usage pour Postgres avec grand les objets (bien que certaines personnes pourraient soutenir de grands objets ne sont généralement pas utile de toute façon). Ils sont aussi largement utilisés par les tables système. Ils sont utilisés par exemple par TOAST qui stocke de plus de 8 KO BYTEA de l' (etc.) hors d'une zone de stockage séparée (de manière transparente) qui est utilisé par défaut par toutes les tables. Leur utilisation directe associée à la "normale" les tables de l'utilisateur est fondamentalement obsolète.
Apparemment, l'OID de la séquence "ne" wrap si elle dépasse 4B Six. Donc, en substance, c'est un compteur global qui peut s'enrouler. Si elle ne wrap, un certain ralentissement peut commencer survenant lorsqu'il est utilisé et "recherché" pour des valeurs uniques, etc.
Voir aussi https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F
Oid progressivement
Le noyau de l'équipe responsable de Postgres est l'élimination progressive des Oid.
Postgres 12 supprime un comportement particulier de l'OID de colonnes
L'utilisation de l'OID comme un système facultatif de la colonne sur vos tables est maintenant retiré de Postgres 12. Vous ne pouvez plus utiliser:
CREATE TABLE … WITH OIDS
commandedefault_with_oids (boolean)
paramètre de compatibilitéLe type de données
OID
reste dans Postgres 12. Vous pouvez créer explicitement une colonne de typeOID
.Après la migration vers Postgres 12, tout en option défini par l' système de colonne
oid
de ne plus être invisible par défaut. L'exécution d'uneSELECT *
va maintenant inclure cette colonne. Notez que cette extra “surprise” de la colonne peut briser naïvement écrit le code SQL.Pour supprimer tous les Oid de vos tables de base de données, vous pouvez utiliser ce script Linux:
Tout d'abord, connecter en tant que super-utilisateur PostgreSQL:
Maintenant exécuter ce script, modification YOUR_DATABASE_NAME avec vous le nom de base de données:
J'ai utilisé ce script pour supprimer toutes mes Oid, depuis Npgsql 3.0 ne fonctionne pas avec cela, et ce n'est pas important de PostgreSQL plus.