Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2731ce1

Browse files
author
Amit Kapila
committed
Handle no replica identity index case in RelationGetIdentityKeyBitmap.
Commite7eea52 has introduced a new functionRelationGetIdentityKeyBitmap which omits to handle the case where there isno replica identity index on a relation.Author: Mark DilgerReviewed-by: Takamichi Osumi, Amit KapilaDiscussion:https://www.postgresql.org/message-id/4C99A862-69C8-431F-960A-81B1151F1B89@enterprisedb.com
1 parent3499df0 commit2731ce1

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

‎src/backend/utils/cache/relcache.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5266,8 +5266,18 @@ RelationGetIdentityKeyBitmap(Relation relation)
52665266
if (indexoidlist==NIL)
52675267
returnNULL;
52685268

5269-
/* Add referenced attributes to idindexattrs */
5269+
/* Fall out if there is no replica identity index */
5270+
if (!OidIsValid(relation->rd_replidindex))
5271+
returnNULL;
5272+
5273+
/* Look up the description for the replica identity index */
52705274
indexDesc=RelationIdGetRelation(relation->rd_replidindex);
5275+
5276+
if (!RelationIsValid(indexDesc))
5277+
elog(ERROR,"could not open relation with OID %u",
5278+
relation->rd_replidindex);
5279+
5280+
/* Add referenced attributes to idindexattrs */
52715281
for (i=0;i<indexDesc->rd_index->indnatts;i++)
52725282
{
52735283
intattrnum=indexDesc->rd_index->indkey.values[i];

‎src/test/subscription/t/001_rep_changes.pl

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use warnings;
77
use PostgresNode;
88
use TestLib;
9-
use Test::Moretests=>31;
9+
use Test::Moretests=>32;
1010

1111
# Initialize publisher node
1212
my$node_publisher = get_new_node('publisher');
@@ -50,6 +50,10 @@
5050
$node_publisher->safe_psql('postgres',
5151
"ALTER TABLE tab_nothing REPLICA IDENTITY NOTHING");
5252

53+
# Replicate the changes without replica identity index
54+
$node_publisher->safe_psql('postgres',"CREATE TABLE tab_no_replidentity_index(c1 int)");
55+
$node_publisher->safe_psql('postgres',"CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)");
56+
5357
# Setup structure on subscriber
5458
$node_subscriber->safe_psql('postgres',"CREATE TABLE tab_notrep (a int)");
5559
$node_subscriber->safe_psql('postgres',"CREATE TABLE tab_ins (a int)");
@@ -73,13 +77,17 @@
7377
"CREATE TABLE tab_include (a int, b text, CONSTRAINT covering PRIMARY KEY(a) INCLUDE(b))"
7478
);
7579

80+
# replication of the table without replica identity index
81+
$node_subscriber->safe_psql('postgres',"CREATE TABLE tab_no_replidentity_index(c1 int)");
82+
$node_subscriber->safe_psql('postgres',"CREATE INDEX idx_no_replidentity_index ON tab_no_replidentity_index(c1)");
83+
7684
# Setup logical replication
7785
my$publisher_connstr =$node_publisher->connstr .' dbname=postgres';
7886
$node_publisher->safe_psql('postgres',"CREATE PUBLICATION tap_pub");
7987
$node_publisher->safe_psql('postgres',
8088
"CREATE PUBLICATION tap_pub_ins_only WITH (publish = insert)");
8189
$node_publisher->safe_psql('postgres',
82-
"ALTER PUBLICATION tap_pub ADD TABLE tab_rep, tab_full, tab_full2, tab_mixed, tab_include, tab_nothing, tab_full_pk"
90+
"ALTER PUBLICATION tap_pub ADD TABLE tab_rep, tab_full, tab_full2, tab_mixed, tab_include, tab_nothing, tab_full_pk, tab_no_replidentity_index"
8391
);
8492
$node_publisher->safe_psql('postgres',
8593
"ALTER PUBLICATION tap_pub_ins_only ADD TABLE tab_ins");
@@ -129,6 +137,8 @@
129137
"DELETE FROM tab_include WHERE a > 20");
130138
$node_publisher->safe_psql('postgres',"UPDATE tab_include SET a = -a");
131139

140+
$node_publisher->safe_psql('postgres',"INSERT INTO tab_no_replidentity_index VALUES(1)");
141+
132142
$node_publisher->wait_for_catchup('tap_sub');
133143

134144
$result =$node_subscriber->safe_psql('postgres',
@@ -152,6 +162,9 @@
152162
is($result,qq(20|-20|-1),
153163
'check replicated changes with primary key index with included columns');
154164

165+
is($node_subscriber->safe_psql('postgres',q(SELECT c1 FROM tab_no_replidentity_index)),
166+
1,"value replicated to subscriber without replica identity index");
167+
155168
# insert some duplicate rows
156169
$node_publisher->safe_psql('postgres',
157170
"INSERT INTO tab_full SELECT generate_series(1,10)");

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp