Последовательности Postgres без атрибута «ведомый» не возвращают идентификатор в Django 1.3 - PullRequest
7 голосов
/ 24 июня 2011

После недавнего перехода с Oracle на Postgres и обновления с Django 1.2 до 1.3 у нас начались проблемы при сохранении объектов в нашей базе данных.Когда вызывается save (), идентификатор не возвращается, это происходит даже при сохранении стандартных моделей аутентификации django через стандартную административную панель django («/ admin / auth / user / None /» возвращается, даже если пользователь был добавлен в базу данных).и имел идентификатор).

На всех других наших сайтах, на которых запущена одна и та же база данных, такой проблемы нет, однако они работают либо на Django 1.1, либо на 1.2.

Мы обнаружили, что для новых таблицпосле создания миграции их последовательность имела атрибут «принадлежащий», которому принадлежал столбец, в котором была последовательность (обычно столбец id).Изменение атрибута «владелец» устранило проблемы, с которыми мы столкнулись в версии 1.3.

Кто-нибудь знает, в чем причина этого?Мы нашли решение, если у кого-то еще есть эта проблема, но мы хотели бы знать, что вызвало это.

Ответы [ 2 ]

6 голосов
/ 13 июля 2011

В postgresql, если у вас есть объект, вы можете эффективно делать с ним все, что захотите.В результате, если вы не являетесь владельцем, вам необходимо предоставить пользователю «USAGE» для последовательности.

Postgresql Владение

Postgresql Grants

1 голос
/ 11 сентября 2013

Кажется, что django, вероятно, использует pg_get_serial_sequence для получения последовательности, связанной со столбцом таблицы, а затем currval для получения текущего значения последовательности, но если последовательность не принадлежит таблице, она не связана со столбцом так что не получится.

Атрибут OWNED BY связывает последовательность с заданной таблицей и столбцом. Если для последовательности OWNED BY установлено значение NULL, то это, по сути, автономная последовательность, которая никак не связана с какой-либо таблицей или столбцом и даже менее связана с первичным ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...