Copying the list this time.

On Tue, Aug 28, 2018 at 7:54 AM Daniel J Peacock <bluedanu...@gmail.com>
wrote:

>
>
> On Mon, Aug 27, 2018 at 7:14 PM David Rowley <david.row...@2ndquadrant.com>
> wrote:
>
>> On 28 August 2018 at 07:50, Daniel J Peacock <bluedanu...@gmail.com>
>> wrote:
>> > I've got an odd situation with a table that has a varchar(255) as the
>> > primary key that is getting key values from an Elasticsearch engine.
>> What
>> > I'm finding is that even though there is a primary key on the table, I
>> am
>> > getting duplicated keys in the data and the constraint is not blocking
>> > these.
>>
>> How do you know they're duplicated?
>>
> I did a create table as select, got the same number of rows , did the
> select <key>, count(*) from <newtable> group  by <key> having count(*) > 1
> and got results.   I then ran select count(*) from
> (select <key field> from <original table> group by <key field>) as tab1;
> and got a different result than select count(*) from <original> table.
>
>>
>> >  When I do a "select <pk_field>,count(*) from <table> group by
>> > <pk_field> having count(*) > 1" I get no results.  Yet, when I search
>> the
>> > table for a value that is like a key I know to be duplicated, I get
>> multiple
>> > results.  When I select from the table where field is equal to the
>> > duplicated field I get one result.  I verified that they are distinct
>> row
>> > with ctid.  I also created a clone of the table with CTAS and then
>> tried to
>> > create a unique index on the id varchar field but that failed with
>> > "duplicate keys found".  I'm stumped as to what could be the problem.
>> > The only thing that I can think of is that the primary key is somehow
>> > corrupt.  I've noticed this behavior on other tables on this database.
>> > What could be causing this sort of problem?
>>
>> If the index is corrupt then you might find that:
>>
>> set enable_indexscan = 0;
>> set enable_indexonlyscan = 0;
>> select <pk_field>,count(*) from <table> group by <pk_field> having
>> count(*) > 1;
>>
>> would return some rows.  You should also verify the above query does
>> use a Seq Scan by performing an EXPLAIN on the query.
>>
>
> I executed the above and it does return rows.  So, it's looking like
> corrupted indexes.  The next question is "How?"
>
>>
>> There are issues that have been fixed in previous releases which could
>> have caused an index to get corrupted in this way, so it's quite
>> useful to know which version of PostgreSQL you're running here and if
>> you've paid attention to the release notes when you've previously
>> upgraded. For example, see [1].
>>
>
> Ack, newbie mistake there.  This was a fresh install of 10.3 via a Docker
> Container image using the base postges image.  The schema was created via a
> Hibernate layer.
>
>
>> [1] https://www.postgresql.org/docs/9.6/static/release-9-6-2.html
>>
>> --
>>  David Rowley                   http://www.2ndQuadrant.com/
>>  PostgreSQL Development, 24x7 Support, Training & Services
>>
>

Reply via email to