Re: [Proposal] Global temporary tables

From: Konstantin Knizhnik <k(dot)knizhnik(at)postgrespro(dot)ru>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: Robert Haas <robertmhaas(at)gmail(dot)com>, Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>, 曾文旌(义从) <wenjing(dot)zwj(at)alibaba-inc(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, 蔡松露(子嘉) <zijia(at)taobao(dot)com>, "Cai, Le" <le(dot)cai(at)alibaba-inc(dot)com>, 萧少聪(铁庵) <shaocong(dot)xsc(at)alibaba-inc(dot)com>
Subject: Re: [Proposal] Global temporary tables
Date: 2020-01-30 10:02:18
Message-ID: 71bd8d0f-04a2-bfe7-64d7-eca9b33cbc1f@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 30.01.2020 12:52, Pavel Stehule wrote:
>
>
> čt 30. 1. 2020 v 10:44 odesílatel Konstantin Knizhnik
> <k(dot)knizhnik(at)postgrespro(dot)ru <mailto:k(dot)knizhnik(at)postgrespro(dot)ru>> napsal:
>
>
>
> On 30.01.2020 12:23, Pavel Stehule wrote:
>>
>> Building regular index requires two kinds of lock:
>> 1. You have to lock pg_class to make changes in system catalog.
>> 2. You need to lock heap relation  to pervent concurrent
>> updates while building index.
>>
>> GTT requires 1)  but not 2).
>> Once backend inserts information about new index in system
>> catalog, all other sessions may use it. pg_class lock
>> prevents any race condition here.
>> And building index itself doesn't affect any other backends.
>>
>>
>> It is true. The difference for GTT, so any other sessions have to
>> build index (in your proposal) as extra operation against
>> original plan.
>>
> What is "index"?
> For most parts of Postgres it is just an entry in system catalog.
> And only executor deals with its particular implementation and
> content.
>
> My point is that if we process GTT index metadata in the same way
> as regular index metadata,
> then there will be no differences for the postgres between GTT and
> regular indexes.
> And we can provide the same behavior.
>
>
> There should be a difference - index on regular table is created by
> one process. Same thing is not possible on GTT. So there should be a
> difference every time.

Metadata of GTT index is also created by one process. And actual content
of the index is not interesting for most parts of Postgres.

>
> You can reduce some differences, but minimally me and Robert don't
> feel it well. Starting a building index from routine, that is used for
> reading from buffer doesn't look well. I can accept some stranges, but
> I need to have feeling so it is necessary. I don't think so it is
> necessary in this case.

Sorry, but "don't feel it well", "doesn't look well" looks more
likeliterary criticism rather than code review;)
Yes, I agree that it is unnatural to call btindex from _bt_getbuf. But
what can go wrong here?

--
Konstantin Knizhnik
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Pavel Stehule 2020-01-30 10:10:35 Re: [Proposal] Global temporary tables
Previous Message Thomas Munro 2020-01-30 09:53:38 Shared memory leak on DSM slot exhaustion