Subject: Index (primary key) corrupt?

From: Wim Rouquart <[email-masked]>
Date: Thu, 18 Sep 2025 12:25:38 +0000

Internal

Hello,

When doing a pg_dump of one of our databases one of the tables primary keys doesn't get exported. Pg_dump just skips this index, without any warning whatsoever (verbose mode was used to doublecheck).

When doing a REINDEX the issue is fixed.

As this seems to me to be some form of index corruption, I tried using amcheck (bt_index_check and bt_index_parent_check) to verify for corruption but both resulted with no issues (the index is a btree).

I would expect the corruption to show up when using amcheck, am I hitting some kind of bug here?

Are there any other ways to doublecheck for corruption (without enabling checksum upfront)?

This concerns a PostgreSQL version 15 btw.

Thanks!

Disclaimer <https://www.kbc.com/KBCmailDisclaimer>

---

From: Ron Johnson <[email-masked]>
Date: Thu, 18 Sep 2025 11:50:18 -0400

On Thu, Sep 18, 2025 at 10:58 AM Wim Rouquart <[email-masked]> wrote:

> Hello,
>
>
> When doing a pg_dump of one of our databases one of the tables primary
> keys doesn’t get exported. Pg_dump just skips this index, without any
> warning whatsoever (verbose mode was used to doublecheck).
>
>
>
> As this seems to me to be some form of index corruption, I tried using
> amcheck (bt_index_check and bt_index_parent_check) to verify for corruption
> but both resulted with no issues (the index is a btree).
>
>
>

Does this problem keep happening, or has it only happened once?

> Are there any other ways to doublecheck for corruption (without enabling

pg_checksums is available in PG 15.

> This concerns a PostgreSQL version 15 btw.

Are you at the current patch level?

-- 
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!

---

From: Adrian Klaver <[email-masked]>
Date: Thu, 18 Sep 2025 09:01:18 -0700

> warning whatsoever (verbose mode was used to doublecheck).

What is the complete table definition?

What is the complete pg_dump command being given?

Is the PK definition in the pg_dump file?
    For plain text format can you grep/find it?
    For custom format does:
       pg_restore -s -t <the_table>  <dump_file>
    show it?

How is the dump file being restored?

> amcheck (bt_index_check and bt_index_parent_check) to verify for 
> corruption but both resulted with no issues (the index is a btree).
> 

-- 
Adrian Klaver
[email-masked]

---

From: Wim Rouquart <[email-masked]>
Date: Fri, 19 Sep 2025 09:40:44 +0000

Internal

> What is the complete table definition?

CREATE TABLE bcf_work_type (
        id bigserial NOT NULL,
        aml_score int8 NOT NULL,
        CONSTRAINT idx_376814_primary PRIMARY KEY (id)
);

> What is the complete pg_dump command being given?

pg_dump --verbose -p <xxx> -U <xxx> -d <xxx> > dumpverbose.sql 2> dumpverbose.log

> Is the PK definition in the pg_dump file? For plain text format can you grep/find it?

It is in neither, that’s why I'm sure it doesn't get exported. After a REINDEX statement it is.

>How is the dump file being restored?

As the code to generate the index is not in the dumpfile this seems irrelevant to me.