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
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 |