Re: Method to pass data between queries in a multi-statement transaction

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Souvik Bhattacherjee <kivuosb(at)gmail(dot)com>
Cc: Michel Pelletier <pelletier(dot)michel(at)gmail(dot)com>, "pgsql-generallists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Method to pass data between queries in a multi-statement transaction
Date: 2019-04-18 21:34:10
Message-ID: CAKFQuwb9aCB1KyXdZV3Y9aaOexpr8eQMwkTvFjo4F7OQJ+zRjw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Thu, Apr 18, 2019 at 9:03 AM Souvik Bhattacherjee <kivuosb(at)gmail(dot)com>
wrote:

> Thanks Michel.
>
> However this only works if a is an unique attribute in the table that
> would help us to identify tuples that participated in the join. Consider
> the following join:
>
> insert into table3 (id, level, empname, salary)
> (select t0.cid, t0.level, t1.empname, t2.salary from table0 t0, table1
> t1, table2 t2 where t0.cid = t1.cid and t1.pid = t2.pid);
>
> Now if I want to delete those tuples from table2 that satisfied the join
> condition, I need to execute the join again with additional attributes.
>

Or just add pid to table3...

> Also note that based on query plan, i.e. whether table0 and table1 were
> joined first followed by table1 and table2, we have to execute one
> additional join to get the tuples in table2 that satisfied the join
> condition (t1.pid = t2.pid).
>

???

> Getting that information while the query is executed may not be difficult.
> There are other use cases in my application that require me to transfer the
> data from one query to the next within a transaction.
>

There may be some that benefit to some degree but its likely that you can
write the application and queries in such a way to avoid a hard requirement.

Thus, what I'm looking for here is way to store the information and then
> pass that information to the next query efficiently.
>
For example, is it possible to define a struct of my choice, private to the
> current transaction, that would store the data and then pass it around to
> the next query in the transaction without having to materialize that struct
> (or deal with concurrency issues as in the hash table approach mentioned
> earlier) .
>

How much development and maintenance effort are you willing to spend here
to gain what is likely to amount to only a bit of efficiency? Many things
are possible if you are going to modify the server code but why add grief?

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Gavin Flower 2019-04-18 22:58:10 Re: Multicolumn index for single-column queries?
Previous Message Ravi Krishna 2019-04-18 19:12:43 Re: SQL query