|
|
|
Cортировка и индекс по enum-полю в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Как Postgres будет сортировать по ENUM-полю? По текстовой метке или по внутреннему числовому представлению (enumsortorder) ? Можно ли сделать выборку по полю ENUM-типа используя как раз enumsortorder, то есть не WHERE type = 'Type 1', где Type 1 - текстовая метка значения ENUM-типа, WHERE type = 1, где 1 - это enumsortorder для конкретной метки. И соответственно выстроить Btree по ENUM полю? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 16:56:53 |
|
||
|
Cортировка и индекс по enum-полю в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
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 полю?"Что не запрещено, то разрешено." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 17:39:33 |
|
||
|
Cортировка и индекс по enum-полю в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, Спасибо большое за ответ. Но вторая часть все же была не о том... Мне нужно как раз не Код: plsql 1. , а сравнение с id записи в ENUM-типе, у каждой записи есть же числовой идентификатор...Вместо сравнения строк хочу сделать сравнение чисел, то есть Код: plsql 1. , где type_record_id это как раз идентификатор искомой записи в типе. Список идентификаторов я могу видеть через запрос: Код: plsql 1. 2. 3. 4. 5. А можно получить конкретный идентификатор с помощью функции в которой аргументом бы было как раз fieldname и построить по полю соответствующий функциональный индекс? То есть Код: plsql 1. и индекс по func(fieldname). Заранее извиняюсь за, возможно, кривые формулировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 18:50:10 |
|
||
|
Cортировка и индекс по enum-полю в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
avtomonLeXa NalBat, Спасибо большое за ответ. Но вторая часть все же была не о том... Мне нужно как раз не Код: plsql 1. , а сравнение с id записи в ENUM-типе, у каждой записи есть же числовой идентификатор...Вместо сравнения строк хочу сделать сравнение чисел, то есть Код: plsql 1. , где type_record_id это как раз идентификатор искомой записи в типе. Список идентификаторов я могу видеть через запрос: Код: plsql 1. 2. 3. 4. 5. А можно получить конкретный идентификатор с помощью функции в которой аргументом бы было как раз fieldname и построить по полю соответствующий функциональный индекс? То есть Код: plsql 1. и индекс по func(fieldname). Заранее извиняюсь за, возможно, кривые формулировки. не можете...это нарушает саму идею enum... id это только внутреннее представление в которое лучше не лезть... и самое главное совершенно непонятно зачем такое может быть надо? --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 03:16:39 |
|
||
|
Cортировка и индекс по enum-полю в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
avtomon, если вы хотите обращаться по номеру значения в типе, то пожалуйста, именно так, как я написал: WHERE fieldname = (enum_range(null::typename)) [3] . но btree индекс стройте по самому полю типа enum, и вас не должно заботить, что именно постгрес использует внутрях этого индекса, значения enum или их номера. для вас интерфейс - по значению, а не по номеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2014, 10:22:13 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=127&tid=1998642]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 419ms |

| 0 / 0 |
