From: | Alexander Lakhin <exclusion(at)gmail(dot)com> |
---|---|
To: | Michael Paquier <michael(at)paquier(dot)xyz> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #17997: Assert failed in validatePartitionedIndex() when attaching partition index to child of valid index |
Date: | 2023-06-30 04:00:00 |
Message-ID: | 9390b442-5c09-897f-a58c-b73bef7dd88c@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
29.06.2023 13:39, Michael Paquier wrote:
> On Thu, Jun 29, 2023 at 12:00:00PM +0300, Alexander Lakhin wrote:
>> That is, the partition tree is containing no invalid indexes now, but the
>> upper-level indexes in the tree are still invalid.
>> Moreover, I don't know how to make them valid:
>> reindex index parted_isvalid_idx; / reindex index parted_isvalid_tab_1_expr_idx;
>> doesn't affect their flags indisvalid.
>> (Though REINDEX for a top-level index can make leaf indexes valid.)
>> Reattaching parted_isvalid_tab_11 after "update parted_isvalid_tab_11 set b=1"
>> doesn't help either.
> DETACH PARTITION is not possible for indexes, but you should be able
> to get back to a cleaner tree by detaching a partition, dropping an
> index, and re-attaching back the partitions, so as
> validatePartitionedIndex() is able to trigger a refresh of
> indisvalid depending on the state of the tree.
Yeah, I meant DETACH PARTITION for a table. And when I tried the sequence
you have described, I couldn't get a completely valid tree:
alter table parted_isvalid_tab_1 detach partition parted_isvalid_tab_11;
drop index parted_isvalid_idx_11;
update parted_isvalid_tab_11 set b = 1;
alter table parted_isvalid_tab_1 attach partition parted_isvalid_tab_11 for values from (1) to (5);
indexrelid | indisvalid | indrelid | inhparent
--------------------------------+------------+-----------------------+-------------------------------
parted_isvalid_idx | f | parted_isvalid_tab |
parted_isvalid_tab_11_expr_idx | t | parted_isvalid_tab_11 | parted_isvalid_tab_1_expr_idx
parted_isvalid_tab_12_expr_idx | t | parted_isvalid_tab_12 | parted_isvalid_tab_1_expr_idx
parted_isvalid_tab_1_expr_idx | f | parted_isvalid_tab_1 | parted_isvalid_idx
parted_isvalid_tab_2_expr_idx | t | parted_isvalid_tab_2 | parted_isvalid_idx
(5 rows)
The index parted_isvalid_tab_11_expr_idx is created anew and it's valid,
but the higher-level indexes are still invalid.
> Anyway, DefineIndex() and its handling of indisvalid is clearly wrong
> when it comes to multiple partition layers as it forgets that we may
> have to update the parents recursively or we could once again trigger
> the assertion from validatePartitionedIndex(), which would not be a
> good idea.. So my previous patch fixes that, at least.
Yeah, in regard to that, your patch looks good to me.
Thank you!
Best regards,
Alexander
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2023-06-30 05:59:19 | Re: BUG #17997: Assert failed in validatePartitionedIndex() when attaching partition index to child of valid index |
Previous Message | Kyotaro Horiguchi | 2023-06-30 02:50:27 | Re: BUG #18006: recovery_target_action=shutdown triggers automatic recovery on next startup (beyond point in time) |