2013-03-08 19 views
0

Я следующий тип в Postgres 9.2:psycopg2 типы перечислений

CREATE TYPE profile_categories AS ENUM 
(
    'particulier', 
    'professionel', 
    'assureur', 
    'manager' 
); 

Так что я хочу, чтобы зарегистрировать его:

psycopg2.extras.register_composite('profile_categories', conn, globally=True)

но тогда я получил ошибку:

psycopg2.ProgrammingError: PostgreSQL type 'profile_categories' not found

Все мои ENUM TYPE не смогли зарегистрироваться надлежащим образом в то время как другие типы регистрируют мелкие, такие как:

CREATE TYPE _result AS 
(
    id     TEXT, 
    msg     TEXT 
); 

Как зарегистрировать типы ENUM?

ответ

0

Ваше заявление не работает, потому что перечисление не является составным типа. Я просмотрел документы, и я не мог найти ничего, относящихся к типам перечислений. Я бы, вероятно, просто рассматривал это как ошибки текста и ловушки.

Похоже, что процесс регистрации (из документов) используется, когда может потребоваться дополнительная обработка, чтобы вы могли обрабатывать типы точек, геометрические типы, типы кортежей и т. Д. Типы ENUM не требуют обработки, когда они получены из db, чтобы это имело смысл.

+1

Это верно, пока вы не используете массив над перечислением. В этом случае psycopg2 возвращает массив как строковый литерал вместо списка строк. В этом случае необходимо использовать персонализированный тип: http://initd.org/psycopg/docs/extensions.html#database-types-casting-functions – JoshuaBoshi

Смежные вопросы