From: | Michael Paquier <michael(at)paquier(dot)xyz> |
---|---|
To: | "tanghy(dot)fnst(at)fujitsu(dot)com" <tanghy(dot)fnst(at)fujitsu(dot)com> |
Cc: | "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>, "houzj(dot)fnst(at)fujitsu(dot)com" <houzj(dot)fnst(at)fujitsu(dot)com> |
Subject: | Re: [BUG]Missing REPLICA IDENTITY check when DROP NOT NULL |
Date: | 2021-11-24 11:28:33 |
Message-ID: | YZ4h4VAbbzL6SChM@paquier.xyz |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Wed, Nov 24, 2021 at 07:04:51AM +0000, tanghy(dot)fnst(at)fujitsu(dot)com wrote:
> create table tbl (a int not null unique);
> alter table tbl replica identity using INDEX tbl_a_key;
> alter table tbl alter column a drop not null;
> insert into tbl values (null);
Oops. Yes, that's obviously not good.
> To solve the above problem, I think it's better to add a check when
> executing ALTER COLUMN DROP NOT NULL,
> and report an error if this column is part of replica identity.
I'd say that you are right to block the operation. I'll try to play a
bit with this stuff tomorrow.
> Attaching a patch that disallow DROP NOT NULL on a column if it's in
> a REPLICA IDENTITY index. Also added a test in it.
if (indexStruct->indkey.values[i] == attnum)
ereport(ERROR,
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
- errmsg("column \"%s\" is in a primary key",
+ errmsg(ngettext("column \"%s\" is in a primary key",
+ "column \"%s\" is in a REPLICA IDENTITY index",
+ indexStruct->indisprimary),
colName)));
Using ngettext() looks incorrect to me here as it is used to get the
plural form of a string, so you'd better make these completely
separated instead.
--
Michael
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2021-11-24 11:36:27 | Re: VS2022: Support Visual Studio 2022 on Windows |
Previous Message | Dagfinn Ilmari Mannsåker | 2021-11-24 10:20:00 | Re: Windows build warnings |