Re: CURRENT OF causes an error when IndexOnlyScan is used - Mailing list pgsql-hackers

From Yugo Nagata
Subject Re: CURRENT OF causes an error when IndexOnlyScan is used
Date
Msg-id 20180201014444.f78358df.nagata@sraoss.co.jp
Whole thread Raw
In response to CURRENT OF causes an error when IndexOnlyScan is used  (Yugo Nagata <nagata@sraoss.co.jp>)
Responses Re: CURRENT OF causes an error when IndexOnlyScan is used
List pgsql-hackers
On Thu, 1 Feb 2018 01:33:49 +0900
Yugo Nagata <nagata@sraoss.co.jp> wrote:

I'm sorry the patch attached in the previous mail is broken and
not raises a compile error. I attached the fixed patch.

Regards,

> Hi,
> 
> I found that updating a cursor by using CURRENT OF causes the
> following error when the query is executed by IndexOnlyScan. 
> 
>  ERROR:  cannot extract system attribute from virtual tuple
> 
> IndexOnlyScan returns a virtual tuple that doesn't have system
> column, so we can not get ctid in the same way of other plans.
> However, the error message is not convinient and users would
> not understand why the error occurs.
> 
> Attached is a patch to fix this. By this fix, execCurrentOf
> get ctid from IndexScanDesc->xs_ctup.t_self when the plan is
> IndexOnlyScan, and it works sucessfully without errors.
> 
> 
> Here is the example of the error:
> 
> =======
> postgres=# create table test (i int primary key);
> CREATE TABLE
> postgres=# insert into test values(1);
> INSERT 0 1
> postgres=# set enable_seqscan to off;
> SET
> 
> postgres=# explain select * from test where i = 1;
>                                 QUERY PLAN                                 
> ---------------------------------------------------------------------------
>  Index Only Scan using test_pkey on test  (cost=0.15..8.17 rows=1 width=4)
>    Index Cond: (i = 1)
> (2 rows)
> 
> postgres=# begin;
> BEGIN
> postgres=# declare c cursor for select * from test where i = 1;
> DECLARE CURSOR
> postgres=# fetch from c;
>  i 
> ---
>  1
> (1 row)
> 
> postgres=# update test set i=i+1 where current of c;
> ERROR:  cannot extract system attribute from virtual tuple
> =======
> 
> The patch fixes the error and allows this update successfully.
> 
> Regards,
> 
> -- 
> Yugo Nagata <nagata@sraoss.co.jp>


-- 
Yugo Nagata <nagata@sraoss.co.jp>

Attachment

pgsql-hackers by date:

Previous
From: Yugo Nagata
Date:
Subject: CURRENT OF causes an error when IndexOnlyScan is used
Next
From: Vladimir Borodin
Date:
Subject: Re: [HACKERS] Can ICU be used for a database's default sort order?