Re: [Proposal] Global temporary tables - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: [Proposal] Global temporary tables
Date
Msg-id CAFj8pRDeZT85kr2HQewQ-W6UnQ68Qdj3V3=qz4C50w1H73ke+Q@mail.gmail.com
Whole thread Raw
In response to Re: [Proposal] Global temporary tables  (Konstantin Knizhnik <k.knizhnik@postgrespro.ru>)
List pgsql-hackers


čt 30. 1. 2020 v 11:02 odesílatel Konstantin Knizhnik <k.knizhnik@postgrespro.ru> napsal:


On 30.01.2020 12:52, Pavel Stehule wrote:


čt 30. 1. 2020 v 10:44 odesílatel Konstantin Knizhnik <k.knizhnik@postgrespro.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 like literary criticism rather than code review;)

The design is subjective. I am sure, so your solution can work, like mine, or any other. But I am not sure, so your solution is good for practical usage.
 
Yes, I agree that it is unnatural to call btindex from _bt_getbuf. But what can go wrong here?

creating index as side effect of table reading. Just the side effect too much big.


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

pgsql-hackers by date:

Previous
From: Konstantin Knizhnik
Date:
Subject: Re: [Proposal] Global temporary tables
Next
From: Maurizio Sambati
Date:
Subject: Re: ERROR: subtransaction logged without previous top-level txn record