Re: BUG #19013: When creating a table with the "...LIKE...INCLUDING ALL" construct, REPLICA IDENTITY output is wrong

dbman@sqlexec.com <dbman@sqlexec.com>

From: "dbman@sqlexec.com" <dbman@sqlexec.com>
To: "David G. Johnston" <david.g.johnston@gmail.com>
Cc: "pgsql-bugs@lists.postgresql.org" <pgsql-bugs@lists.postgresql.org>
Date: 2025-08-06T15:42:06Z
Lists: pgsql-bugs

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Add the notion of REPLICA IDENTITY for a table.

On 8/6/2025 10:53 AM, David G. Johnston wrote:
> On Wednesday, August 6, 2025, dbman@sqlexec.com <dbman@sqlexec.com> wrote:
>
>     On 8/5/2025 7:01 PM, David G. Johnston wrote:
>>     On Tue, Aug 5, 2025 at 2:43 PM PG Bug reporting form
>>     <noreply@postgresql.org> wrote:
>>
>>         The following bug has been logged on the website:
>>
>>         Bug reference:      19013
>>         Logged by:          Michael Vitale
>>         Email address: dbman@sqlexec.com
>>         PostgreSQL version: 17.5
>>         Operating system:   CentOS 8 Streams
>>         Description:
>>
>>
>>     We don't document that the replica identity attribute of a table
>>     is something that can be copied.  'ALL' only covers those things
>>     which are documented as being copy-able.
>>
>>     David J.
>>
>     I understand your logic about not everything is copy-able, just
>     what is documented, but this is a different case.  I am not
>     complaining that it is not copying the REPLICA IDENTITY, but
>     rather that it is copying it in a WRONG WAY, changing its property
>     from FULL to DEFAULT.  I think that is a reasonable complaint.  If
>     you are going to attempt to copy it erroneously, then I think you
>     should consider that a bug and fix it.  Otherwise, remove it and
>     don't try to copy it. Does that seem reasonable?
>
>
> Reading the docs, if you just perform a create table (no like) you’ll 
> find pg_class.relreplident is set to “d”.  That field is never null.  
> There is no concept of “remove it”.
>
> David J.
>
Good point aboutg the default value for pg_class.relreplident is always 
"d", but maybe it should be "n" which indicates there is no REPLICA 
IDENTITY.  Otherwise the way it is now, whenever there is a REPLICA 
IDENTITY on a table and you use the CREATE LIKE construct, it will 
always overwrite the "f" and "i" values with "d", thereby actually 
changing the state of the REPLICA IDENTITY from FULL or INDEX to 
DEFAULT.  It just seems that something should be done to prevent a 
change to the REPLICA IDENTIY if one exists that is not DEFAULT in the 
source table.  Othewise you have an unintended DDL change consequence to 
this action.  Perhaps add a warning about this in the description for 
CREATE...LIKE in the docs, or even mention it in the section that 
describes REPLICA IDENTITY, or both.

Michael V