diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c
index 530a1ae..41de62a 100644
--- a/src/backend/access/common/reloptions.c
+++ b/src/backend/access/common/reloptions.c
@@ -57,6 +57,7 @@ static relopt_bool boolRelOpts[] =
 		{
 			"autovacuum_enabled",
 			"Enables autovacuum in this relation",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		true
@@ -65,6 +66,7 @@ static relopt_bool boolRelOpts[] =
 		{
 			"user_catalog_table",
 			"Declare a table as an additional catalog table, e.g. for the purpose of logical replication",
+			AccessExclusiveLock,
 			RELOPT_KIND_HEAP
 		},
 		false
@@ -73,6 +75,7 @@ static relopt_bool boolRelOpts[] =
 		{
 			"fastupdate",
 			"Enables \"fast update\" feature for this GIN index",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_GIN
 		},
 		true
@@ -81,6 +84,7 @@ static relopt_bool boolRelOpts[] =
 		{
 			"security_barrier",
 			"View acts as a row security barrier",
+			AccessExclusiveLock,
 			RELOPT_KIND_VIEW
 		},
 		false
@@ -95,6 +99,7 @@ static relopt_int intRelOpts[] =
 		{
 			"fillfactor",
 			"Packs table pages only to this percentage",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP
 		},
 		HEAP_DEFAULT_FILLFACTOR, HEAP_MIN_FILLFACTOR, 100
@@ -103,6 +108,7 @@ static relopt_int intRelOpts[] =
 		{
 			"fillfactor",
 			"Packs btree index pages only to this percentage",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_BTREE
 		},
 		BTREE_DEFAULT_FILLFACTOR, BTREE_MIN_FILLFACTOR, 100
@@ -111,6 +117,7 @@ static relopt_int intRelOpts[] =
 		{
 			"fillfactor",
 			"Packs hash index pages only to this percentage",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HASH
 		},
 		HASH_DEFAULT_FILLFACTOR, HASH_MIN_FILLFACTOR, 100
@@ -119,6 +126,7 @@ static relopt_int intRelOpts[] =
 		{
 			"fillfactor",
 			"Packs gist index pages only to this percentage",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_GIST
 		},
 		GIST_DEFAULT_FILLFACTOR, GIST_MIN_FILLFACTOR, 100
@@ -127,6 +135,7 @@ static relopt_int intRelOpts[] =
 		{
 			"fillfactor",
 			"Packs spgist index pages only to this percentage",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_SPGIST
 		},
 		SPGIST_DEFAULT_FILLFACTOR, SPGIST_MIN_FILLFACTOR, 100
@@ -135,6 +144,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_vacuum_threshold",
 			"Minimum number of tuple updates or deletes prior to vacuum",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 0, INT_MAX
@@ -143,6 +153,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_analyze_threshold",
 			"Minimum number of tuple inserts, updates or deletes prior to analyze",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP
 		},
 		-1, 0, INT_MAX
@@ -151,6 +162,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_vacuum_cost_delay",
 			"Vacuum cost delay in milliseconds, for autovacuum",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 0, 100
@@ -159,6 +171,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_vacuum_cost_limit",
 			"Vacuum cost amount available before napping, for autovacuum",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 1, 10000
@@ -167,6 +180,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_freeze_min_age",
 			"Minimum age at which VACUUM should freeze a table row, for autovacuum",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 0, 1000000000
@@ -175,6 +189,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_multixact_freeze_min_age",
 			"Minimum multixact age at which VACUUM should freeze a row multixact's, for autovacuum",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 0, 1000000000
@@ -183,6 +198,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_freeze_max_age",
 			"Age at which to autovacuum a table to prevent transaction ID wraparound",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 100000000, 2000000000
@@ -191,6 +207,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_multixact_freeze_max_age",
 			"Multixact age at which to autovacuum a table to prevent multixact wraparound",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 100000000, 2000000000
@@ -199,6 +216,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_freeze_table_age",
 			"Age at which VACUUM should perform a full table sweep to freeze row versions",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		}, -1, 0, 2000000000
 	},
@@ -206,6 +224,7 @@ static relopt_int intRelOpts[] =
 		{
 			"autovacuum_multixact_freeze_table_age",
 			"Age of multixact at which VACUUM should perform a full table sweep to freeze row versions",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		}, -1, 0, 2000000000
 	},
@@ -220,6 +239,7 @@ static relopt_real realRelOpts[] =
 		{
 			"autovacuum_vacuum_scale_factor",
 			"Number of tuple updates or deletes prior to vacuum as a fraction of reltuples",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP | RELOPT_KIND_TOAST
 		},
 		-1, 0.0, 100.0
@@ -228,6 +248,7 @@ static relopt_real realRelOpts[] =
 		{
 			"autovacuum_analyze_scale_factor",
 			"Number of tuple inserts, updates or deletes prior to analyze as a fraction of reltuples",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_HEAP
 		},
 		-1, 0.0, 100.0
@@ -236,6 +257,7 @@ static relopt_real realRelOpts[] =
 		{
 			"seq_page_cost",
 			"Sets the planner's estimate of the cost of a sequentially fetched disk page.",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_TABLESPACE
 		},
 		-1, 0.0, DBL_MAX
@@ -244,6 +266,7 @@ static relopt_real realRelOpts[] =
 		{
 			"random_page_cost",
 			"Sets the planner's estimate of the cost of a nonsequentially fetched disk page.",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_TABLESPACE
 		},
 		-1, 0.0, DBL_MAX
@@ -252,6 +275,7 @@ static relopt_real realRelOpts[] =
 		{
 			"n_distinct",
 			"Sets the planner's estimate of the number of distinct values appearing in a column (excluding child relations).",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_ATTRIBUTE
 		},
 		0, -1.0, DBL_MAX
@@ -260,6 +284,7 @@ static relopt_real realRelOpts[] =
 		{
 			"n_distinct_inherited",
 			"Sets the planner's estimate of the number of distinct values appearing in a column (including child relations).",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_ATTRIBUTE
 		},
 		0, -1.0, DBL_MAX
@@ -274,6 +299,7 @@ static relopt_string stringRelOpts[] =
 		{
 			"buffering",
 			"Enables buffering build for this GiST index",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_GIST
 		},
 		4,
@@ -285,6 +311,7 @@ static relopt_string stringRelOpts[] =
 		{
 			"check_option",
 			"View has WITH CHECK OPTION defined (local or cascaded).",
+			ShareUpdateExclusiveLock,
 			RELOPT_KIND_VIEW
 		},
 		0,
diff --git a/src/include/access/reloptions.h b/src/include/access/reloptions.h
index a54d563..5c0eff3 100644
--- a/src/include/access/reloptions.h
+++ b/src/include/access/reloptions.h
@@ -22,6 +22,7 @@
 #include "access/htup.h"
 #include "access/tupdesc.h"
 #include "nodes/pg_list.h"
+#include "storage/lock.h"
 
 /* types supported by reloptions */
 typedef enum relopt_type
@@ -60,6 +61,7 @@ typedef struct relopt_gen
 	const char *name;			/* must be first (used as list termination
 								 * marker) */
 	const char *desc;
+	LOCKMODE	lockmode;
 	bits32		kinds;
 	int			namelen;
 	relopt_type type;
