Обновите первичные ключи в нескольких таблицах, используя PostgreSQL - PullRequest
0 голосов
/ 15 ноября 2018

У меня 11 таблиц в одной схеме в PostgreSQL.В каждой таблице есть столбец с именем «id», который должен быть уникальным первичным ключом.К сожалению, у некоторых таблиц есть идентификаторы, которые есть в других таблицах.

Как я могу создать новую последовательность и обновить значения идентификаторов всех таблиц полностью уникальными значениями?Нужно ли делать это по одной последовательности и по одной таблице за раз?

Я новичок в SQL, поэтому я не знаю, с чего начать, кроме создания последовательности и обновления одной таблицы.

1 Ответ

0 голосов
/ 15 ноября 2018

Ваш вопрос немного расплывчат, но я предполагаю, что ваши id имеют тип int / bigint.И вы хотите, чтобы эти идентификаторы были глобально уникальными, а не только внутри одной таблицы.

Может быть много вариантов.Это один из самых простых, но, возможно, не самый элегантный способ.Сначала создайте последовательность для предоставленных идентификаторов, например:

CREATE SEQUENCE globally_unique_id;

Затем просто обновите все 11 таблиц, например:

UPDATE table1 SET id = nextval('globally_unique_id');

Использование этой последовательности не даст вамтот же идентификатор для любых строк во всех таблицах.

Если у вас есть ограничения внешнего ключа в других таблицах для столбца 'id', которые не объявлены каскадно при обновлении, у вас большие проблемы.Но это другая история.

Конечно, вам не нужно делать это по таблице.Например, вы можете запросить системные таблицы Postgres для всех таблиц - например, спросили здесь - (или создать массив имен таблиц вручную) и циклические таблицы с идентификатором в каком-то специально созданном запросе или процедуре.

Но, по моему мнению, «только» 11 таблиц могут не стоить того, чтобы их кодировать.С другой стороны, это может быть полезно позже, если вам нужно сделать то же самое снова.

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