172 похожих чатов

Добрый день, подскажите, а существует ли возможность появление записей-призраков? У

меня проблема, что в таблицу не инсертится запись duplicate key value violates unique constraint "statistic_pk"
Хотя я проверил, в таблице таких записей с такими ключами нет. Как такое может быть?

24 ответов

20 просмотров

Битый индекс возможно.

Dmitry-Chexkh Автор вопроса
Роман Жарков
Битый индекс возможно.

Это как? И что с этим делать, не подскажите?

Роман Жарков
Битый индекс возможно.

Либо неправильный код на клиенте. В общем — да, при нормальном функцыонировании сервера такое невозможно.

Dmitry Chexkh
Это как? И что с этим делать, не подскажите?

Для начала, проверить. set enable_index_scan on/off Сделать выборку используя индекс и без использования индекса. Сравнить результаты. Ключевое слово explain analyse

Dmitry-Chexkh Автор вопроса
Роман Жарков
Для начала, проверить. set enable_index_scan on/of...

Использова reindex table statistic - не помогло сейчас попробую сделать как вы сказали

Dmitry Chexkh
Это как? И что с этим делать, не подскажите?

Для начала — проверить. Проделать выборку этой записи через indexscan и seqscan, убедиться, что есть расхождение. Затем, если действительно есть — то зависит от того, насколько важны вам данные. Если и фиг с ними — то привести таблицу (основной heap) к правильному состоянию, сделать reindex. Есои важны — остановить систему, сделать дамп, перелить на резервный сервер, проконтролировать цэлостность, потом с первым начать выяснять — нет ли аппаратных проблем или ошыбок конфигурацыи...

Dmitry Chexkh
Использова reindex table statistic - не помогло се...

Сначала надо точно проверить. А то может вы не в той базе проверяете?

В норме такое может быть только в конкурентных транзакциях, по идее. А остальные варианты — какой-то corruption, да. :(

Ilya Anfimov
Для начала — проверить. Проделать выборку этой зап...

> Есои важны — остановить систему, сделать дамп, И выбросить его, если действительно важна корректность данных. ;( Т.е. в таких случаях приходится "признавать" потерю всех данных от последнего корректного состояния, такие дела.

Dmitry-Chexkh Автор вопроса
Ilya Anfimov
Для начала — проверить. Проделать выборку этой зап...

set enable_seqscan = on; Seq Scan on statistic (cost=0.00..145011.93 rows=4031993 width=16) (actual time=0.018..855.330 rows=4031993 loops=1) Planning Time: 0.105 ms Execution Time: 1091.099 ms set enable_seqscan = off; Index Only Scan using statistic_pk on statistic (cost=0.43..175058.44 rows=4031993 width=16) (actual time=0.348..1228.734 rows=4031993 loops=1) Heap Fetches: 340263 Planning Time: 0.165 ms Execution Time: 1480.862 ms Запрос был по ключу explain analyze select loan_id, statistic_date from loans.statistic; Или мне следовало сделать какой-то специфичный запрос?

Dmitry Chexkh
set enable_seqscan = on; Seq Scan on statistic (...

Вам нужно было проверить конкретный дубликат (взяв данные из сообщения об ошибке). Подобное недавно обсуждали, кстати: https://t.me/pgsql/318912

Dmitry Chexkh
set enable_seqscan = on; Seq Scan on statistic (...

Надо ещё выполнить запрос без explain, чтобы результат увидеть. А так всё правильно и если дело в индексе, вы получите разный результат.

Yaroslav Schekin
> Есои важны — остановить систему, сделать дамп, ...

Ну, это просто чушь: обычно если корректность данных важна — то их можно достаточно достоверно сверить на корректность с какими-то резервными источниками. И это обычно дешэвле, чем терять данные с последнего бэкапа (при том, что после его врсстановления его корректность опять, разумеется, придётся проверять).

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Вам нужно было проверить конкретный дубликат (взяв...

У меня же составной индекс, к сожалению, я не знаю точно какое значение у одного из компонентов, но знаю выборку, в которой он присутствует. Я могу составить запрос с loan_id ANY() and statistic_date = конкретное_значение?

Dmitry Chexkh
set enable_seqscan = on; Seq Scan on statistic (...

Тут explain analyze нафиг не нужэн, только explain (чтобы подтвердить правильный метод поиска), и сами результаты — чтобы выяснить, с каким методом проблема.

ну сгруппируйте по pk и посмотрите count'ы большие единицы для каждого ключа (с индекс онли сканом и seq scan'ом соответственно)

Ilya Anfimov
Ну, это просто чушь: обычно если корректность данн...

> Ну, это просто чушь: обычно если корректность данных важна — то их можно достаточно достоверно сверить на корректность с какими-то резервными источниками. Это вопрос мнения — "достаточно достоверно" может вылиться в существенные потери, тем не менее. > И это обычно дешэвле, Смотря в какой области / с какими базами.

Dmitry Chexkh
У меня же составной индекс, к сожалению, я не знаю...

Подождите, Вы же писали: > duplicate key value violates unique constraint "statistic_pk" > Хотя я проверил, в таблице таких записей с такими ключами нет. Как такое может быть? Так что я не совсем понимаю, в чём проблема это сделать. > Я могу составить запрос с loan_id ANY() and statistic_date = конкретное_значение? Да составляйте как угодно — важно выбрать по тем условиям (значениям полей), которые приводят к ошибке.

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Подождите, Вы же писали: > duplicate key value vi...

Как минимум нет ни одной записи на statistic_date = '2020-08-06 00:00:00' Соответственно записей по ключу вообще нет

Yaroslav Schekin
> Ну, это просто чушь: обычно если корректность да...

Ну, это да, стратегии хранения и восстановления могут быть разные.

Dmitry Chexkh
Как минимум нет ни одной записи на statistic_date ...

Вы этого не проверили. Прочитайте то сообщение, которое я ранее цитировал.

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта