Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Появляются дублированные строки, несмотря на уникальное ограничение / 11 сообщений из 11, страница 1 из 1
22.05.2014, 12:30:44
    #38648792
Terminus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
День добрый!

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

Наблюдать такое стали после перехода на 9.3.
В данный момент версия: 9.3.4

Что это может быть за беда? Сталкивался ли кто? :)
...
Рейтинг: 0 / 0
22.05.2014, 13:29:09
    #38648942
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
Terminus, похожий глюк описывается при использовании Hot-Standby 1 , http://www.postgresql.org/message-id/flat/0E76EE0A-1740-41B5-88FF-54AA98794532@thebuild.com#0E76EE0A-1740-41B5-88FF-54AA98794532@thebuild.com]2 .
Если сделать дамп с резервного сервера, то можно было получить не совсем корректные данные.
было в версиях 9.3.0, 9.3.1, 9.2.5, 9.1.10, 9.0.14.
...
Рейтинг: 0 / 0
22.05.2014, 13:56:19
    #38649007
Terminus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
Hot_standby отключен
fsync = on
synchronous_commit = off
Репликации нет
...
Рейтинг: 0 / 0
22.05.2014, 20:02:04
    #38649545
этта
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
Terminus,
возможно в триггере before кто-то обрабатывает эксепшн unique_violation, и таки пихает в обработчике левое данное.
пж он такое умеет.
насчет unique_violation не утверждаю. а вот check так на раз протыкался.
...
Рейтинг: 0 / 0
22.05.2014, 22:04:51
    #38649614
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
этта, там какая-то другая штука. Пару раз видел после fsck ... винты сыпались ...
...
Рейтинг: 0 / 0
23.05.2014, 09:22:12
    #38649775
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
Вы бы для полноты картины еще назвали на чем у Вас Postgres крутиться
...
Рейтинг: 0 / 0
23.05.2014, 12:35:40
    #38650100
Terminus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
PostgreSQL работает под Debian 7 64
Триггеров, увы, нет :)
Проблема проявлялась на двух различных физических серверах, так что, скорее всего, с винтами всё нормально.
...
Рейтинг: 0 / 0
27.05.2014, 09:51:18
    #38652773
buddy_ekb
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
TerminusТриггеров, увы, нет :)

А наследования и/или правил?
...
Рейтинг: 0 / 0
27.05.2014, 13:52:14
    #38653251
Terminus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
buddy_ekb,

Есть и такие (с наследованием), но как минимум одна пострадавшая таблица содержит только пару уникальных ключей :)
...
Рейтинг: 0 / 0
27.05.2014, 15:45:44
    #38653487
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
TerminusДень добрый!

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

Наблюдать такое стали после перехода на 9.3.
В данный момент версия: 9.3.4

Что это может быть за беда? Сталкивался ли кто? :)

поврежденные данные с старых времен... могло быть из-за:

Fix WAL replay of locking an already-updated tuple (Andres Freund, Álvaro Herrera)
This error caused updated rows to not be found by index scans, resulting in inconsistent query results depending on whether an index scan was used. Subsequent processing could result in constraint violations, since the previously updated row would not be found by later index searches, thus possibly allowing conflicting rows to be inserted. Since this error is in WAL replay, it would only manifest during crash recovery or on standby servers. The improperly-replayed case most commonly arises when a table row that is referenced by a foreign-key constraint is updated concurrently with creation of a referencing row.

Исправленного в 9.3.4.

Если у вас были падения базы или сервера или жесткие рестарты базы (которые в wal-replay уходили) - могло с тех пор остаться.

Лечить - руками удалить дубликаты. Больше появлятся не будет.
...
Рейтинг: 0 / 0
29.05.2014, 15:39:20
    #38655981
Terminus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Появляются дублированные строки, несмотря на уникальное ограничение
Будем следить, но, если память не изменяет, последний случай был уже на 9.3.4
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Появляются дублированные строки, несмотря на уникальное ограничение / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]