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>
* 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)
/*
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) *
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;
+
-- ******************************************************************
-- * *