Использует ли PostgreSQL идентификатор автоинкремента на основе записи UPDATE, которая была вставлена ​​с явным объявлением PK? - PullRequest
0 голосов
/ 25 января 2019

Явное объявление PK во вставках: можно ли вставить значение автоинкремента, обновив эти записи?

Вопрос, без сомнения, говорит сам за себя. У меня есть начальные данные с явным объявлением идентификатора (PK), поэтому Postgres не понимает, что у меня уже есть, например. id 1 и 2. Могу ли я обновить эти записи, изменяя, например, свойство name, чтобы Postgres понимал, что id 1 и 2 уже есть в таблице, и он начинается с 3? Если нет, то какой еще хороший способ сделать это, но только через код ядра Cnet .net с подходом «сначала код» с миграциями?

UPDATE
Попробовав некоторые вещи, я решил отказаться от явных объявлений id в seed, в конце концов было легче изменить это и идентифицировать записи другим способом, чем по идентификаторам, которые позволили Postgres мгновенно работать нормально.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

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

Для этого выясните, какая последовательность поддерживает столбец автоинкремента.Будет полезна команда psql \d.

Затем добавьте текущее значение в что-то вроде

ALTER SEQUENCE seq_name RESTART 123456;
0 голосов
/ 25 января 2019

Несмотря на то, что допустимо принудительно устанавливать значение для ключа, автоматически сгенерированного с помощью последовательности, это создаст больше проблем, чем решит.

Решение 1, попросите базу данных сообщить вам используемый идентификатор:
INSERT INTO Mytable(<place field list, excluding id>) VALUES (<place field values>) RETURNING id

Таким образом, вы узнаете, какой идентификатор был использован.

Решение 2 (ближе к тому, что вы хотите, но я не очень рекомендую), форсировать последовательностьпринять новое значение:
SELECT setval('<your sequence name>', 3, true);

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