public inbox for [email protected]help / color / mirror / Atom feed
[PATCH v9 6/8] Invalidate parent index cluster on attach 3+ messages / 3 participants [nested] [flat]
* [PATCH v9 6/8] Invalidate parent index cluster on attach @ 2020-11-06 01:11 Justin Pryzby <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Justin Pryzby @ 2020-11-06 01:11 UTC (permalink / raw) --- src/backend/commands/indexcmds.c | 21 +++++++++++++++++++++ src/test/regress/expected/cluster.out | 14 ++++++++++++++ src/test/regress/sql/cluster.sql | 5 +++++ 3 files changed, 40 insertions(+) diff --git a/src/backend/commands/indexcmds.c b/src/backend/commands/indexcmds.c index 5f8fc2ea16..4485b01b21 100644 --- a/src/backend/commands/indexcmds.c +++ b/src/backend/commands/indexcmds.c @@ -4126,6 +4126,27 @@ IndexSetParentIndex(Relation partitionIdx, Oid parentOid) /* set relispartition correctly on the partition */ update_relispartition(partRelid, OidIsValid(parentOid)); + /* + * If the attached index is not clustered, invalidate cluster mark on + * any parents + */ + if ((OidIsValid(parentOid) && get_index_isclustered(parentOid)) || + get_index_isclustered(partRelid)) + { + Relation indrel; + + /* Make relispartition visible */ + CommandCounterIncrement(); + + indrel = table_open(IndexGetRelation(partRelid, false), + ShareUpdateExclusiveLock); + mark_index_clustered(indrel, + get_index_isclustered(partRelid) ? partRelid : InvalidOid, + true); + table_close(indrel, ShareUpdateExclusiveLock); + + } + if (fix_dependencies) { /* diff --git a/src/test/regress/expected/cluster.out b/src/test/regress/expected/cluster.out index 6cba3cc4f9..e7f0889743 100644 --- a/src/test/regress/expected/cluster.out +++ b/src/test/regress/expected/cluster.out @@ -567,6 +567,20 @@ Indexes: "clstrpart_idx" btree (a) Number of partitions: 3 (Use \d+ to list them.) +-- Check that attaching an unclustered index marks the parent unclustered: +ALTER TABLE clstrpart CLUSTER ON clstrpart_idx; +CREATE TABLE clstrpart5 (LIKE clstrpart INCLUDING INDEXES); +ALTER TABLE clstrpart ATTACH PARTITION clstrpart5 FOR VALUES FROM (40)TO(50); +\d clstrpart + Partitioned table "public.clstrpart" + Column | Type | Collation | Nullable | Default +--------+---------+-----------+----------+--------- + a | integer | | | +Partition key: RANGE (a) +Indexes: + "clstrpart_idx" btree (a) +Number of partitions: 4 (Use \d+ to list them.) + -- Test CLUSTER with external tuplesorting create table clstr_4 as select * from tenk1; create index cluster_sort on clstr_4 (hundred, thousand, tenthous); diff --git a/src/test/regress/sql/cluster.sql b/src/test/regress/sql/cluster.sql index a1d132f288..3c8085c69e 100644 --- a/src/test/regress/sql/cluster.sql +++ b/src/test/regress/sql/cluster.sql @@ -239,6 +239,11 @@ CLUSTER clstrpart1 USING clstrpart1_idx_2; ALTER TABLE clstrpart CLUSTER ON clstrpart_idx; ALTER TABLE clstrpart1 SET WITHOUT CLUSTER; \d clstrpart +-- Check that attaching an unclustered index marks the parent unclustered: +ALTER TABLE clstrpart CLUSTER ON clstrpart_idx; +CREATE TABLE clstrpart5 (LIKE clstrpart INCLUDING INDEXES); +ALTER TABLE clstrpart ATTACH PARTITION clstrpart5 FOR VALUES FROM (40)TO(50); +\d clstrpart -- Test CLUSTER with external tuplesorting -- 2.17.0 --fmvA4kSBHQVZhkR6 Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="v9-0007-Preserve-indisclustered-on-children-of-clustered-.patch" ^ permalink raw reply [nested|flat] 3+ messages in thread
* Disallow altering invalidated replication slots @ 2024-09-09 18:41 Bharath Rupireddy <[email protected]> 0 siblings, 1 reply; 3+ messages in thread From: Bharath Rupireddy @ 2024-09-09 18:41 UTC (permalink / raw) To: PostgreSQL Hackers <[email protected]> Hi, ALTER_REPLICATION_SLOT on invalidated replication slots is unnecessary as there is no way to get the invalidated (logical) slot to work. Please find the patch to add an error in such cases. Relevant discussion is at [1]. Thoughts? [1] https://www.postgresql.org/message-id/CAA4eK1%2Bszcosq0nS109mMSxPWyNT1Q%3DUNYCJgXKYuCceaPS%2BhA%40ma... -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com Attachments: [application/octet-stream] v1-0001-Disallow-altering-invalidated-replication-slots.patch (2.5K, ../../CALj2ACW4fSOMiKjQ3=2NVBMTZRTG8Ujg6jsK9z3EvOtvA4vzKQ@mail.gmail.com/2-v1-0001-Disallow-altering-invalidated-replication-slots.patch) download | inline diff: From 8b2a7e7c629c5d21fdb801739d9661722904dd7e Mon Sep 17 00:00:00 2001 From: Bharath Rupireddy <[email protected]> Date: Mon, 9 Sep 2024 18:25:16 +0000 Subject: [PATCH v1] Disallow altering invalidated replication slots ALTER_REPLICATION_SLOT on invalidated replication slots is unnecessary as there is no way to get the invalidated (logical) slot to work. This commit adds an error. Discussion: https://www.postgresql.org/message-id/CAA4eK1%2Bszcosq0nS109mMSxPWyNT1Q%3DUNYCJgXKYuCceaPS%2BhA%40mail.gmail.com --- src/backend/replication/slot.c | 7 +++++++ src/test/recovery/t/035_standby_logical_decoding.pl | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/src/backend/replication/slot.c b/src/backend/replication/slot.c index 0a03776156..35652d9ad8 100644 --- a/src/backend/replication/slot.c +++ b/src/backend/replication/slot.c @@ -820,6 +820,13 @@ ReplicationSlotAlter(const char *name, const bool *failover, errmsg("cannot use %s with a physical replication slot", "ALTER_REPLICATION_SLOT")); + if (MyReplicationSlot->data.invalidated != RS_INVAL_NONE) + ereport(ERROR, + errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot alter replication slot \"%s\"", name), + errdetail("This replication slot was invalidated due to \"%s\".", + SlotInvalidationCauses[MyReplicationSlot->data.invalidated])); + if (RecoveryInProgress()) { /* diff --git a/src/test/recovery/t/035_standby_logical_decoding.pl b/src/test/recovery/t/035_standby_logical_decoding.pl index 4185b803b2..75ccfca409 100644 --- a/src/test/recovery/t/035_standby_logical_decoding.pl +++ b/src/test/recovery/t/035_standby_logical_decoding.pl @@ -526,6 +526,15 @@ check_for_invalidation('vacuum_full_', 1, 'with vacuum FULL on pg_class'); # Verify reason for conflict is 'rows_removed' in pg_replication_slots check_slots_conflict_reason('vacuum_full_', 'rows_removed'); +# Attempting to alter an invalidated slot should result in an error +($result, $stdout, $stderr) = $node_standby->psql( + 'postgres', + qq[ALTER_REPLICATION_SLOT vacuum_full_inactiveslot (failover);], + replication => 'database'); +ok($stderr =~ /ERROR: cannot alter replication slot "vacuum_full_inactiveslot"/ && + $stderr =~ /DETAIL: This replication slot was invalidated due to "rows_removed"./, + "invalidated slot cannot be altered"); + # Ensure that replication slot stats are not removed after invalidation. is( $node_standby->safe_psql( 'testdb', -- 2.43.0 ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: Disallow altering invalidated replication slots @ 2024-09-10 05:07 shveta malik <[email protected]> parent: Bharath Rupireddy <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: shveta malik @ 2024-09-10 05:07 UTC (permalink / raw) To: Bharath Rupireddy <[email protected]>; +Cc: PostgreSQL Hackers <[email protected]>; shveta malik <[email protected]> On Tue, Sep 10, 2024 at 12:11 AM Bharath Rupireddy <[email protected]> wrote: > > Hi, > > ALTER_REPLICATION_SLOT on invalidated replication slots is unnecessary > as there is no way to get the invalidated (logical) slot to work. > Please find the patch to add an error in such cases. Relevant > discussion is at [1]. > > Thoughts? > +1 on the idea. + errmsg("cannot alter replication slot \"%s\"", name), + errdetail("This replication slot was invalidated due to \"%s\".", Maybe we shall have: "This slot has been invalidated due to ..." This is similar to all other occurrences where such errors are raised, see logical.c for instance. thanks Shveta ^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2024-09-10 05:07 UTC | newest] Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2020-11-06 01:11 [PATCH v9 6/8] Invalidate parent index cluster on attach Justin Pryzby <[email protected]> 2024-09-09 18:41 Disallow altering invalidated replication slots Bharath Rupireddy <[email protected]> 2024-09-10 05:07 ` Re: Disallow altering invalidated replication slots shveta malik <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox