Столбец
A serial
содержит последовательность, которой владеет столбец, и значение DEFAULT
, которое получает значение чистой последовательности.
Если вы попытаетесь изменить этот столбец в столбец идентификаторов, вы 'Вы получите сообщение об ошибке, что для столбца уже есть значение по умолчанию.
Теперь вы, должно быть, удалили значение по умолчанию, но не последовательность, которая принадлежит столбцу serial
.Затем, когда вы преобразовали столбец в столбец идентификаторов, была создана вторая последовательность, принадлежащая столбцу.
Теперь, когда вы пытаетесь вставить строку, PostgreSQL пытается найти и использовать последовательность принадлежит столбцу, но их два, поэтому появляется сообщение об ошибке.
Я бы сказал, что это ошибка в PostgreSQL: по моему мнению, он должен был либо изменить существующую последовательность для столбца идентификаторов, либоиз-за ошибки, что столбцу уже принадлежит последовательность, и вы должны ее удалить. Я постараюсь исправить эту ошибку .
Тем временем вы должны вручную удалить последовательность, оставленную позади, из столбца serial
.Запустите следующий запрос:
SELECT d.objid::regclass
FROM pg_depend AS d
JOIN pg_attribute AS a ON d.refobjid = a.attrelid AND
d.refobjsubid = a.attnum
WHERE d.classid = 'pg_class'::regclass
AND d.refclassid = 'pg_class'::regclass
AND d.deptype <> 'i'
AND a.attname = 'patientid'
AND d.refobjid = 'patient'::regclass;
Это должно дать вам имя последовательности, оставленной после столбца serial
.Отбросьте его, и столбец идентификаторов должен вести себя как нужно.