Удалять уникальный индекс при наличии индекса первичного ключа - PullRequest
0 голосов
/ 27 марта 2020

У меня есть следующая таблица

CREATE TABLE steps (
    hash_id text UNIQUE PRIMARY KEY,
    depth integer
);

-- Indices -------------------------------------------------------

CREATE UNIQUE INDEX steps_hash_id_key ON steps(hash_id text_ops);
CREATE UNIQUE INDEX steps_pkey ON steps(hash_id text_ops);

Но я хотел бы удалить избыточный индекс UNIQUE, потому что PRIMARY KEY уже уникален.

У меня также есть много других связанных таблиц на hash_id моей steps таблицы с внешними ключами.

Когда я пытаюсь удалить свой UNIQUE index следующим образом:

ALTER TABLE steps DROP CONSTRAINT steps_hash_id_key;

Я получаю

ERROR:  cannot drop constraint steps_hash_id_key on table steps because other objects depend on it
DETAIL:  constraint steps_routes_step_hash_id_fkey on table steps_routes depends on index steps_hash_id_key
constraint steps_likes_dislikes_step_hash_id_fkey on table steps_likes_dislikes depends on index steps_hash_id_key
HINT:  Use DROP ... CASCADE to drop the dependent objects too.

Дело в том, что я не хочу каскадно удалять что-либо, я просто хотел бы удалить этот дублированный уникальный индекс. Возможно ли это?

1 Ответ

0 голосов
/ 27 марта 2020

Благодаря обсуждению в комментариях (@Gordon Linoff) есть способ решить эту проблему:

  • Удаление внешних ключей
  • Удаление основных и уникальных ключей
  • Воссоздание только первичного ключа
  • Воссоздание внешних ключей
ALTER TABLE steps_routes DROP CONSTRAINT steps_routes_step_hash_id_fkey;
ALTER TABLE steps_likes_dislikes DROP CONSTRAINT steps_likes_dislikes_step_hash_id_fkey;
ALTER TABLE steps DROP CONSTRAINT steps_pkey;
ALTER TABLE steps DROP CONSTRAINT steps_hash_id_key;
ALTER TABLE steps ADD PRIMARY KEY (hash_id);
ALTER TABLE steps_routes ADD FOREIGN KEY (step_hash_id) REFERENCES steps(hash_id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE steps_likes_dislikes ADD FOREIGN KEY (step_hash_id) REFERENCES steps(hash_id) ON DELETE CASCADE ON UPDATE CASCADE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...