diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c
index 1ef76d092859311abdc28afe7992e6783e25e72a..dabaea991096998c78d61653569c59c30546bd24 100644
--- a/src/backend/executor/nodeModifyTable.c
+++ b/src/backend/executor/nodeModifyTable.c
@@ -1678,7 +1678,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags)
 
 		/* create target slot for UPDATE SET projection */
 		tupDesc = ExecTypeFromTL((List *) node->onConflictSet,
-								 false);
+						 resultRelInfo->ri_RelationDesc->rd_rel->relhasoids);
 		mtstate->mt_conflproj = ExecInitExtraTupleSlot(mtstate->ps.state);
 		ExecSetSlotDescriptor(mtstate->mt_conflproj, tupDesc);
 
diff --git a/src/test/regress/expected/insert_conflict.out b/src/test/regress/expected/insert_conflict.out
index 09b67db43c186ead376ee49c46007d251bc66129..1399f3c796224da54962189dc24d075e4a62e1ac 100644
--- a/src/test/regress/expected/insert_conflict.out
+++ b/src/test/regress/expected/insert_conflict.out
@@ -507,3 +507,62 @@ insert into excluded values(1, '2') on conflict (key) do update set data = 3 RET
 
 -- clean up
 drop table excluded;
+-- Check tables w/o oids are handled correctly
+create table testoids(key int primary key, data text) without oids;
+-- first without oids
+insert into testoids values(1, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   1 | 1
+(1 row)
+
+insert into testoids values(1, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   1 | 2
+(1 row)
+
+-- add oids
+alter table testoids set with oids;
+-- update existing row, that didn't have an oid
+insert into testoids values(1, '3') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   1 | 3
+(1 row)
+
+-- insert a new row
+insert into testoids values(2, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   2 | 1
+(1 row)
+
+-- and update it
+insert into testoids values(2, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   2 | 2
+(1 row)
+
+-- remove oids again, test
+alter table testoids set without oids;
+insert into testoids values(1, '4') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   1 | 4
+(1 row)
+
+insert into testoids values(3, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   3 | 1
+(1 row)
+
+insert into testoids values(3, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+ key | data 
+-----+------
+   3 | 2
+(1 row)
+
+DROP TABLE testoids;
diff --git a/src/test/regress/sql/insert_conflict.sql b/src/test/regress/sql/insert_conflict.sql
index e981e67fd27b922a572b04ed238e279918048799..efa902ec121c5483a417a020c7717ff865b5ac75 100644
--- a/src/test/regress/sql/insert_conflict.sql
+++ b/src/test/regress/sql/insert_conflict.sql
@@ -295,3 +295,25 @@ insert into excluded values(1, '2') on conflict (key) do update set data = 3 RET
 
 -- clean up
 drop table excluded;
+
+
+-- Check tables w/o oids are handled correctly
+create table testoids(key int primary key, data text) without oids;
+-- first without oids
+insert into testoids values(1, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+insert into testoids values(1, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+-- add oids
+alter table testoids set with oids;
+-- update existing row, that didn't have an oid
+insert into testoids values(1, '3') on conflict (key) do update set data = excluded.data RETURNING *;
+-- insert a new row
+insert into testoids values(2, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+-- and update it
+insert into testoids values(2, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+-- remove oids again, test
+alter table testoids set without oids;
+insert into testoids values(1, '4') on conflict (key) do update set data = excluded.data RETURNING *;
+insert into testoids values(3, '1') on conflict (key) do update set data = excluded.data RETURNING *;
+insert into testoids values(3, '2') on conflict (key) do update set data = excluded.data RETURNING *;
+
+DROP TABLE testoids;