У меня есть база данных postgresql, и после перехода на более новую версию и импорта моих старых данных у меня возникла проблема с первичным ключом:
org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint
"browser_link_pkey" Detail: Key (id)=(173) already exists.
Итак, я хотел сбросить свою последовательность, но запустил:
select nextval('browser_link_id_seq')
Также не работает с:
column „browser_link_id_seq“ does not exist
SQL Status:42703
Это SQL для создания таблицы
CREATE TABLE browser_link (
id bigint NOT NULL,
....
);
ALTER TABLE ONLY browser_link
ADD CONSTRAINT browser_link_pkey PRIMARY KEY (id);
Я попытался выбрать последовательную последовательность, но похоже, что ее нет:
postgres=# \connect historify
You are now connected to database "historify" as user "postgres".
historify=# select pg_get_serial_sequence('browser_link', 'id');
pg_get_serial_sequence
------------------------
(1 row)
Я использую postgresql 9.5.3. Кроме того, до тех пор, пока не возникла ошибка, столбец id увеличивался, как и ожидалось, поэтому каким-то образом он работает.
Теперь два моих вопроса:
- почему работает автоинкремент?
- как сбросить счетчик автоинкремента?
select nextval('browser_link_id_seq')
Двойные кавычки предназначены для идентификаторов. (имя последовательности в вызове функции может выглядеть как идентификатор, но на самом деле это строковый литерал) - person joop   schedule 01.07.2016id
. Вы должны изменить столбец, добавив последовательность как значение / выражение по умолчанию. - person joop   schedule 01.07.2016primary key
действительно создает последовательность. - person sveri   schedule 01.07.2016