@@ -225,6 +225,12 @@ static void
225
225
AlterForeignDataWrapperOwner_internal (Relation rel , HeapTuple tup , Oid newOwnerId )
226
226
{
227
227
Form_pg_foreign_data_wrapper form ;
228
+ Datum repl_val [Natts_pg_foreign_data_wrapper ];
229
+ bool repl_null [Natts_pg_foreign_data_wrapper ];
230
+ bool repl_repl [Natts_pg_foreign_data_wrapper ];
231
+ Acl * newAcl ;
232
+ Datum aclDatum ;
233
+ bool isNull ;
228
234
229
235
form = (Form_pg_foreign_data_wrapper ) GETSTRUCT (tup );
230
236
@@ -246,7 +252,27 @@ AlterForeignDataWrapperOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerI
246
252
247
253
if (form -> fdwowner != newOwnerId )
248
254
{
249
- form -> fdwowner = newOwnerId ;
255
+ memset (repl_null , false, sizeof (repl_null ));
256
+ memset (repl_repl , false, sizeof (repl_repl ));
257
+
258
+ repl_repl [Anum_pg_foreign_data_wrapper_fdwowner - 1 ] = true;
259
+ repl_val [Anum_pg_foreign_data_wrapper_fdwowner - 1 ] = ObjectIdGetDatum (newOwnerId );
260
+
261
+ aclDatum = heap_getattr (tup ,
262
+ Anum_pg_foreign_data_wrapper_fdwacl ,
263
+ RelationGetDescr (rel ),
264
+ & isNull );
265
+ /* Null ACLs do not require changes */
266
+ if (!isNull )
267
+ {
268
+ newAcl = aclnewowner (DatumGetAclP (aclDatum ),
269
+ form -> fdwowner , newOwnerId );
270
+ repl_repl [Anum_pg_foreign_data_wrapper_fdwacl - 1 ] = true;
271
+ repl_val [Anum_pg_foreign_data_wrapper_fdwacl - 1 ] = PointerGetDatum (newAcl );
272
+ }
273
+
274
+ tup = heap_modify_tuple (tup , RelationGetDescr (rel ), repl_val , repl_null ,
275
+ repl_repl );
250
276
251
277
simple_heap_update (rel , & tup -> t_self , tup );
252
278
CatalogUpdateIndexes (rel , tup );
@@ -327,6 +353,12 @@ static void
327
353
AlterForeignServerOwner_internal (Relation rel , HeapTuple tup , Oid newOwnerId )
328
354
{
329
355
Form_pg_foreign_server form ;
356
+ Datum repl_val [Natts_pg_foreign_server ];
357
+ bool repl_null [Natts_pg_foreign_server ];
358
+ bool repl_repl [Natts_pg_foreign_server ];
359
+ Acl * newAcl ;
360
+ Datum aclDatum ;
361
+ bool isNull ;
330
362
331
363
form = (Form_pg_foreign_server ) GETSTRUCT (tup );
332
364
@@ -358,7 +390,27 @@ AlterForeignServerOwner_internal(Relation rel, HeapTuple tup, Oid newOwnerId)
358
390
}
359
391
}
360
392
361
- form -> srvowner = newOwnerId ;
393
+ memset (repl_null , false, sizeof (repl_null ));
394
+ memset (repl_repl , false, sizeof (repl_repl ));
395
+
396
+ repl_repl [Anum_pg_foreign_server_srvowner - 1 ] = true;
397
+ repl_val [Anum_pg_foreign_server_srvowner - 1 ] = ObjectIdGetDatum (newOwnerId );
398
+
399
+ aclDatum = heap_getattr (tup ,
400
+ Anum_pg_foreign_server_srvacl ,
401
+ RelationGetDescr (rel ),
402
+ & isNull );
403
+ /* Null ACLs do not require changes */
404
+ if (!isNull )
405
+ {
406
+ newAcl = aclnewowner (DatumGetAclP (aclDatum ),
407
+ form -> srvowner , newOwnerId );
408
+ repl_repl [Anum_pg_foreign_server_srvacl - 1 ] = true;
409
+ repl_val [Anum_pg_foreign_server_srvacl - 1 ] = PointerGetDatum (newAcl );
410
+ }
411
+
412
+ tup = heap_modify_tuple (tup , RelationGetDescr (rel ), repl_val , repl_null ,
413
+ repl_repl );
362
414
363
415
simple_heap_update (rel , & tup -> t_self , tup );
364
416
CatalogUpdateIndexes (rel , tup );
0 commit comments