Re: Confusing results with lateral references - Mailing list pgsql-hackers

From Amit Langote
Subject Re: Confusing results with lateral references
Date
Msg-id 56612479.9070503@lab.ntt.co.jp
Whole thread Raw
In response to Re: Confusing results with lateral references  (Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>)
Responses Re: Confusing results with lateral references  (Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>)
List pgsql-hackers
On 2015/12/03 21:26, Ashutosh Bapat wrote:
> Session 1
> postgres=# begin;
> BEGIN
> postgres=# update t1 set val = 2 where val2 = 1;
> UPDATE 1
> 
> Session 2
> postgres=# select * from t1 left join t2 on (t1.val = t2.val) for update of
> t1;
> 
> query waits
> 
> Session 1
> postgres=# commit;
> COMMIT
> 
> 
> Session 2 query returns two rows
> select * from t1 left join t2 on (t1.val = t2.val) for update of t1;
>  val | val2 | val | val2
> -----+------+-----+------
>    2 |    1 |     |
>    2 |    1 |     |
> (2 rows)
> 
> It's confusing to see two rows from left join result when the table really
> has only a single row. Is this behaviour expected?

Maybe it is. Because the other table still has two (1, 1) rows, LockRows's
subplan would still produce two rows in result, no?

Thanks,
Amit





pgsql-hackers by date:

Previous
From: amul sul
Date:
Subject: Re: Passing initially_valid values instead of !skip_validation to StoreRelCheck() in AddRelationNewConstraints()
Next
From: Michael Paquier
Date:
Subject: Re: Re: In-core regression tests for replication, cascading, archiving, PITR, etc.