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

Прямо беда.
Было и на предыдущих версиях, но в данный момент последняя доступная из ветки 9.3.
Суть в следующем. Есть таблица (без триггеров, внешних ключей и правил). На таблицу наложено уникальное ограничение (по одному полю, но в других проблемных таблицах было по нескольким).
Время от времени (раз в несколько недель) в таблицах внезапно обнаруживаются дублирующиеся строки, которые не должны были там оказаться в силу наличия уникального ограничения.
Причём есть основания полагать, про происходит это именно при вставке записи, т.к. к одному из полей привязан sequence, и он в дубликатах "свежий", т.е. именно при вставке записи как будто пробивается ограничение.
Сталкивался ли кто с чем-то подобным?

DDL:
CREATE TABLE "public"."test" (
"remoteId" int8,
"title" text NOT NULL,
"localId" int4 DEFAULT nextval('"test_localId_seq"'::regclass) NOT NULL,
CONSTRAINT "uniqueRemoteId" UNIQUE ("remoteId")
)
WITH (OIDS=FALSE)
;

Дубликаты, соответственно, в стиле:
15,Название,8
15,Название,259
  • Вопрос задан
  • 3051 просмотр
Пригласить эксперта
Ответы на вопрос 2
TerminusMKB
@TerminusMKB Автор вопроса
Беда (наверное) в том, что репликация отсутствует.
Работа с этой таблицей происходит (на запись) следующим образом.
Раз в минут 10 в неё происходит запись нескольких тысяч значений. Практически все значения в ней уже на момент записи есть, поэтому уникальное ограничение работает каждый раз практически для каждой вставки. И вставок таких за раз происходит тысячи две.
Если бы у нас отваливались триггеры (по идее) дубликатов было бы по количеству вставок, т.к., мягко говоря, много. А их, скажем, 2 строчки в неделю :)
Попробую подождать еще вариантов, а пока сделаю фиктивную нерабочую таблицу с ограничением и буду круглосуточно туда пытаться фигачить дубликаты.
Ответ написан
@Timosha
нарывался пару раз
в одном случае возникло из-за некорректного завершения работы базы, переносил индексы из одного tablespace в другой, кончилось место в xlog, база скрэшилась, после не стартовала, пришлось делать pg_xlogreset (или как там эта утилитка называется), индексы побились немного и ограничение уникальности не всегда стало срабатывать
а в другом случае обнаружил случайно, списал на какие-то изменения в минорных версиях postgresql, либо битые индексы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы