| From: | Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp> |
|---|---|
| To: | Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp> |
| Cc: | pgsql-hackers(at)postgresql(dot)org |
| Subject: | Re: CURRENT OF causes an error when IndexOnlyScan is used |
| Date: | 2018-01-31 16:44:44 |
| Message-ID: | 20180201014444.f78358df.nagata@sraoss.co.jp |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Thu, 1 Feb 2018 01:33:49 +0900
Yugo Nagata <nagata(at)sraoss(dot)co(dot)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(at)sraoss(dot)co(dot)jp>
--
Yugo Nagata <nagata(at)sraoss(dot)co(dot)jp>
| Attachment | Content-Type | Size |
|---|---|---|
| current_of_index_only_scan_v2.patch | text/x-diff | 1.9 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Vladimir Borodin | 2018-01-31 16:48:28 | Re: [HACKERS] Can ICU be used for a database's default sort order? |
| Previous Message | Yugo Nagata | 2018-01-31 16:33:49 | CURRENT OF causes an error when IndexOnlyScan is used |