Re: Odd behavior of updatable security barrier views on foreign tables

From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>
Cc: "pgsql-hackers(at)postgresql(dot)org >> PostgreSQL-development" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Odd behavior of updatable security barrier views on foreign tables
Date: 2015-02-02 16:48:35
Message-ID: CA+Tgmob-T4mX=URj8h3oYupLe_SNdTv2efR2uP72Uyhg1b5sDA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jan 30, 2015 at 5:20 AM, Etsuro Fujita
<fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp> wrote:
> I noticed that when updating security barrier views on foreign tables,
> we fail to give FOR UPDATE to selection queries issued at ForeignScan.
> Here is an example.
>
> postgres=# create foreign table base_ftbl (person text, visibility text)
> server loopback options (table_name 'base_tbl');
> CREATE FOREIGN TABLE
> postgres=# create view rw_view as select person from base_ftbl where
> visibility = 'public';
> CREATE VIEW
> postgres=# explain verbose delete from rw_view;
> QUERY PLAN
> -------------------------------------------------------------------------------------------------------
> Delete on public.base_ftbl (cost=100.00..144.40 rows=14 width=6)
> Remote SQL: DELETE FROM public.base_tbl WHERE ctid = $1
> -> Foreign Scan on public.base_ftbl (cost=100.00..144.40 rows=14
> width=6)
> Output: base_ftbl.ctid
> Remote SQL: SELECT ctid FROM public.base_tbl WHERE ((visibility
> = 'public'::text)) FOR UPDATE
> (5 rows)
>
> postgres=# alter view rw_view set (security_barrier = true);
> ALTER VIEW
> postgres=# explain verbose delete from rw_view;
> QUERY PLAN
> --------------------------------------------------------------------------------------------------
> Delete on public.base_ftbl base_ftbl_1 (cost=100.00..144.54 rows=14
> width=6)
> Remote SQL: DELETE FROM public.base_tbl WHERE ctid = $1
> -> Subquery Scan on base_ftbl (cost=100.00..144.54 rows=14 width=6)
> Output: base_ftbl.ctid
> -> Foreign Scan on public.base_ftbl base_ftbl_2
> (cost=100.00..144.40 rows=14 width=6)
> Output: base_ftbl_2.ctid
> Remote SQL: SELECT ctid FROM public.base_tbl WHERE
> ((visibility = 'public'::text))
> (7 rows)
>
> Correct me if I am wrong.

That looks like a bug to me.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Heikki Linnakangas 2015-02-02 17:36:19 Re: Problems with approach #2 to value locking (INSERT ... ON CONFLICT UPDATE/IGNORE patch)
Previous Message Heikki Linnakangas 2015-02-02 16:43:41 Re: INSERT ... ON CONFLICT {UPDATE | IGNORE} 2.0