Re: Restore replication settings when modifying a field type

Quan Zongliang <quanzongliang@foxmail.com>

From: Quan Zongliang <quanzongliang@foxmail.com>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Euler Taveira <euler@timbira.com.br>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-02-10T23:38:48Z
Lists: pgsql-hackers

Attachments

On 2020/1/15 08:30, Quan Zongliang wrote:
> On 2020/1/3 17:14, Peter Eisentraut wrote:
>> On 2019-11-01 04:39, Euler Taveira wrote:
>>> ATExecAlterColumnType records everything that depends on the column
>>> and for indexes it saves the definition (via pg_get_indexdef_string).
>>> Definition is not sufficient for reconstructing the replica identity
>>> information because there is not such keyword for replica identity in
>>> CREATE INDEX. The new index should call relation_mark_replica_identity
>>> to fix pg_index.indisreplident.
>>
>> Yeah, I don't think we need to do the full dance of reverse compiling 
>> the SQL command and reexecuting it, as the patch currently does.  
>> That's only necessary for rebuilding the index itself.  For re-setting 
>> the replica identity, we can just use the internal API as you say.
>>
>> Also, a few test cases would be nice for this patch.
>>
> 
> I'm a little busy. I'll write a new patch in a few days.

new patch attached.


test case 1:
create table t1 (col1 int,col2 int not null,
   col3 int not null,unique(col2,col3));
alter table t1 replica identity using index t1_col2_col3_key;
alter table t1 alter col3 type text;
alter table t1 alter col3 type smallint using col3::int;

test case 2:
create table t2 (col1 varchar(10), col2 text not null,
   col3 timestamp not null,unique(col2,col3),
   col4 int not null unique);
alter table t2 replica identity using index t2_col2_col3_key;
alter table t2 alter col3 type text;
alter table t2 replica identity using index t2_col4_key;
alter table t2 alter col4 type timestamp using '2020-02-11'::timestamp;

Commits

  1. Preserve replica identity index across ALTER TABLE rewrite

  2. Prevent reindex of invalid indexes on TOAST tables