¿Cuál es el equivalente en PostgreSQL de ROWNUM y ROWID de Oracle?


Mejor respuesta

He trabajado con bases de datos de Oracle y PostgreSQL y, por tanto, estoy respondiendo esto pregunta basada puramente en mi propia experiencia con ellos.

  • Equivalente para ROWID de Oracle

PostgreSQL contiene sus propias columnas definidas por el sistema y, entre esas columnas, puede usar ctid o oid como equivalente del rowid de Oracle.

ctid – Es una columna del sistema PostgreSQL de tipo de datos tid (identificador de tupla). La columna contiene información sobre los bloques físicos a nivel de registro (nivel de fila). Sin embargo, este valor de columna sigue cambiando cada vez que actualiza un registro o realiza operaciones de vacío total en una mesa. Por lo tanto, puede usar este valor de columna como un identificador de fila único solo con fines temporales, por ejemplo, para eliminar duplicados en una tabla. No puede confiar en este valor de columna para decidir la unicidad del nivel de registro en una tabla si desea aplicar su uso para casos de uso a largo plazo, como realizar inserciones incrementales en una tabla según el valor máximo / último de la columna insertada.

oid : conocido como «identificador de objeto», oid contiene valores únicos para un registro / fila lógica. Es de tipo oid (igual que el nombre de la columna). Sin embargo, necesita crear explícitamente una tabla usando la sintaxis «WITH OIDS» para que esta columna se cree para una tabla. Puede consultar un ejemplo aquí .

Nota :

Desde PostgreSQL 12, los oids ya no se pueden usar. Esto se debe a que oid se implementa utilizando un entero de 4 bytes sin signo y, por lo tanto, es peligroso confiar en ellos para la unicidad, especialmente cuando sus tablas están creciendo masivamente.

Según mi experiencia personal con PostgreSQL, siempre es mejor usar un valor de columna definido por el usuario como la clave sustituta para identificar registros de forma única si su tabla no tiene una clave principal.

  • Equivalente para ROWNUM de Oracle

PostgreSQL no tiene un equivalente exacto para un rownum que pueda usar en sus consultas SQL “ select” . Sin embargo, puede imitarlo creando un valor único sobre la marcha en sus consultas SQL.

Por ejemplo (asumiendo que su consulta sobre una tabla contiene 3 columnas),

SELECT

COL\_A,

COL\_B,

COL\_C,

ROW\_NUMBER() OVER (ORDER BY COL\_A ASC) AS ROWNUM

FROM \_TABLE

Sin embargo, ROWNUM en Oracle ya está asignado cuando lee una tupla del disco, mientras que, en la consulta anterior, la genera después de leer las tuplas y, por lo tanto, necesita un paso más cuando realmente desea aplicar el valor ROWNUM generado.

Nota:

También podría considerar limit como un equivalente cercano a ROWNUM, pero necesitas usar una funcionalidad más de PostgreSQL llamada offset cuando desee imitar el uso de ROWNUM de Oracle para un filtrado de rango (como ROWNUM entre A y B). Puede buscar un ejemplo aquí .

¡¡Gracias por leer !!

நன்றி \_ / \ \_

Responder

PostgreSQL ROW\_NUMBER () explicado con ejemplos prácticos

Ya se le preguntó:

¿Cuál es el equivalente en PostgreSQL de Oracle? ¿ROWNUM y ROWID?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *