Безопасно ли переходить с составного ПК на одиночный ПК, подобный этому

#postgresql

#postgresql

Вопрос:

У меня есть таблица с составным ПК (code_id, user_id), в которой уже есть 100 тыс. записей. Безопасно ли переходить с составного ПК на одиночный ПК, как в примере ниже?

 ALTER TABLE orders
  DROP CONSTRAINT pk_code_id_user_id,
  ADD COLUMN order_id SERIAL,
  ADD CONSTRAINT pk_order_id PRIMARY KEY (order_id);

  

Ответ №1:

Да, это безопасно и будет работать.

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

  • все строки должны обновляться с DEFAULT значением последовательности

  • создается новый уникальный индекс

  • PostgreSQL проверяет это order_id IS NOT NULL для всех строк

В течение этого времени таблица заблокирована в ACCESS EXCLUSIVE режиме, поэтому она недоступна даже для одновременного чтения.

Но с такой крошечной таблицей это не должно быть большой проблемой.

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

Комментарии:

1. Спасибо, составной индекс (code_id, user_id) также будет удален pg или он останется после изменений pk?

2. ДА. Если вы удалите ограничение, индекс, который его реализует, автоматически удалится.