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
* Re: More weird compiler warnings @ 2023-03-16 18:31 Tom Lane <[email protected]> 0 siblings, 1 reply; 3+ messages in thread From: Tom Lane @ 2023-03-16 18:31 UTC (permalink / raw) To: Andres Freund <[email protected]>; +Cc: [email protected] Andres Freund <[email protected]> writes: > On 2022-03-26 13:55:49 -0700, Andres Freund wrote: >> On 2022-03-26 16:23:26 -0400, Tom Lane wrote: >>> but I'm wondering if we could silence the warning by changing the loop condition to >>> while (--nb >= 0) >>> which seems like it might be marginally more readable anyway. >> Yes, that looks like it silences it. I modified the small reproducer I had in >> that bug (https://godbolt.org/z/ejK9h6von) and the warning vanishes. > The recent discussion about warnings reminded me of this. Given the gcc bug > hasn't been fixed, I think we should make that change. I'd vote for > backpatching it as well - what do you think? +1, can't hurt anything AFAICS. regards, tom lane ^ permalink raw reply [nested|flat] 3+ messages in thread
* Re: More weird compiler warnings @ 2023-03-16 21:53 Andres Freund <[email protected]> parent: Tom Lane <[email protected]> 0 siblings, 0 replies; 3+ messages in thread From: Andres Freund @ 2023-03-16 21:53 UTC (permalink / raw) To: Tom Lane <[email protected]>; +Cc: [email protected] On 2023-03-16 14:31:37 -0400, Tom Lane wrote: > Andres Freund <[email protected]> writes: > > On 2022-03-26 13:55:49 -0700, Andres Freund wrote: > >> On 2022-03-26 16:23:26 -0400, Tom Lane wrote: > >>> but I'm wondering if we could silence the warning by changing the loop condition to > >>> while (--nb >= 0) > >>> which seems like it might be marginally more readable anyway. > > >> Yes, that looks like it silences it. I modified the small reproducer I had in > >> that bug (https://godbolt.org/z/ejK9h6von) and the warning vanishes. > > > The recent discussion about warnings reminded me of this. Given the gcc bug > > hasn't been fixed, I think we should make that change. I'd vote for > > backpatching it as well - what do you think? > > +1, can't hurt anything AFAICS. Done. ^ permalink raw reply [nested|flat] 3+ messages in thread
end of thread, other threads:[~2023-03-16 21:53 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]> 2023-03-16 18:31 Re: More weird compiler warnings Tom Lane <[email protected]> 2023-03-16 21:53 ` Re: More weird compiler warnings Andres Freund <[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