@@ -215,6 +215,8 @@ AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId)
215215Oid fdwId ;
216216Form_pg_foreign_data_wrapper form ;
217217
218+ rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
219+
218220/* Must be a superuser to change a FDW owner */
219221if (!superuser ())
220222ereport (ERROR ,
@@ -231,8 +233,6 @@ AlterForeignDataWrapperOwner(const char *name, Oid newOwnerId)
231233name ),
232234errhint ("The owner of a foreign-data wrapper must be a superuser." )));
233235
234- rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
235-
236236tup = SearchSysCacheCopy1 (FOREIGNDATAWRAPPERNAME ,CStringGetDatum (name ));
237237
238238if (!HeapTupleIsValid (tup ))
@@ -432,6 +432,8 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt)
432432ObjectAddress myself ;
433433ObjectAddress referenced ;
434434
435+ rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
436+
435437/* Must be super user */
436438if (!superuser ())
437439ereport (ERROR ,
@@ -455,8 +457,6 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt)
455457/*
456458 * Insert tuple into pg_foreign_data_wrapper.
457459 */
458- rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
459-
460460memset (values ,0 ,sizeof (values ));
461461memset (nulls , false,sizeof (nulls ));
462462
@@ -545,6 +545,8 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt)
545545Oid fdwhandler ;
546546Oid fdwvalidator ;
547547
548+ rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
549+
548550/* Must be super user */
549551if (!superuser ())
550552ereport (ERROR ,
@@ -635,9 +637,6 @@ AlterForeignDataWrapper(AlterFdwStmt *stmt)
635637}
636638
637639/* Everything looks good - update the tuple */
638-
639- rel = heap_open (ForeignDataWrapperRelationId ,RowExclusiveLock );
640-
641640tp = heap_modify_tuple (tp ,RelationGetDescr (rel ),
642641repl_val ,repl_null ,repl_repl );
643642
@@ -773,6 +772,8 @@ CreateForeignServer(CreateForeignServerStmt *stmt)
773772ObjectAddress referenced ;
774773ForeignDataWrapper * fdw ;
775774
775+ rel = heap_open (ForeignServerRelationId ,RowExclusiveLock );
776+
776777/* For now the owner cannot be specified on create. Use effective user ID. */
777778ownerId = GetUserId ();
778779
@@ -798,8 +799,6 @@ CreateForeignServer(CreateForeignServerStmt *stmt)
798799/*
799800 * Insert tuple into pg_foreign_server.
800801 */
801- rel = heap_open (ForeignServerRelationId ,RowExclusiveLock );
802-
803802memset (values ,0 ,sizeof (values ));
804803memset (nulls , false,sizeof (nulls ));
805804
@@ -880,6 +879,8 @@ AlterForeignServer(AlterForeignServerStmt *stmt)
880879Oid srvId ;
881880Form_pg_foreign_server srvForm ;
882881
882+ rel = heap_open (ForeignServerRelationId ,RowExclusiveLock );
883+
883884tp = SearchSysCacheCopy1 (FOREIGNSERVERNAME ,
884885CStringGetDatum (stmt -> servername ));
885886
@@ -945,9 +946,6 @@ AlterForeignServer(AlterForeignServerStmt *stmt)
945946}
946947
947948/* Everything looks good - update the tuple */
948-
949- rel = heap_open (ForeignServerRelationId ,RowExclusiveLock );
950-
951949tp = heap_modify_tuple (tp ,RelationGetDescr (rel ),
952950repl_val ,repl_null ,repl_repl );
953951
@@ -1068,6 +1066,8 @@ CreateUserMapping(CreateUserMappingStmt *stmt)
10681066ForeignServer * srv ;
10691067ForeignDataWrapper * fdw ;
10701068
1069+ rel = heap_open (UserMappingRelationId ,RowExclusiveLock );
1070+
10711071useId = GetUserOidFromMapping (stmt -> username , false);
10721072
10731073/* Check that the server exists. */
@@ -1093,8 +1093,6 @@ CreateUserMapping(CreateUserMappingStmt *stmt)
10931093/*
10941094 * Insert tuple into pg_user_mapping.
10951095 */
1096- rel = heap_open (UserMappingRelationId ,RowExclusiveLock );
1097-
10981096memset (values ,0 ,sizeof (values ));
10991097memset (nulls , false,sizeof (nulls ));
11001098
@@ -1161,6 +1159,8 @@ AlterUserMapping(AlterUserMappingStmt *stmt)
11611159Oid umId ;
11621160ForeignServer * srv ;
11631161
1162+ rel = heap_open (UserMappingRelationId ,RowExclusiveLock );
1163+
11641164useId = GetUserOidFromMapping (stmt -> username , false);
11651165srv = GetForeignServerByName (stmt -> servername , false);
11661166
@@ -1218,9 +1218,6 @@ AlterUserMapping(AlterUserMappingStmt *stmt)
12181218}
12191219
12201220/* Everything looks good - update the tuple */
1221-
1222- rel = heap_open (UserMappingRelationId ,RowExclusiveLock );
1223-
12241221tp = heap_modify_tuple (tp ,RelationGetDescr (rel ),
12251222repl_val ,repl_null ,repl_repl );
12261223
@@ -1344,11 +1341,13 @@ CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid)
13441341ForeignServer * server ;
13451342
13461343/*
1347- * Advance command counter to ensure the pg_attribute tuple visible; the
1348- * tuple might be updated to add constraints in previous step.
1344+ * Advance command counter to ensure the pg_attribute tupleis visible;
1345+ *the tuple might be updated to add constraints in previous step.
13491346 */
13501347CommandCounterIncrement ();
13511348
1349+ ftrel = heap_open (ForeignTableRelationId ,RowExclusiveLock );
1350+
13521351/*
13531352 * For now the owner cannot be specified on create. Use effective user ID.
13541353 */
@@ -1368,8 +1367,6 @@ CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid)
13681367/*
13691368 * Insert tuple into pg_foreign_table.
13701369 */
1371- ftrel = heap_open (ForeignTableRelationId ,RowExclusiveLock );
1372-
13731370memset (values ,0 ,sizeof (values ));
13741371memset (nulls , false,sizeof (nulls ));
13751372