Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временно отключить ограничение первичного ключа / 3 сообщений из 3, страница 1 из 1
24.12.2014, 16:12:52
    #38841879
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временно отключить ограничение первичного ключа
Добрый день.

Есть таблица, в которой имеется составной ключ, например "идентификатор контракта" и "год исполнения".
Выполняется операция UPDATE по всей таблице, поле "год исполнения" увеличивается на единицу для всех контрактов, например

Код: sql
1.
UPDATE table1 SET year = year + 1



При выполнении данной команды получаем ошибку, например

ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "table1_idx"
DETAIL: Ключ "(year, id_contract)=(2016, 3305)" уже существует.

Если допустить, что команда выполнилась бы, то в итоге нарушения уникальности не было бы.

Вопрос, как на время выполнения команды, блокировать контроль на ограничение уникальности?
Есть решение удалить ключ и после его создать, но мне кажется это не лучшее решение. Есть ли другие варианты?
Спасибо
...
Рейтинг: 0 / 0
24.12.2014, 18:57:23
    #38842096
Gold_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временно отключить ограничение первичного ключа
big-trot...

Вопрос, как на время выполнения команды, блокировать контроль на ограничение уникальности?
Есть решение удалить ключ и после его создать, но мне кажется это не лучшее решение. Есть ли другие варианты?
Спасибо


Код: plsql
1.
2.
ALTER TABLE table1
  ADD CONSTRAINT table1_cont UNIQUE (year, id_contract) DEFERRABLE;




Но можно и в одной транзакции удалить, обновить, создать. Это же разовая операция?
...
Рейтинг: 0 / 0
24.12.2014, 20:29:28
    #38842153
NikolayV81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временно отключить ограничение первичного ключа
big-trotДобрый день.

Есть таблица, в которой имеется составной ключ, например "идентификатор контракта" и "год исполнения".
Выполняется операция UPDATE по всей таблице, поле "год исполнения" увеличивается на единицу для всех контрактов, например

Код: sql
1.
UPDATE table1 SET year = year + 1



При выполнении данной команды получаем ошибку, например

ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "table1_idx"
DETAIL: Ключ "(year, id_contract)=(2016, 3305)" уже существует.

Если допустить, что команда выполнилась бы, то в итоге нарушения уникальности не было бы.

Вопрос, как на время выполнения команды, блокировать контроль на ограничение уникальности?
Есть решение удалить ключ и после его создать, но мне кажется это не лучшее решение. Есть ли другие варианты?
Спасибо

отсортировать по дате назад и обновить в цикле
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Временно отключить ограничение первичного ключа / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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