50.20. pg_enum
В каталоге pg_enum
содержатся записи, определяющие значения и метки для всех типов-перечислений. Внутренним представлением значения перечисления на самом деле является OID соответствующей строки в pg_enum
.
Таблица 50.20. Столбцы pg_enum
Имя | Тип | Ссылки | Описание |
---|---|---|---|
oid | oid | Идентификатор строки (скрытый атрибут; должен выбираться явно) | |
enumtypid | oid |
| OID типа в pg_type , к которому относится данное значение перечисления |
enumsortorder | float4 | Порядок сортировки этого значения внутри перечисления | |
enumlabel | name | Текстовая метка данного значения перечисления |
Идентификаторы OID в строках pg_enum
подчиняются особому правилу: чётные OID гарантированно упорядочиваются по порядку сортировки их типа перечисления. То есть, если к одному перечислению относятся два чётных OID, меньшему OID должно соответствовать меньшее значение enumsortorder
. Нечётные значения OID могут быть не связаны с этим порядком сортировки. Это правило позволяет во многих случаях сравнивать значения перечислений, не обращаясь к каталогам. Процедуры, создающие и изменяющие перечисления, пытаются присваивать значениям перечислений чётные OID, если это возможно.
Когда создаётся тип перечисления, его членам назначаются позиции по порядку сортировки 1..n
. Но у членов, добавляемых позже, могут оказаться отрицательные или дробные значения enumsortorder
. Единственное, что требуется — чтобы эти значения были правильно упорядочены и уникальны в рамках перечисления.