sql >> Base de Datos >  >> RDS >> PostgreSQL

La diferencia en el orden de los literales de tipo de enumeración entre PostgreSQL 9.0 y 9.1

Creo que deberá verificar la versión de PostgreSQL y cambiar el comportamiento de manera adecuada, o usar SQL que no toque el catálogo para determinar el orden.

Una idea para este último, dada una enumeración ficticia:

CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';

es ORDER BY la conversión de la etiqueta de enumeración a los valores del tipo de enumeración usando el row_number función de ventana disponible en 8.4 y posteriores:

SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;

Esto le da las etiquetas ordenadas por una clave de clasificación. En versiones anteriores de Pg, Pg solo ordenará por el oid de los valores de enumeración, en las versiones más nuevas usará el orden de enumeración enum, pero no tiene que preocuparse de ninguna manera, simplemente le dijo a PostgreSQL "clasifique estos en el orden correcto, por favor".

O si solo los necesita en el orden que espera el servidor, escriba:

SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum