Re: Report Postgres Bug - Unlogged table sequence

From: Sindhu S <sindhusanti(at)gmail(dot)com>
To: Zaid Shabbir <zaidshabbir(at)gmail(dot)com>
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: Report Postgres Bug - Unlogged table sequence
Date: 2024-08-20 03:37:18
Message-ID: CALRZP9h+gY8eGusTCjAjFw4_sFntp5DeHy5jMYmC=tL8wvKdtg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hi Zaid,

I had the same error while moving from 15.x to 16.3 in RDS database.

This change in latest 15 and 16 release could be the reason

Make ALTER TABLE ... ADD COLUMN create identity/serial sequences with the
same persistence as their owning tables (Peter Eisentraut)

In local, I tried from 13.15 to 15.7
Here are my commands,

./initdb --locale=C -E UTF-8 $HOMEBREW_PREFIX/var/postgresql(at)13

./pg_ctl -D '/opt/homebrew/var/postgresql(at)13' -l logfile start

psql -h localhost -p 5432 -d postgres

CREATE UNLOGGED TABLE IF NOT EXISTS queue_context
(
queue_name character varying(255) COLLATE pg_catalog."default" NOT
NULL,
correlation_id character varying(32) COLLATE pg_catalog."default" NOT
NULL,
trace_id character varying(32) COLLATE pg_catalog."default" NOT NULL,
span_id character varying(16) COLLATE pg_catalog."default" NOT NULL,
enqueued_at timestamp without time zone NOT NULL,
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1
START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
item_uid uuid NOT NULL,
CONSTRAINT pk_queue_context PRIMARY KEY (id),
CONSTRAINT uk_queue_context_queue_name_item_uuid UNIQUE (queue_name,
item_uid)
);

./pg_ctl stop -D /opt/homebrew/var/postgresql(at)13 -m fast

cd /opt/homebrew/Cellar/postgresql(at)15/15.7/bin

./pg_upgrade --old-datadir /opt/homebrew/var/postgresql(at)13/ --new-datadir
/opt/homebrew/var/postgresql(at)15/ --old-bindir
/opt/homebrew/Cellar/postgresql(at)13/13.15/bin --new-bindir
/opt/homebrew/Cellar/postgresql(at)15/15.7/bin

*failure*
Consult the last few lines of
"/opt/homebrew/var/postgresql(at)15/pg_upgrade_output.d/20240801T072509.333/log/pg_upgrade_dump_13776.log"
for
the probable cause of the failure.

pg_restore: creating TABLE "public.queue_context"
pg_restore: creating SEQUENCE "public.queue_context_id_seq"
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 200; 1259 16384 SEQUENCE queue_context_id_seq
sindhu.selvaraj
pg_restore: error: could not execute query: ERROR: unexpected request for
new relfilenode in binary upgrade mode
Command was:
-- For binary upgrade, must preserve pg_class oids and relfilenodes
SELECT
pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('16384'::pg_catalog.oid);
SELECT
pg_catalog.binary_upgrade_set_next_heap_relfilenode('16384'::pg_catalog.oid);
ALTER TABLE "public"."queue_context" ALTER COLUMN "id" ADD GENERATED BY
DEFAULT AS IDENTITY (
SEQUENCE NAME "public"."queue_context_id_seq"
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1
);
ALTER SEQUENCE "public"."queue_context_id_seq" SET LOGGED;

Regards,
Sindhu

On Mon, 19 Aug 2024, 7:11 pm Zaid Shabbir, <zaidshabbir(at)gmail(dot)com> wrote:

> Hello Sindhu,
>
> Regarding the issue you reported for Unlogged table restore, do you also
> face a similar issue while performing pg_upgrade from 15.x to 16.x.
>
> Can you please explain your scenario like the older postgresql version you
> are using and complete the command for upgradation ?
>
> Thanks & Regards,
> Zaid
>
>
>
>
>
> On Mon, Aug 19, 2024 at 10:48 AM Sindhu S <sindhusanti(at)gmail(dot)com> wrote:
>
>>
>> In 15.7 and 16.3 Release Notes, I found a change to an unlogged table's
>> sequence.
>>
>> Make ALTER TABLE ... ADD COLUMN create identity/serial sequences with the
>> same persistence as their owning tables (Peter Eisentraut)
>>
>> CREATE UNLOGGED TABLE will make any owned sequences be unlogged too.
>> ALTER TABLE missed that consideration, so that an added identity column
>> would have a logged sequence, which seems pointless.
>>
>> Major version upgrade to 15.7 or 16.3 is failing on pg_restore step with
>> following error,
>>
>> pg_restore: creating TABLE "public.X"
>> pg_restore: creating SEQUENCE "public.X_id_seq"
>> pg_restore: while PROCESSING TOC:
>> pg_restore: from TOC entry 200; 1259 <NUMBER> SEQUENCE X_id_seq
>> sindhu.selvaraj
>> pg_restore: error: could not execute query: ERROR: unexpected request
>> for new relfilenode in binary upgrade mode
>> Command was:
>> -- For binary upgrade, must preserve pg_class oids and relfilenodes
>> SELECT
>> pg_catalog.binary_upgrade_set_next_heap_pg_class_oid('<NUMBER>'::pg_catalog.oid);
>> SELECT
>> pg_catalog.binary_upgrade_set_next_heap_relfilenode('<NUMBER>'::pg_catalog.oid);
>> ALTER TABLE "public"."X" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS
>> IDENTITY (
>> SEQUENCE NAME "public"."X_id_seq"
>> START WITH 1
>> INCREMENT BY 1
>> NO MINVALUE
>> NO MAXVALUE
>> CACHE 1
>> );
>> ALTER SEQUENCE "public"."X_id_seq" SET LOGGED;
>>
>> This has been spotted in local postgres installed in MAC as well as in
>> AWS RDS.
>> We had to change the unlogged table to logged and then upgrade.
>> I am reporting this as a bug. Please keep us updated.
>>
>> Regards,
>> Sindhu
>>
>

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Peter Eisentraut 2024-08-20 09:00:21 CREATE CAST allows creation of binary-coercible cast to range over domain
Previous Message Matthew Clark 2024-08-20 00:45:30 server crash on raspberry pi for large queries