тип поля ака enum в mysql

Nirva

Dmitry Polyakov
тип поля ака enum в mysql

сабж - как реализовать enum в постгресе?
 

YRusinov

Филин Ух
Например через тип serial или созданием последовательности руками.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: YRusinov
Например через тип serial или созданием последовательности руками.
ты бы для приличия в мануал заглянул, узнал о чём речь.

Автор оригинала: Nirva
сабж - как реализовать enum в постгресе?
либо сделать таблицу-справочник и хранить ссылку на неё, либо что-то типа
Код:
CREATE TABLE foo(
    ...
    bar char(5) CHECK(bar IN ('yes', 'no', 'maybe')),
    ...
);
 

Nirva

Dmitry Polyakov
благодарю. странно, вроде по поиску довольно распространенный вопрос, а варианты такие разные.

еще раз благодарю. много всего посмотрел. везде свои недостатки. но в общем понятно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мы это сделали через so-модуль и определили свой базовый тип данных, который по интерфейсу как string, а хранится как int

эти функции открывают и парсят внешний файл (CSV, например), в котором описано соответствие

мне это показалось удобным и гибким
так как результат ф-ции в постгресе кешируется, файл будет считываться 1 раз

кому интересно - для определения своего типа на С пишутся 2 функции для обработки данных на входе и на выходе, описание операторов и тип
потом эти функции декларируются в постгресе
все подробно с примерами описано в документации
 

_Dimas2003_

Новичок
Автор оригинала: grigori

мне это показалось удобным и гибким
так как результат ф-ции в постгресе кешируется, файл будет считываться 1 раз
файл будет считываться не один раз, а количество вариантов в enum раз.
Результат функции кэшируется для набора агрументов, то есть имеем всего [количество вариантов в enum] аргументов раз считываний файла (максимум).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
файл может считываться один раз и формировать массив возможных значений в памяти
а потом, например, проверять модификацию файла-справочника (при отключенном кешировании или кешировании в рамках запроса)
 

_Dimas2003_

Новичок
файл может считываться один раз и формировать массив возможных значений в памяти
а потом, например, проверять модификацию файла-справочника (при отключенном кешировании или кешировании в рамках запроса)
так как результат ф-ции в постгресе кешируется, файл будет считываться 1 раз
в этом случае использовать надо не кеширование постгреса, а собственное кеширование в so-функции.
 

Nirva

Dmitry Polyakov
и тут же это пригодилось. всем еще разок спасибо.
в документации та которая постгресовская - муть.
не говоря о форуме, там, кстати, этот вопрос встречается раз двадцать в архиве, ответ на него один невразумительный. Всем спасибо еще разок ;)
 

_Dimas2003_

Новичок
Есть еще вариант.
Создать таблицу, в которой будут находится варианты енумов и вторую (нужную) таблицу с foreign key на первую в нужных местах.
После этого создать вид, который будет выбирать строки второй таблицы и заменять в них нужные столбцы, которые должны быть енумами, на соответствующие им значения из первой таблицы
Сделать вид и прописать на него правила для insert, update и delete, чтобы можно было с ним работать как с таблицей.
 
Сверху