Estoy mirando alguna creación de tabla PostgreSQL y me topé con esto:
CREATE TABLE (
...
) WITH ( OIDS = FALSE );
Leí la documentación proporcionada por postgres y sé el concepto de identificador de objeto de OOP pero aún no entiendo,
- ¿Por qué ese identificador sería útil en una base de datos?
- hacer consultas más cortas?
- ¿Cuándo debería usarse?
sql
database
performance
postgresql
fabrizioM
fuente
fuente
old
columna del sistema .Respuestas:
Básicamente, los OID le brindan una identificación integrada globalmente única para cada fila, contenida en una columna del sistema (a diferencia de una columna de espacio de usuario). Eso es útil para las tablas donde no tiene una clave primaria, tiene filas duplicadas, etc. Por ejemplo, si tiene una tabla con dos filas idénticas y desea eliminar la más antigua de las dos, puede hacerlo usando el oid columna
En mi experiencia, la característica generalmente no se usa en la mayoría de las aplicaciones respaldadas por postgres (probablemente en parte porque no son estándar), y su uso está esencialmente en desuso :
fuente
Los OID todavía están en uso para Postgres con objetos grandes (aunque algunas personas argumentarían que los objetos grandes generalmente no son útiles de todos modos). También son utilizados ampliamente por las tablas del sistema . Son utilizados, por ejemplo, por TOAST, que almacena más de 8 KB de BYTEA (etc.) en un área de almacenamiento separada (transparente) que se usa de forma predeterminada en todas las tablas . Su uso directo asociado con las tablas de usuario "normales" es básicamente obsoleto .
Aparentemente, la secuencia OID "sí" se ajusta si excede 4B 6 . Entonces, en esencia, es un contador global que puede ajustarse. Si se ajusta, puede comenzar a producirse una ralentización cuando se usa y "busca" valores únicos, etc.
Ver también https://wiki.postgresql.org/wiki/FAQ#What_is_an_OID.3F
fuente
OID que se están eliminando
El equipo central responsable de Postgres está eliminando gradualmente los OID.
Postgres 12 elimina el comportamiento especial de las columnas OID
El uso de OID como una columna de sistema opcional en sus tablas ahora se elimina de Postgres 12. Ya no puede usar:
CREATE TABLE … WITH OIDS
mandodefault_with_oids (boolean)
configuración de compatibilidadEl tipo de datos
OID
permanece en Postgres 12. Puede crear explícitamente una columna del tipoOID
.Después de migrar a Postgres 12 , cualquier columna del sistema opcionalmente definida
oid
ya no será invisible por defecto. Realizar unaSELECT *
voluntad ahora incluirá esta columna. Tenga en cuenta que esta columna extra "sorpresa" puede romper código SQL escrito ingenuamente.fuente
Para eliminar todos los OID de las tablas de la base de datos, puede usar este script de Linux:
Primero, inicie sesión como superusuario de PostgreSQL:
Ahora ejecute este script, cambiando YOUR_DATABASE_NAME con su nombre de base de datos:
Utilicé este script para eliminar todos mis OID, ya que Npgsql 3.0 no funciona con esto, y ya no es importante para PostgreSQL.
fuente