Thank you for your answer Jeff.

I have fixed it.

>> What type of index is it?  (I'm now guessing btree, but maybe not)?  Is 
>> there a defined time window during which you know the corruption occurred?  
>> If so, do you still have the server logs from that time window?  The WAL 
>> logs?

Its only btree.
Please tell me which path can I see the logs?

> arcvideo=> \d idx_attend_00
>  Index "public.idx_attend_00"
>  Column |  Type   | Definition 
> --------+---------+------------
>  sid    | integer | sid
> btree, for table "public.attend"
> 
> arcvideo=> \d  index_attend_on_sid_and_lid
> Index "public.index_attend_on_sid_and_lid"
>  Column |  Type   | Definition 
> --------+---------+------------
>  sid    | integer | sid
>  lid    | text    | lid
> unique, btree, for table "public.attend"

If I want to detect the same thing, should I execute REINDEX sometimes?
Do you have any good ideas?

Thanks.
---
http://github.com/yalab

Atsushi YOSHIDA <rudeboy...@gmail.com>
http://twitter.com/yalab inject your heart

> 2015/09/07 7:47、Jeff Janes <jeff.ja...@gmail.com> のメール:
> 
> On Thu, Sep 3, 2015 at 10:55 PM, Atsushi Yoshida <rudeboy...@gmail.com> wrote:
> >> Can you give an "explain (analyze, buffers)"  for each query?  Maybe you 
> >> have a corrupted index, and one query uses the index and the other does 
> >> not.
> 
> 
> >
> >  Index Scan using idx_attend_00 on attend  (cost=0.29..627.20 rows=172 
> > width=12) (actual time=5.158..10.179 rows=5 loops=1)
> >    Index Cond: (sid = 325)
> >    Filter: (lid = ANY ('{ABF0010,ABF0010,ABF0010,ABF0010,ABF0010 ... 
> > ABF0060,ABF0060,ABF0060,ABF0060}'::text[]))
> >    Rows Removed by Filter: 414
>  
> ...
>  
> >
> >  Index Scan using index_attend_on_sid_and_lid on attend  (cost=0.42..36.32 
> > rows=3 width=12) (actual time=0.011..0.034 rows=6 loops=1)
> >    Index Cond: ((sid = 325) AND (lid = ANY 
> > ('{ABF0010,ABF0020,ABF0030,ABF0040,ABF0050,ABF0060}'::text[])))
> >    Buffers: shared hit=24
> 
>  
> Is this result aims idx_attend_00 corrupted?
> How to fix it?
> What countermeasure do I it?
> 
> Yes, almost certainly.  You can fix it by rebuilding the index ("REINDEX 
> INDEX idx_attend_00").  Whether this will completely fix the problem depends 
> on what caused it.  There could be a wider corruption issue of which this is 
> only a symptom.
> 
> If you would like to preserve the ability to investigate the root cause, you 
> should make a full file-level backup of the database *before* doing the 
> re-index.
> 
> What type of index is it?  (I'm now guessing btree, but maybe not)?  Is there 
> a defined time window during which you know the corruption occurred?  If so, 
> do you still have the server logs from that time window?  The WAL logs?
> 
> Do you know if the sometimes-missing tuple actually belongs in the table or 
> not?  It could be that the row was marked deleted from the table, scrubbed 
> from the index, and then inappropriately got "revived" like a zombie in the 
> table, so that the "corrupt" index is correct and it is the table that is 
> wrong.
> 
> And of course, if you are running with fsync=off or full_page_writes=off, 
> don't do that.
> 
> Cheers,
> 
> Jeff



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to