mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 05:21:27 +03:00
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>
This commit is contained in:
parent
c59f94e81e
commit
e3e66d8a98
@ -270,7 +270,8 @@ typedef struct StdRdOptions
|
|||||||
* from the pov of logical decoding. Note multiple eval of argument!
|
* from the pov of logical decoding. Note multiple eval of argument!
|
||||||
*/
|
*/
|
||||||
#define RelationIsUsedAsCatalogTable(relation) \
|
#define RelationIsUsedAsCatalogTable(relation) \
|
||||||
((relation)->rd_options ? \
|
((relation)->rd_rel->relkind == RELKIND_RELATION && \
|
||||||
|
(relation)->rd_options ? \
|
||||||
((StdRdOptions *) (relation)->rd_options)->user_catalog_table : false)
|
((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)
|
insert into insertconflict values (1, 2)
|
||||||
on conflict (b) where coalesce(a, 1) > 1 do nothing;
|
on conflict (b) where coalesce(a, 1) > 1 do nothing;
|
||||||
drop table insertconflict;
|
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) *
|
-- * Test inheritance (example taken from tutorial) *
|
||||||
|
@ -283,6 +283,24 @@ on conflict (b) where coalesce(a, 1) > 1 do nothing;
|
|||||||
|
|
||||||
drop table insertconflict;
|
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;
|
||||||
|
|
||||||
|
|
||||||
-- ******************************************************************
|
-- ******************************************************************
|
||||||
-- * *
|
-- * *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user