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

Добрый день. Друзья, подскажите пожалуйста. В таблице есть поле, которое

является первичным ключем. Но значения этого поля — не уникальны.
Как такое может быть?

\d таблица
code | integer | | not null | nextval(....)
...
Indexes:
"pbl_base_pkey" PRIMARY KEY, btree (code)

Выборка:
code | count
-------+-------
14284 | 2
14286 | 2
14259 | 2
14265 | 2
14277 | 2
(5 rows)

37 ответов

11 просмотров

Индэкс мог побиться как-то. Впрочем, я бы сначала на запрос посмотрел -- с полным определением таблицы. Мало ли, что вы там устроили.

Денис-Бондарь Автор вопроса
Ilya Anfimov
Индэкс мог побиться как-то. Впрочем, я бы сначала ...

Экспортировал запрос построения этой таблицы. Ничего необычного не нашел. Может быть где-то в переменных есть проблема, которой я не вижу? SET statement_timeout = 0; SET lock_timeout = 0; SET idle_in_transaction_session_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SELECT pg_catalog.set_config('search_path', '', false); SET check_function_bodies = false; SET xmloption = content; SET client_min_messages = warning; SET row_security = off; SET default_tablespace = ''; SET default_with_oids = false;

Денис Бондарь
Экспортировал запрос построения этой таблицы. Ниче...

Можэт и есть, но это куда менее вероятно. Я не спрашывал у вас про запрос построения этой таблицы -- это пока нерелевантно. Я спрашывал про запрос, которым вы те количества получали.

А запрос, которым это было получено, покажете? А то мало ли...

Денис-Бондарь Автор вопроса
Yaroslav Schekin
А запрос, которым это было получено, покажете? А т...

Да вот пытаюсь узнать у разработчика. Утверждает что обычный insert без явного указания code (берется их seq)

Денис Бондарь
Да вот пытаюсь узнать у разработчика. Утверждает ч...

В четвёртый раз поясняем: надо не какие там insert были (чёрт с ними, тем более что результат должэн быть одинаковым при любых инсертах) -- а каким запросом вы эти строчки с количеством получили.

Денис-Бондарь Автор вопроса
Ilya Anfimov
В четвёртый раз поясняем: надо не какие там insert...

Вот сейчас я понимаю, что вообще ничего не понимаю

Денис-Бондарь Автор вопроса
Ilya Anfimov
В четвёртый раз поясняем: надо не какие там insert...

просьбу показать "запрос с полным определением таблицы" я понял изначально как DDL таблицы. неверно понял что нужно было показать

Денис-Бондарь Автор вопроса

Наврерное все таки в запросе там проблема. Спасибо. Натолкнули на мысль ) Хотя, наверное всё же нет. Клиент работает с данными и сложно понять, что происходит. Договорюсь с клиентом, чтобы не трогал пока что данные, если это возможно. А то у меня один и тот же запрос выполняется с разными результатами

Денис Бондарь
screenshot Вот сейчас я понимаю, что вообще ничего не понимаю

Интересно, какая (сходу не видно)? И да, можно показывать тексты запросов с помощью... текста?! ;)

Денис-Бондарь Автор вопроса
Yaroslav Schekin
Интересно, какая (сходу не видно)? И да, можно пок...

select code, count(*) from userside3.pbl_base group by code order by count(*) desc limit 20;

Денис Бондарь
select code, count(*) from userside3.pbl_base grou...

Выполните в сессии следующее: EXPLAIN (ANALYZE) select * from userside3.pbl_base WHERE code = <любой из задублированных кодов>; SET enable_indexscan = off; SET enable_bitmapscan = off; EXPLAIN (ANALYZE) select * from userside3.pbl_base WHERE code = <любой из задублированных кодов>; покажите результаты.

Денис-Бондарь Автор вопроса
Yaroslav Schekin
Выполните в сессии следующее: EXPLAIN (ANALYZE) se...

ПРоблема в том, что эти "двойники" периодически исчезают, а потом снова появляются. Почему это происходит — я не знаю. С клиентом связь через тикет-систему и она не быстрая. Клиент увидит сообщение и ответит на него не моментально. Дождусь когда снова будет по 2 штуки — сделаю

Денис Бондарь
ПРоблема в том, что эти "двойники" периодически ис...

А в чём проблема найти их прямо сейчас, показанным Вами запросом?! Или это были совсем не актуальные данные? Вы понимаете, в чём дело... если это настоящие двойники — у Вас кластер баз битый, и тут нужно не ждать чего-то, а спасать его, пока он совсем не накрылся (если есть backup, проще может быть заменить "железо" и восстановить из него).

Денис-Бондарь Автор вопроса
Yaroslav Schekin
А в чём проблема найти их прямо сейчас, показанным...

В запросе с count() задваиваются постоянно одни и те же code но если выбирать строку с этим code — то она одна всегда, даже когад count() говорит что две причем count() говорит что две только тогда, когда явыбираю без условий по code стоит добавить условие с code = ... сразу же count() говорит что строка одна если выбирать строку (а не count) то она всегда одна сейчас выполню ваши запросы

Денис Бондарь
В запросе с count() задваиваются постоянно одни и ...

да скиньте вы уже запросы, который раз вас просят

Денис-Бондарь Автор вопроса
Yaroslav Schekin
А в чём проблема найти их прямо сейчас, показанным...

сейчас у меня по моему запросу с count() нет ни одного задвоенного code но периодически они появляются при выборке с count() но при выборке строки (а не count) строка всегда одна

Денис-Бондарь Автор вопроса
Сергей Кравчук
да скиньте вы уже запросы, который раз вас просят

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

Денис Бондарь
сейчас в базе нет задвоеных code в чем смысл их вы...

да какая разница, есть или нет вы ЗАПРОС покажите

Денис Бондарь
сейчас в базе нет задвоеных code в чем смысл их вы...

Когда будут, конечно. Но, опять-таки, если Вы всё правильно показали — такого должно не быть. Кстати... а \d+ userside3.pbl_base можете показать?

Денис-Бондарь Автор вопроса
Денис Бондарь
screenshot Вот сейчас я понимаю, что вообще ничего не понимаю

Одно indexscan, другое seqscan небось. Вообще, текст гораздо лучшэ копировать текстом -- но да, на первый взгляд запросы выглядят правильными, так что это похожэ навернулся индэкс. Сочувствую, да. Просто rebuild скорее всего не пройдёт, по причине неконсистентности данных. Постарайтесь как-то удалить лишние, потом rebuild.

Денис-Бондарь Автор вопроса
Сергей Кравчук
да какая разница, есть или нет вы ЗАПРОС покажите

https://pastebin.com/1Qa736bW пожалуйста. если это что-то даст — отлично но в данный момент никаких задвоений нет

Денис Бондарь
я его привел в самом первом сообщении

Нет, не привели! Нужно целиком. И да, мне это уже начинает надоедать — это Ваша проблема или наша?! Кто-то тут обязан из Вас "клещами тянуть" информацию?

Денис-Бондарь Автор вопроса
Yaroslav Schekin
Нет, не привели! Нужно целиком. И да, мне это уже ...

Если что-то нужно — достаточно конкретно попросить. Я не умею догадываться, увы. Сейчас дам полный вывод, если это что-то даст, в чем я не уверен.

Денис Бондарь
screenshot Вот сейчас я понимаю, что вообще ничего не понимаю

А, ещё -- советы про rebuild -- это в предположэнии, что backup у вас есть, в цэлости и сохранности. И, реально, лучшэ некоторое количество бэкапов перевести в архив -- в смысле перестать удалять. На проблемы с диском это тожэ вполне похожэ, да. Хотя могут быть и другие причины, и есть шанс, что мы никогда про них не узнаем.

Денис Бондарь
https://pastebin.com/1Qa736bW пожалуйста. если это...

Ну конечно же, "нет", ага. Сравните: -> Index Only Scan using pbl_base_pkey on pbl_base (cost=0.29..8.31 rows=1 width=0) (actual time=0.077..0.081 rows=1 loops=1) и -> Seq Scan on pbl_base (cost=0.00..6215.06 rows=1 width=0) (actual time=2.046..15.742 rows=2 loops=1) Как Вы думаете, что означает подчёркнутое? Выполните в той же сессии (или ещё раз выполните эти SET-ы в новой) просто select count(*) from userside3.pbl_base where code = 14282; — какой результат?

Денис Бондарь
Если что-то нужно — достаточно конкретно попросить...

> Я не умею догадываться, увы. Так может, если Вы понятия не имеете в чём проблема — стоит прекратить догадываться, какая информация имеет отношение к делу, а какая нет? ;) Нет, ну правда — если кто-то это знает, он и проблему обычно способен найти и решить.

Денис-Бондарь Автор вопроса
Yaroslav Schekin
Ну конечно же, "нет", ага. Сравните: -> Index Onl...

userside=> select count(*) from userside3.pbl_base where code = 14282; count ------- 1 (1 row) userside=> SET enable_indexscan = off; SET userside=> SET enable_bitmapscan = off; SET userside=> select count(*) from userside3.pbl_base where code = 14282; count ------- 2 (1 row)

Денис Бондарь
userside=> select count(*) from userside3.pbl_base...

Да, битая база. :( Рекомендации — см. выше. Ищите причины (скорее всего — диск или настройки OS).

Типичные другие проблемы, например -- это неправильно выключенный рейд с батарейкой (и кэшэм записи) или прерванное на лету восстановление из бэкапа через tar или грохнутый по недоразумению WAL. В общем, есть не один способ случайно попротить базу под линуксом.

Денис-Бондарь Автор вопроса
Ilya Anfimov
Типичные другие проблемы, например -- это неправил...

Ясно спасибо. Передам это клиенту. Надеюсь, ему поможет ваше описание возможных причин разобраться, что произошло. Большое всем откликнувшимся спасибо!

Денис-Бондарь Автор вопроса
Ilya Anfimov
Типичные другие проблемы, например -- это неправил...

скажите, под tar архивом вы имели ввиду восстановление из dump или из sql-скрипта?

Денис Бондарь
скажите, под tar архивом вы имели ввиду восстановл...

Из pg_basebackup. Нет, любыми видами pg_dump такого не достичь.

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта