powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Cортировка и индекс по enum-полю в PostgreSQL
6 сообщений из 6, страница 1 из 1
Cортировка и индекс по enum-полю в PostgreSQL
    #38661692
avtomon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как Postgres будет сортировать по ENUM-полю? По текстовой метке или по внутреннему числовому представлению (enumsortorder) ?
Можно ли сделать выборку по полю ENUM-типа используя как раз enumsortorder, то есть не WHERE type = 'Type 1', где Type 1 - текстовая метка значения ENUM-типа, WHERE type = 1, где 1 - это enumsortorder для конкретной метки. И соответственно выстроить Btree по ENUM полю?
Спасибо.
...
Рейтинг: 0 / 0
Cортировка и индекс по enum-полю в PostgreSQL
    #38661749
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avtomonКак Postgres будет сортировать по ENUM-полю? По текстовой метке или по внутреннему числовому представлению (enumsortorder) ? 8.7. Enumerated Types

avtomonМожно ли сделать выборку по полю ENUM-типа используя как раз enumsortorder, то есть не WHERE type = 'Type 1', где Type 1 - текстовая метка значения ENUM-типа, WHERE type = 1, где 1 - это enumsortorder для конкретной метки. 9.10. Enum Support Functions

WHERE fieldname = (enum_range(null::typename))[3]

avtomonИ соответственно выстроить Btree по ENUM полю?"Что не запрещено, то разрешено."
...
Рейтинг: 0 / 0
Cортировка и индекс по enum-полю в PostgreSQL
    #38661848
avtomon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LeXa NalBat,
Спасибо большое за ответ. Но вторая часть все же была не о том...
Мне нужно как раз не
Код: plsql
1.
WHERE fieldname = (enum_range(null::typename))

, а сравнение с id записи в ENUM-типе, у каждой записи есть же числовой идентификатор...Вместо сравнения строк хочу сделать сравнение чисел, то есть
Код: plsql
1.
WHERE type_record_id = :id

, где type_record_id это как раз идентификатор искомой записи в типе. Список идентификаторов я могу видеть через запрос:
Код: plsql
1.
2.
3.
4.
5.
 SELECT pg_enum.enumsortorder
 FROM pg_type 
 JOIN pg_enum 
     ON pg_enum.enumtypid = pg_type.oid
 WHERE pg_type.typname = 'typename'



А можно получить конкретный идентификатор с помощью функции в которой аргументом бы было как раз fieldname и построить по полю соответствующий функциональный индекс?
То есть
Код: plsql
1.
WHERE func(fieldname) = :id

и индекс по func(fieldname).
Заранее извиняюсь за, возможно, кривые формулировки.
...
Рейтинг: 0 / 0
Cортировка и индекс по enum-полю в PostgreSQL
    #38662097
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avtomonLeXa NalBat,
Спасибо большое за ответ. Но вторая часть все же была не о том...
Мне нужно как раз не
Код: plsql
1.
WHERE fieldname = (enum_range(null::typename))

, а сравнение с id записи в ENUM-типе, у каждой записи есть же числовой идентификатор...Вместо сравнения строк хочу сделать сравнение чисел, то есть
Код: plsql
1.
WHERE type_record_id = :id

, где type_record_id это как раз идентификатор искомой записи в типе. Список идентификаторов я могу видеть через запрос:
Код: plsql
1.
2.
3.
4.
5.
 SELECT pg_enum.enumsortorder
 FROM pg_type 
 JOIN pg_enum 
     ON pg_enum.enumtypid = pg_type.oid
 WHERE pg_type.typname = 'typename'



А можно получить конкретный идентификатор с помощью функции в которой аргументом бы было как раз fieldname и построить по полю соответствующий функциональный индекс?
То есть
Код: plsql
1.
WHERE func(fieldname) = :id

и индекс по func(fieldname).
Заранее извиняюсь за, возможно, кривые формулировки.

не можете...это нарушает саму идею enum... id это только внутреннее представление в которое лучше не лезть...

и самое главное совершенно непонятно зачем такое может быть надо?

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Cортировка и индекс по enum-полю в PostgreSQL
    #38662257
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avtomon,

если вы хотите обращаться по номеру значения в типе, то пожалуйста, именно так, как я написал: WHERE fieldname = (enum_range(null::typename)) [3] . но btree индекс стройте по самому полю типа enum, и вас не должно заботить, что именно постгрес использует внутрях этого индекса, значения enum или их номера. для вас интерфейс - по значению, а не по номеру.
...
Рейтинг: 0 / 0
Cортировка и индекс по enum-полю в PostgreSQL
    #38662421
avtomon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Cортировка и индекс по enum-полю в PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]