From: | Ilya Gladyshev <ilya(dot)v(dot)gladyshev(at)gmail(dot)com> |
---|---|
To: | Alexander Pyhalov <a(dot)pyhalov(at)postgrespro(dot)ru> |
Cc: | Justin Pryzby <pryzby(at)telsasoft(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org, Masahiko Sawada <sawada(dot)mshk(at)gmail(dot)com>, Michael Paquier <michael(at)paquier(dot)xyz>, 李杰(慎追) <adger(dot)lj(at)alibaba-inc(dot)com> |
Subject: | Re: CREATE INDEX CONCURRENTLY on partitioned index |
Date: | 2024-06-15 18:56:38 |
Message-ID: | 55cfae76-2ffa-43ed-a7e7-901bffbebee4@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 28.05.2024 07:05, Alexander Pyhalov wrote:
> Ilya Gladyshev писал(а) 2024-05-28 02:52:
>
>>> Also I'd like to note that in new patch version there's a strange
>>> wording in documentation:
>>>
>>> "This can be very convenient as not only will all existing
>>> partitions be
>>> indexed, but any future partitions will be as well.
>>> <command>CREATE INDEX ... CONCURRENTLY</command> can incur long
>>> lock times
>>> on huge partitioned tables, to avoid that you can
>>> use <command>CREATE INDEX ON ONLY</command> the partitioned table,
>>> which
>>> creates the new index marked as invalid, preventing automatic
>>> application
>>> to existing partitions."
>>>
>>> All the point of CIC is to avoid long lock times. So it seems this
>>> paragraph should be rewritten in the following way:
>>>
>>> "To avoid long lock times, you can use CREATE INDEX CONCURRENTLY or
>>> CREATE INDEX ON ONLY</command> the partitioned table..."
>>
>>
>> True, the current wording doesn't look right. Right now CREATE INDEX
>> ON ONLY is described as a workaround for the missing CIC. I think it
>> rather makes sense to say that it gives more fine-grained control of
>> partition locking than both CIC and ordinary CREATE INDEX. See the
>> updated patch.
>
> Hi.
>
> Not sure if it's worth removing mentioning of CIC in
>
> creates the new index marked as invalid, preventing automatic
> application
> to existing partitions. Instead, indexes can then be created
> individually
> - on each partition using <literal>CONCURRENTLY</literal> and
> + on each partition and
> <firstterm>attached</firstterm> to the partitioned index on the
> parent
> using <command>ALTER INDEX ... ATTACH PARTITION</command>. Once
> indexes for
> all the partitions are attached to the parent index, the parent
> index will
>
> but at least now it looks better.
The current patch version locks all the partitions in the first
transaction up until each of them is built, which makes for long lock
times for partitions that are built last. Having looked at the
implementation of REINDEX CONCURRENTLY for partitioned tables, I think
we can improve this by using the same approach of just skipping the
relations that we find out are dropped when trying to lock them.
Incidentally, this implementation in the new patch version is also simpler.
In addition, I noticed that progress tracking is once again broken for
partitioned tables, while looking at REINDEX implementation, attaching
the second patch to fix it.
Attachment | Content-Type | Size |
---|---|---|
v4-0002-Fix-progress-report-for-partitioned-REINDEX.patch | text/x-patch | 7.3 KB |
v4-0001-Allow-CREATE-INDEX-CONCURRENTLY-on-partitioned-ta.patch | text/x-patch | 20.8 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Justin Pryzby | 2024-06-15 19:40:00 | Re: CREATE INDEX CONCURRENTLY on partitioned index |
Previous Message | Tom Lane | 2024-06-15 18:40:58 | Re: DROP OWNED BY fails to clean out pg_init_privs grants |