Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Que es OID en PostGre y para que funciona

Estas en el tema de Que es OID en PostGre y para que funciona en el foro de PostgreSQL en Foros del Web. Hola a todos, actualmente tengo un dilema, estoy trabajando con postgre 8. Mientras trabajaba me di cuenta que al crear una tabla me encontraba con ...
  #1 (permalink)  
Antiguo 19/05/2010, 15:03
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Mensaje Que es OID en PostGre y para que funciona

Hola a todos, actualmente tengo un dilema, estoy trabajando con postgre 8. Mientras trabajaba me di cuenta que al crear una tabla me encontraba con un valor llamado OID = FALSE

Buscando por internet me eh topado que es una especie de campo, eh encontrado poco referente al asunto debido que no hay muchas paginas que describan con claridad su uso.

Cual seria la diferencia entre un campo OID (identificador de objeto) y SERIAL, y si pueden que me explique para que se usa y que ventajas y desventaja nos ofrece.
  #2 (permalink)  
Antiguo 19/05/2010, 15:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Que es OID en PostGre y para que funciona

Según entiendo, el OID es un identificador unico de cada objeto (llamese tabla,columna, tipo de dato etc) y es posible hacer uso de este numero para generar llaves primarias en una tabla.

Sin embargo, me parece que es un poco ortodoxo hacer uso de este mecanismo para identificar los registros de una tabla, por lo que recomiendo usar una secuencia (campos serial) a cada tabla y crearla con la opción WITH (OIDS=FALSE);

Si se hace uso de OIDS, tendrás una codificación poco regular en la que un registro seguido de otro puede ser 45263 58697 por el simple hecho de que este mecanismo codifica cada objeto de la base de datos.

Esto tiene como beneficio, el no tener que declarar llaves primarias para asegurar que no existan registros repetidos... (Ojo... registros con OID iguales) y poder jugar con ellos para hacer relaciones entre tablas.

Sin embargo, prefiero no hacer uso de OIDS en los registros de mis tablas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 19/05/2010 a las 15:49
  #3 (permalink)  
Antiguo 20/05/2010, 08:08
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Que es OID en PostGre y para que funciona

Cita:
Iniciado por huesos52 Ver Mensaje
Según entiendo, el OID es un identificador unico de cada objeto (llamese tabla,columna, tipo de dato etc) y es posible hacer uso de este numero para generar llaves primarias en una tabla.

Sin embargo, me parece que es un poco ortodoxo hacer uso de este mecanismo para identificar los registros de una tabla, por lo que recomiendo usar una secuencia (campos serial) a cada tabla y crearla con la opción WITH (OIDS=FALSE);

Si se hace uso de OIDS, tendrás una codificación poco regular en la que un registro seguido de otro puede ser 45263 58697 por el simple hecho de que este mecanismo codifica cada objeto de la base de datos.

Esto tiene como beneficio, el no tener que declarar llaves primarias para asegurar que no existan registros repetidos... (Ojo... registros con OID iguales) y poder jugar con ellos para hacer relaciones entre tablas.

Sin embargo, prefiero no hacer uso de OIDS en los registros de mis tablas.

saludos
Me aclaraste en grande mis dudas, pero tengo otra, eh leido algo de tamaños, es verdad que el OID permite llevar una secuencia de mas registros que cuando se usa el SERIAL?, y tambien ¿ es verdad que el OID si no se le coloca una condicion puede llegar a repetir datos?
  #4 (permalink)  
Antiguo 20/05/2010, 08:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Que es OID en PostGre y para que funciona

Cita:
Me aclaraste en grande mis dudas, pero tengo otra, eh leido algo de tamaños, es verdad que el OID permite llevar una secuencia de mas registros que cuando se usa el SERIAL?, y tambien ¿ es verdad que el OID si no se le coloca una condicion puede llegar a repetir datos?
En cuanto a tu primera pregunta...
Cuando declaras un campo serial (En realidad serial no es un tipo de dato) sino una representación de una acción que toma el campo. Realmente lo que hace es declarar un campo entero e implicitamente, crear una secuencia que es añadida como valor por defecto.

Mirar ejemplo:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE prueba_serial(contador SERIAL);
  2. NOTICE:  CREATE TABLE will CREATE implicit SEQUENCE "prueba_serial_contador_seq" FOR serial COLUMN "
  3. prueba_serial.contador"
  4. CREATE TABLE
  5. pruebas=> \d prueba_serial;
  6.                              Tabla ½public.prueba_serial╗
  7.  Columna  |  Tipo   |                          Modificadores
  8. ----------+---------+------------------------------------------------------------------
  9.  contador | INTEGER | NOT NULL DEFAULT NEXTVAL('prueba_serial_contador_seq'::regclass)

El rango que soporta un tipo de dato integer que te soporta hasta 2147483647. Si consideras que es un numero muy pequeño, puedes declararlo con bigserial que hace lo mismo que te dije anteriormente, pero no pone el campo como integer, sino como bigint. El bigint va hasta 9223372036854775807.
En conclusión, Sin importar si con OID permita llevar mas secuencias, creo que nunca nos veremos limitados por el uso de tipo de datos serial.

Segunda pregunta...
La verdad, no soy experto en el tema, pero alguna vez leí que si se pueden presentar datos repetidos, siempre y cuando no sean del mismo objeto. Lo de la condición, la verdad no se.

saludos y espero haberte ayudado
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 20/05/2010, 15:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Que es OID en PostGre y para que funciona

Cita:
Iniciado por huesos52 Ver Mensaje
En cuanto a tu primera pregunta...
Cuando declaras un campo serial (En realidad serial no es un tipo de dato) sino una representación de una acción que toma el campo. Realmente lo que hace es declarar un campo entero e implicitamente, crear una secuencia que es añadida como valor por defecto.

Mirar ejemplo:
Código SQL:
Ver original
  1. pruebas=> CREATE TABLE prueba_serial(contador SERIAL);
  2. NOTICE:  CREATE TABLE will CREATE implicit SEQUENCE "prueba_serial_contador_seq" FOR serial COLUMN "
  3. prueba_serial.contador"
  4. CREATE TABLE
  5. pruebas=> \d prueba_serial;
  6.                              Tabla ½public.prueba_serial╗
  7.  Columna  |  Tipo   |                          Modificadores
  8. ----------+---------+------------------------------------------------------------------
  9.  contador | INTEGER | NOT NULL DEFAULT NEXTVAL('prueba_serial_contador_seq'::regclass)

El rango que soporta un tipo de dato integer que te soporta hasta 2147483647. Si consideras que es un numero muy pequeño, puedes declararlo con bigserial que hace lo mismo que te dije anteriormente, pero no pone el campo como integer, sino como bigint. El bigint va hasta 9223372036854775807.
En conclusión, Sin importar si con OID permita llevar mas secuencias, creo que nunca nos veremos limitados por el uso de tipo de datos serial.

Segunda pregunta...
La verdad, no soy experto en el tema, pero alguna vez leí que si se pueden presentar datos repetidos, siempre y cuando no sean del mismo objeto. Lo de la condición, la verdad no se.

saludos y espero haberte ayudado
Muchas gracias de antemano, última otra pregunta, aclarando lo antes dicho cuando mencionas "Sin importar si con OID permita llevar mas secuencias, creo que nunca nos veremos limitados por el uso de tipo de datos serial", me dices que ¿con OID podemos tener mas registro o secuencias que cuando utilizamos SERIAL?, esa es mi duda soy un poco inesperto en el tema. Gracias.
  #6 (permalink)  
Antiguo 20/05/2010, 15:31
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Que es OID en PostGre y para que funciona

Los OID son identificadores que se atribuyen a cada objeto.
Para que entiendas bien, OID se comporta como una secuencia, pero no en una tabla, sino en todos los objetos de la base de datos.

No conozco un limite superiror para OID, pero como te dije en el post anterior, el limite de bigint es 9223372036854775807.
Si lo analizas bien, puedes tener una base de datos que almacene cada segundo un registro durante mil años y ni así se aproximaría al limite de bigint.

Código SQL:
Ver original
  1. postgres=> SELECT ('2000-12-31'::DATE - '1000-01-01'::DATE)::BIGINT*24*3600;
  2.   ?COLUMN?
  3. -------------
  4.  31588444800
  5. (1 fila)

En pocas palabras... postgresql se podrá ver limitado por espacio en disco, pero no en capacidad de plataforma.

se entiende?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 21/05/2010, 13:18
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Sonrisa Respuesta: Que es OID en PostGre y para que funciona

Cita:
Iniciado por huesos52 Ver Mensaje
Los OID son identificadores que se atribuyen a cada objeto.
Para que entiendas bien, OID se comporta como una secuencia, pero no en una tabla, sino en todos los objetos de la base de datos.

No conozco un limite superiror para OID, pero como te dije en el post anterior, el limite de bigint es 9223372036854775807.
Si lo analizas bien, puedes tener una base de datos que almacene cada segundo un registro durante mil años y ni así se aproximaría al limite de bigint.

Código SQL:
Ver original
  1. postgres=> SELECT ('2000-12-31'::DATE - '1000-01-01'::DATE)::BIGINT*24*3600;
  2.   ?COLUMN?
  3. -------------
  4.  31588444800
  5. (1 fila)

En pocas palabras... postgresql se podrá ver limitado por espacio en disco, pero no en capacidad de plataforma.

se entiende?
Si muchas gracias. Entonces segun entiendo oid mantiene una secuencia por ejemplo de 2 tablas diferentes, por ejemplo alumnoA y alumnoB, alumnoA tiene 1 registro y alumnoB tiene 2 registro, entonces la secuencia de objetos globalmente seria 3 por el total de objetos de OID existentes entre ambas tablas.

Bueno mi duda surgio porque actualmente trabajo en una empresa de mapas virtuales y veo que ellos en algunos casos guardan puntos digitales que serian las coordenadas de cualquier establecimiento en el mapa y objserve que ellos aveces utilizan mucho OIDs.
  #8 (permalink)  
Antiguo 26/05/2010, 11:10
 
Fecha de Ingreso: abril-2009
Mensajes: 3
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Que es OID en PostGre y para que funciona

Hola, quiero dar mi opinion

Tengo la misma inquietud que hitokiri833 y he estado leyendo un poco la documentación de [URL="http://www.postgresql.org/docs/8.4/static/datatype-oid.html"]postgres[/URL].

Según tengo entendido en la version 8.4 las OID estan deshabilitadas por defecto, además no son recomendadas como un reemplazo de llave primaria ya que al ser un integer sin signo de cuatro bytes no permitiría identificar inequivocamente filas en bases de datos de gran tamaño.

Hay una cosa que se menciona y es que es mejor utilizarlos como referencia a tablas del sistema, me gustaría que alguien me diera una explicación mejor.

Habiendo dicho lo anterior, no le veo utilidad y pues en mi caso hasta el momento no lo uso, incluso en versiones anteriores el comportamiento por defecto era crear las oid, ahora es al contrario; no se cual fue es (o fue) su utilidad me gustaría saber.

Saludos.
  #9 (permalink)  
Antiguo 07/06/2010, 14:37
 
Fecha de Ingreso: mayo-2010
Mensajes: 12
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Que es OID en PostGre y para que funciona

Tengo esa duda tambien.

Etiquetas: serial, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:45.