Commit e3e66d8a authored by Tom Lane's avatar Tom Lane

Band-aid fix for incorrect use of view options as StdRdOptions.

We really ought to make StdRdOptions and the other decoded forms of
reloptions self-identifying, but for the moment, assume that only plain
relations could possibly be user_catalog_tables.  Fixes problem with bogus
"ON CONFLICT is not supported on table ... used as a catalog table" error
when target is a view with cascade option.

Discussion: <26681.1477940227@sss.pgh.pa.us>
parent c59f94e8
......@@ -270,7 +270,8 @@ typedef struct StdRdOptions
* from the pov of logical decoding. Note multiple eval of argument!
*/
#define RelationIsUsedAsCatalogTable(relation) \
((relation)->rd_options ? \
((relation)->rd_rel->relkind == RELKIND_RELATION && \
(relation)->rd_options ? \
((StdRdOptions *) (relation)->rd_options)->user_catalog_table : false)
/*
......
......@@ -471,6 +471,30 @@ on conflict (b) where coalesce(a, 1) > 0 do nothing;
insert into insertconflict values (1, 2)
on conflict (b) where coalesce(a, 1) > 1 do nothing;
drop table insertconflict;
--
-- test insertion through view
--
create table insertconflict (f1 int primary key, f2 text);
create view insertconflictv as
select * from insertconflict with cascaded check option;
insert into insertconflictv values (1,'foo')
on conflict (f1) do update set f2 = excluded.f2;
select * from insertconflict;
f1 | f2
----+-----
1 | foo
(1 row)
insert into insertconflictv values (1,'bar')
on conflict (f1) do update set f2 = excluded.f2;
select * from insertconflict;
f1 | f2
----+-----
1 | bar
(1 row)
drop view insertconflictv;
drop table insertconflict;
-- ******************************************************************
-- * *
-- * Test inheritance (example taken from tutorial) *
......
......@@ -283,6 +283,24 @@ on conflict (b) where coalesce(a, 1) > 1 do nothing;
drop table insertconflict;
--
-- test insertion through view
--
create table insertconflict (f1 int primary key, f2 text);
create view insertconflictv as
select * from insertconflict with cascaded check option;
insert into insertconflictv values (1,'foo')
on conflict (f1) do update set f2 = excluded.f2;
select * from insertconflict;
insert into insertconflictv values (1,'bar')
on conflict (f1) do update set f2 = excluded.f2;
select * from insertconflict;
drop view insertconflictv;
drop table insertconflict;
-- ******************************************************************
-- * *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment