diff --git a/src/backend/access/transam/commit_ts.c b/src/backend/access/transam/commit_ts.c
index 3316734..13abd0a 100644
--- a/src/backend/access/transam/commit_ts.c
+++ b/src/backend/access/transam/commit_ts.c
@@ -422,8 +422,8 @@ pg_last_committed_xact(PG_FUNCTION_ARGS)
 {
 	TransactionId xid;
 	TimestampTz ts;
-	Datum		values[2];
-	bool		nulls[2];
+	Datum		values[2] = {0};
+	bool		nulls[2] = {false};
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 
@@ -448,10 +448,7 @@ pg_last_committed_xact(PG_FUNCTION_ARGS)
 	else
 	{
 		values[0] = TransactionIdGetDatum(xid);
-		nulls[0] = false;
-
 		values[1] = TimestampTzGetDatum(ts);
-		nulls[1] = false;
 	}
 
 	htup = heap_form_tuple(tupdesc, values, nulls);
diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c
index 546bd43..009d0fb 100644
--- a/src/backend/access/transam/twophase.c
+++ b/src/backend/access/transam/twophase.c
@@ -770,8 +770,8 @@ pg_prepared_xact(PG_FUNCTION_ARGS)
 		GlobalTransaction gxact = &status->array[status->currIdx++];
 		PGPROC	   *proc = &ProcGlobal->allProcs[gxact->pgprocno];
 		PGXACT	   *pgxact = &ProcGlobal->allPgXact[gxact->pgprocno];
-		Datum		values[5];
-		bool		nulls[5];
+		Datum		values[5] = {0};
+		bool		nulls[5] = {false};
 		HeapTuple	tuple;
 		Datum		result;
 
@@ -781,9 +781,6 @@ pg_prepared_xact(PG_FUNCTION_ARGS)
 		/*
 		 * Form tuple with appropriate data.
 		 */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, 0, sizeof(nulls));
-
 		values[0] = TransactionIdGetDatum(pgxact->xid);
 		values[1] = CStringGetTextDatum(gxact->gid);
 		values[2] = TimestampTzGetDatum(gxact->prepared_at);
diff --git a/src/backend/access/transam/xlogfuncs.c b/src/backend/access/transam/xlogfuncs.c
index 8f17988..eccfa58 100644
--- a/src/backend/access/transam/xlogfuncs.c
+++ b/src/backend/access/transam/xlogfuncs.c
@@ -183,8 +183,8 @@ pg_stop_backup_v2(PG_FUNCTION_ARGS)
 	Tuplestorestate *tupstore;
 	MemoryContext per_query_ctx;
 	MemoryContext oldcontext;
-	Datum		values[3];
-	bool		nulls[3];
+	Datum		values[3] = {0};
+	bool		nulls[3] = {false};
 
 	bool		exclusive = PG_GETARG_BOOL(0);
 	bool		waitforarchive = PG_GETARG_BOOL(1);
@@ -216,9 +216,6 @@ pg_stop_backup_v2(PG_FUNCTION_ARGS)
 
 	MemoryContextSwitchTo(oldcontext);
 
-	MemSet(values, 0, sizeof(values));
-	MemSet(nulls, 0, sizeof(nulls));
-
 	if (exclusive)
 	{
 		if (status == SESSION_BACKUP_NON_EXCLUSIVE)
diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index 88ce37c..89fe031 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -1158,9 +1158,9 @@ SetDefaultACL(InternalDefaultACL *iacls)
 	Acl		   *old_acl;
 	Acl		   *new_acl;
 	HeapTuple	newtuple;
-	Datum		values[Natts_pg_default_acl];
-	bool		nulls[Natts_pg_default_acl];
-	bool		replaces[Natts_pg_default_acl];
+	Datum		values[Natts_pg_default_acl] = {0};
+	bool		nulls[Natts_pg_default_acl] = {false};
+	bool		replaces[Natts_pg_default_acl] = {false};
 	int			noldmembers;
 	int			nnewmembers;
 	Oid		   *oldmembers;
@@ -1314,9 +1314,6 @@ SetDefaultACL(InternalDefaultACL *iacls)
 		Oid			defAclOid;
 
 		/* Prepare to insert or update pg_default_acl entry */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		if (isNew)
 		{
@@ -1659,9 +1656,9 @@ ExecGrant_Attribute(InternalGrant *istmt, Oid relOid, const char *relname,
 	AclMode		avail_goptions;
 	bool		need_update;
 	HeapTuple	newtuple;
-	Datum		values[Natts_pg_attribute];
-	bool		nulls[Natts_pg_attribute];
-	bool		replaces[Natts_pg_attribute];
+	Datum		values[Natts_pg_attribute] = {0};
+	bool		nulls[Natts_pg_attribute] = {false};
+	bool		replaces[Natts_pg_attribute] = {false};
 	int			noldmembers;
 	int			nnewmembers;
 	Oid		   *oldmembers;
@@ -1742,9 +1739,6 @@ ExecGrant_Attribute(InternalGrant *istmt, Oid relOid, const char *relname,
 	nnewmembers = aclmembers(new_acl, &newmembers);
 
 	/* finished building new ACL value, now insert it */
-	MemSet(values, 0, sizeof(values));
-	MemSet(nulls, false, sizeof(nulls));
-	MemSet(replaces, false, sizeof(replaces));
 
 	/*
 	 * If the updated ACL is empty, we can set attacl to null, and maybe even
@@ -1972,9 +1966,9 @@ ExecGrant_Relation(InternalGrant *istmt)
 			Acl		   *new_acl;
 			Oid			grantorId;
 			HeapTuple	newtuple;
-			Datum		values[Natts_pg_class];
-			bool		nulls[Natts_pg_class];
-			bool		replaces[Natts_pg_class];
+			Datum		values[Natts_pg_class] = {0};
+			bool		nulls[Natts_pg_class] = {false};
+			bool		replaces[Natts_pg_class] = {false};
 			int			nnewmembers;
 			Oid		   *newmembers;
 			ObjectType	objtype;
@@ -2024,9 +2018,6 @@ ExecGrant_Relation(InternalGrant *istmt)
 			nnewmembers = aclmembers(new_acl, &newmembers);
 
 			/* finished building new ACL value, now insert it */
-			MemSet(values, 0, sizeof(values));
-			MemSet(nulls, false, sizeof(nulls));
-			MemSet(replaces, false, sizeof(replaces));
 
 			replaces[Anum_pg_class_relacl - 1] = true;
 			values[Anum_pg_class_relacl - 1] = PointerGetDatum(new_acl);
@@ -2147,9 +2138,9 @@ ExecGrant_Database(InternalGrant *istmt)
 		Oid			grantorId;
 		Oid			ownerId;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_database];
-		bool		nulls[Natts_pg_database];
-		bool		replaces[Natts_pg_database];
+		Datum		values[Natts_pg_database] = {0};
+		bool		nulls[Natts_pg_database] = {false};
+		bool		replaces[Natts_pg_database] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2214,9 +2205,6 @@ ExecGrant_Database(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_database_datacl - 1] = true;
 		values[Anum_pg_database_datacl - 1] = PointerGetDatum(new_acl);
@@ -2268,9 +2256,9 @@ ExecGrant_Fdw(InternalGrant *istmt)
 		Oid			ownerId;
 		HeapTuple	tuple;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_foreign_data_wrapper];
-		bool		nulls[Natts_pg_foreign_data_wrapper];
-		bool		replaces[Natts_pg_foreign_data_wrapper];
+		Datum		values[Natts_pg_foreign_data_wrapper] = {0};
+		bool		nulls[Natts_pg_foreign_data_wrapper] = {false};
+		bool		replaces[Natts_pg_foreign_data_wrapper] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2336,9 +2324,6 @@ ExecGrant_Fdw(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_foreign_data_wrapper_fdwacl - 1] = true;
 		values[Anum_pg_foreign_data_wrapper_fdwacl - 1] = PointerGetDatum(new_acl);
@@ -2395,9 +2380,9 @@ ExecGrant_ForeignServer(InternalGrant *istmt)
 		Oid			ownerId;
 		HeapTuple	tuple;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_foreign_server];
-		bool		nulls[Natts_pg_foreign_server];
-		bool		replaces[Natts_pg_foreign_server];
+		Datum		values[Natts_pg_foreign_server] = {0};
+		bool		nulls[Natts_pg_foreign_server] = {false};
+		bool		replaces[Natts_pg_foreign_server] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2462,9 +2447,6 @@ ExecGrant_ForeignServer(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_foreign_server_srvacl - 1] = true;
 		values[Anum_pg_foreign_server_srvacl - 1] = PointerGetDatum(new_acl);
@@ -2520,9 +2502,9 @@ ExecGrant_Function(InternalGrant *istmt)
 		Oid			ownerId;
 		HeapTuple	tuple;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_proc];
-		bool		nulls[Natts_pg_proc];
-		bool		replaces[Natts_pg_proc];
+		Datum		values[Natts_pg_proc] = {0};
+		bool		nulls[Natts_pg_proc] = {false};
+		bool		replaces[Natts_pg_proc] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2586,9 +2568,6 @@ ExecGrant_Function(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_proc_proacl - 1] = true;
 		values[Anum_pg_proc_proacl - 1] = PointerGetDatum(new_acl);
@@ -2643,9 +2622,9 @@ ExecGrant_Language(InternalGrant *istmt)
 		Oid			ownerId;
 		HeapTuple	tuple;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_language];
-		bool		nulls[Natts_pg_language];
-		bool		replaces[Natts_pg_language];
+		Datum		values[Natts_pg_language] = {0};
+		bool		nulls[Natts_pg_language] = {false};
+		bool		replaces[Natts_pg_language] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2717,9 +2696,6 @@ ExecGrant_Language(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_language_lanacl - 1] = true;
 		values[Anum_pg_language_lanacl - 1] = PointerGetDatum(new_acl);
@@ -2775,9 +2751,9 @@ ExecGrant_Largeobject(InternalGrant *istmt)
 		Oid			grantorId;
 		Oid			ownerId;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_largeobject_metadata];
-		bool		nulls[Natts_pg_largeobject_metadata];
-		bool		replaces[Natts_pg_largeobject_metadata];
+		Datum		values[Natts_pg_largeobject_metadata] = {0};
+		bool		nulls[Natts_pg_largeobject_metadata] = {false};
+		bool		replaces[Natts_pg_largeobject_metadata] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2855,9 +2831,6 @@ ExecGrant_Largeobject(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_largeobject_metadata_lomacl - 1] = true;
 		values[Anum_pg_largeobject_metadata_lomacl - 1]
@@ -2914,9 +2887,9 @@ ExecGrant_Namespace(InternalGrant *istmt)
 		Oid			ownerId;
 		HeapTuple	tuple;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_namespace];
-		bool		nulls[Natts_pg_namespace];
-		bool		replaces[Natts_pg_namespace];
+		Datum		values[Natts_pg_namespace] = {0};
+		bool		nulls[Natts_pg_namespace] = {false};
+		bool		replaces[Natts_pg_namespace] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -2981,9 +2954,6 @@ ExecGrant_Namespace(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_namespace_nspacl - 1] = true;
 		values[Anum_pg_namespace_nspacl - 1] = PointerGetDatum(new_acl);
@@ -3037,9 +3007,9 @@ ExecGrant_Tablespace(InternalGrant *istmt)
 		Oid			grantorId;
 		Oid			ownerId;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_tablespace];
-		bool		nulls[Natts_pg_tablespace];
-		bool		replaces[Natts_pg_tablespace];
+		Datum		values[Natts_pg_tablespace] = {0};
+		bool		nulls[Natts_pg_tablespace] = {false};
+		bool		replaces[Natts_pg_tablespace] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -3105,9 +3075,6 @@ ExecGrant_Tablespace(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_tablespace_spcacl - 1] = true;
 		values[Anum_pg_tablespace_spcacl - 1] = PointerGetDatum(new_acl);
@@ -3157,9 +3124,9 @@ ExecGrant_Type(InternalGrant *istmt)
 		Oid			grantorId;
 		Oid			ownerId;
 		HeapTuple	newtuple;
-		Datum		values[Natts_pg_type];
-		bool		nulls[Natts_pg_type];
-		bool		replaces[Natts_pg_type];
+		Datum		values[Natts_pg_type] = {0};
+		bool		nulls[Natts_pg_type] = {false};
+		bool		replaces[Natts_pg_type] = {false};
 		int			noldmembers;
 		int			nnewmembers;
 		Oid		   *oldmembers;
@@ -3239,9 +3206,6 @@ ExecGrant_Type(InternalGrant *istmt)
 		nnewmembers = aclmembers(new_acl, &newmembers);
 
 		/* finished building new ACL value, now insert it */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-		MemSet(replaces, false, sizeof(replaces));
 
 		replaces[Anum_pg_type_typacl - 1] = true;
 		values[Anum_pg_type_typacl - 1] = PointerGetDatum(new_acl);
@@ -5992,17 +5956,13 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a
 	/* If we find an entry, update it with the latest ACL. */
 	if (HeapTupleIsValid(oldtuple))
 	{
-		Datum		values[Natts_pg_init_privs];
-		bool		nulls[Natts_pg_init_privs];
-		bool		replace[Natts_pg_init_privs];
+		Datum		values[Natts_pg_init_privs] = {0};
+		bool		nulls[Natts_pg_init_privs] = {false};
+		bool		replace[Natts_pg_init_privs] = {false};
 
 		/* If we have a new ACL to set, then update the row with it. */
 		if (new_acl)
 		{
-			MemSet(values, 0, sizeof(values));
-			MemSet(nulls, false, sizeof(nulls));
-			MemSet(replace, false, sizeof(replace));
-
 			values[Anum_pg_init_privs_initprivs - 1] = PointerGetDatum(new_acl);
 			replace[Anum_pg_init_privs_initprivs - 1] = true;
 
@@ -6020,7 +5980,7 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a
 	else
 	{
 		Datum		values[Natts_pg_init_privs];
-		bool		nulls[Natts_pg_init_privs];
+		bool		nulls[Natts_pg_init_privs] = {false};
 
 		/*
 		 * Only add a new entry if the new ACL is non-NULL.
@@ -6031,8 +5991,6 @@ recordExtensionInitPrivWorker(Oid objoid, Oid classoid, int objsubid, Acl *new_a
 		if (new_acl)
 		{
 			/* No entry found, so add it. */
-			MemSet(nulls, false, sizeof(nulls));
-
 			values[Anum_pg_init_privs_objoid - 1] = ObjectIdGetDatum(objoid);
 			values[Anum_pg_init_privs_classoid - 1] = ObjectIdGetDatum(classoid);
 			values[Anum_pg_init_privs_objsubid - 1] = Int32GetDatum(objsubid);
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index b7bcdd9..cc43f98 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -695,14 +695,10 @@ InsertPgAttributeTuple(Relation pg_attribute_rel,
 					   Form_pg_attribute new_attribute,
 					   CatalogIndexState indstate)
 {
-	Datum		values[Natts_pg_attribute];
-	bool		nulls[Natts_pg_attribute];
+	Datum		values[Natts_pg_attribute] = {0};
+	bool		nulls[Natts_pg_attribute] = {false};
 	HeapTuple	tup;
 
-	/* This is a tad tedious, but way cleaner than what we used to do... */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	values[Anum_pg_attribute_attrelid - 1] = ObjectIdGetDatum(new_attribute->attrelid);
 	values[Anum_pg_attribute_attname - 1] = NameGetDatum(&new_attribute->attname);
 	values[Anum_pg_attribute_atttypid - 1] = ObjectIdGetDatum(new_attribute->atttypid);
@@ -852,14 +848,10 @@ InsertPgClassTuple(Relation pg_class_desc,
 				   Datum reloptions)
 {
 	Form_pg_class rd_rel = new_rel_desc->rd_rel;
-	Datum		values[Natts_pg_class];
-	bool		nulls[Natts_pg_class];
+	Datum		values[Natts_pg_class] = {0};
+	bool		nulls[Natts_pg_class] = {false};
 	HeapTuple	tup;
 
-	/* This is a tad tedious, but way cleaner than what we used to do... */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	values[Anum_pg_class_oid - 1] = ObjectIdGetDatum(new_rel_oid);
 	values[Anum_pg_class_relname - 1] = NameGetDatum(&rd_rel->relname);
 	values[Anum_pg_class_relnamespace - 1] = ObjectIdGetDatum(rd_rel->relnamespace);
@@ -1645,14 +1637,11 @@ RemoveAttributeById(Oid relid, AttrNumber attnum)
 		/* clear the missing value if any */
 		if (attStruct->atthasmissing)
 		{
-			Datum		valuesAtt[Natts_pg_attribute];
-			bool		nullsAtt[Natts_pg_attribute];
-			bool		replacesAtt[Natts_pg_attribute];
+			Datum		valuesAtt[Natts_pg_attribute] = {0};
+			bool		nullsAtt[Natts_pg_attribute] = {false};
+			bool		replacesAtt[Natts_pg_attribute] = {false};
 
 			/* update the tuple - set atthasmissing and attmissingval */
-			MemSet(valuesAtt, 0, sizeof(valuesAtt));
-			MemSet(nullsAtt, false, sizeof(nullsAtt));
-			MemSet(replacesAtt, false, sizeof(replacesAtt));
 
 			valuesAtt[Anum_pg_attribute_atthasmissing - 1] =
 				BoolGetDatum(false);
@@ -2064,9 +2053,9 @@ RelationClearMissing(Relation rel)
 void
 SetAttrMissing(Oid relid, char *attname, char *value)
 {
-	Datum		valuesAtt[Natts_pg_attribute];
-	bool		nullsAtt[Natts_pg_attribute];
-	bool		replacesAtt[Natts_pg_attribute];
+	Datum		valuesAtt[Natts_pg_attribute] = {0};
+	bool		nullsAtt[Natts_pg_attribute] = {false};
+	bool		replacesAtt[Natts_pg_attribute] = {false};
 	Datum		missingval;
 	Form_pg_attribute attStruct;
 	Relation	attrrel,
@@ -2092,9 +2081,6 @@ SetAttrMissing(Oid relid, char *attname, char *value)
 								  Int32GetDatum(attStruct->atttypmod));
 
 	/* update the tuple - set atthasmissing and attmissingval */
-	MemSet(valuesAtt, 0, sizeof(valuesAtt));
-	MemSet(nullsAtt, false, sizeof(nullsAtt));
-	MemSet(replacesAtt, false, sizeof(replacesAtt));
 
 	valuesAtt[Anum_pg_attribute_atthasmissing - 1] = BoolGetDatum(true);
 	replacesAtt[Anum_pg_attribute_atthasmissing - 1] = true;
@@ -2191,15 +2177,12 @@ StoreAttrDefault(Relation rel, AttrNumber attnum,
 		Expr	   *expr2 = (Expr *) expr;
 		EState	   *estate = NULL;
 		ExprContext *econtext;
-		Datum		valuesAtt[Natts_pg_attribute];
-		bool		nullsAtt[Natts_pg_attribute];
-		bool		replacesAtt[Natts_pg_attribute];
+		Datum		valuesAtt[Natts_pg_attribute] = {0};
+		bool		nullsAtt[Natts_pg_attribute] = {false};
+		bool		replacesAtt[Natts_pg_attribute] = {false};
 		Datum		missingval = (Datum) 0;
 		bool		missingIsNull = true;
 
-		MemSet(valuesAtt, 0, sizeof(valuesAtt));
-		MemSet(nullsAtt, false, sizeof(nullsAtt));
-		MemSet(replacesAtt, false, sizeof(replacesAtt));
 		valuesAtt[Anum_pg_attribute_atthasdef - 1] = true;
 		replacesAtt[Anum_pg_attribute_atthasdef - 1] = true;
 
@@ -3419,7 +3402,7 @@ StorePartitionKey(Relation rel,
 	Relation	pg_partitioned_table;
 	HeapTuple	tuple;
 	Datum		values[Natts_pg_partitioned_table];
-	bool		nulls[Natts_pg_partitioned_table];
+	bool		nulls[Natts_pg_partitioned_table] = {false};
 	ObjectAddress myself;
 	ObjectAddress referenced;
 
@@ -3444,8 +3427,6 @@ StorePartitionKey(Relation rel,
 
 	pg_partitioned_table = table_open(PartitionedRelationId, RowExclusiveLock);
 
-	MemSet(nulls, false, sizeof(nulls));
-
 	/* Only this can ever be NULL */
 	if (!partexprDatum)
 		nulls[Anum_pg_partitioned_table_partexprs - 1] = true;
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 098732c..1a35940 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -546,7 +546,7 @@ UpdateIndexRelation(Oid indexoid,
 	Datum		exprsDatum;
 	Datum		predDatum;
 	Datum		values[Natts_pg_index];
-	bool		nulls[Natts_pg_index];
+	bool		nulls[Natts_pg_index] = {false};
 	Relation	pg_index;
 	HeapTuple	tuple;
 	int			i;
@@ -599,7 +599,6 @@ UpdateIndexRelation(Oid indexoid,
 	/*
 	 * Build a pg_index tuple
 	 */
-	MemSet(nulls, false, sizeof(nulls));
 
 	values[Anum_pg_index_indexrelid - 1] = ObjectIdGetDatum(indexoid);
 	values[Anum_pg_index_indrelid - 1] = ObjectIdGetDatum(heapoid);
diff --git a/src/backend/catalog/pg_collation.c b/src/backend/catalog/pg_collation.c
index dd99d53..0043096 100644
--- a/src/backend/catalog/pg_collation.c
+++ b/src/backend/catalog/pg_collation.c
@@ -57,7 +57,7 @@ CollationCreate(const char *collname, Oid collnamespace,
 	TupleDesc	tupDesc;
 	HeapTuple	tup;
 	Datum		values[Natts_pg_collation];
-	bool		nulls[Natts_pg_collation];
+	bool		nulls[Natts_pg_collation] = {false};
 	NameData	name_name,
 				name_collate,
 				name_ctype;
@@ -151,7 +151,6 @@ CollationCreate(const char *collname, Oid collnamespace,
 	tupDesc = RelationGetDescr(rel);
 
 	/* form a tuple */
-	memset(nulls, 0, sizeof(nulls));
 
 	namestrcpy(&name_name, collname);
 	oid = GetNewOidWithIndex(rel, CollationOidIndexId,
diff --git a/src/backend/catalog/pg_db_role_setting.c b/src/backend/catalog/pg_db_role_setting.c
index 20acac2..343929b 100644
--- a/src/backend/catalog/pg_db_role_setting.c
+++ b/src/backend/catalog/pg_db_role_setting.c
@@ -136,11 +136,9 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt)
 		/* non-null valuestr means it's not RESET, so insert a new tuple */
 		HeapTuple	newtuple;
 		Datum		values[Natts_pg_db_role_setting];
-		bool		nulls[Natts_pg_db_role_setting];
+		bool		nulls[Natts_pg_db_role_setting] = {false};
 		ArrayType  *a;
 
-		memset(nulls, false, sizeof(nulls));
-
 		a = GUCArrayAdd(NULL, setstmt->name, valuestr);
 
 		values[Anum_pg_db_role_setting_setdatabase - 1] =
diff --git a/src/backend/catalog/pg_depend.c b/src/backend/catalog/pg_depend.c
index a060c25..9acfa70 100644
--- a/src/backend/catalog/pg_depend.c
+++ b/src/backend/catalog/pg_depend.c
@@ -61,7 +61,7 @@ recordMultipleDependencies(const ObjectAddress *depender,
 	CatalogIndexState indstate;
 	HeapTuple	tup;
 	int			i;
-	bool		nulls[Natts_pg_depend];
+	bool		nulls[Natts_pg_depend] = {false};
 	Datum		values[Natts_pg_depend];
 
 	if (nreferenced <= 0)
@@ -79,8 +79,6 @@ recordMultipleDependencies(const ObjectAddress *depender,
 	/* Don't open indexes unless we need to make an update */
 	indstate = NULL;
 
-	memset(nulls, false, sizeof(nulls));
-
 	for (i = 0; i < nreferenced; i++, referenced++)
 	{
 		/*
diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c
index d0ff802..93549bc 100644
--- a/src/backend/catalog/pg_enum.c
+++ b/src/backend/catalog/pg_enum.c
@@ -66,7 +66,7 @@ EnumValuesCreate(Oid enumTypeOid, List *vals)
 	int			elemno,
 				num_elems;
 	Datum		values[Natts_pg_enum];
-	bool		nulls[Natts_pg_enum];
+	bool		nulls[Natts_pg_enum] = {false};
 	ListCell   *lc;
 	HeapTuple	tup;
 
@@ -111,8 +111,6 @@ EnumValuesCreate(Oid enumTypeOid, List *vals)
 	qsort(oids, num_elems, sizeof(Oid), oid_cmp);
 
 	/* and make the entries */
-	memset(nulls, false, sizeof(nulls));
-
 	elemno = 0;
 	foreach(lc, vals)
 	{
@@ -215,7 +213,7 @@ AddEnumLabel(Oid enumTypeOid,
 	Relation	pg_enum;
 	Oid			newOid;
 	Datum		values[Natts_pg_enum];
-	bool		nulls[Natts_pg_enum];
+	bool		nulls[Natts_pg_enum] = {false};
 	NameData	enumlabel;
 	HeapTuple	enum_tup;
 	float4		newelemorder;
@@ -480,7 +478,6 @@ restart:
 	ReleaseCatCacheList(list);
 
 	/* Create the new pg_enum entry */
-	memset(nulls, false, sizeof(nulls));
 	values[Anum_pg_enum_oid - 1] = ObjectIdGetDatum(newOid);
 	values[Anum_pg_enum_enumtypid - 1] = ObjectIdGetDatum(enumTypeOid);
 	values[Anum_pg_enum_enumsortorder - 1] = Float4GetDatum(newelemorder);
diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c
index 59af162..23b34fb 100644
--- a/src/backend/catalog/pg_inherits.c
+++ b/src/backend/catalog/pg_inherits.c
@@ -417,7 +417,7 @@ void
 StoreSingleInheritance(Oid relationId, Oid parentOid, int32 seqNumber)
 {
 	Datum		values[Natts_pg_inherits];
-	bool		nulls[Natts_pg_inherits];
+	bool		nulls[Natts_pg_inherits] = {false};
 	HeapTuple	tuple;
 	Relation	inhRelation;
 
@@ -430,8 +430,6 @@ StoreSingleInheritance(Oid relationId, Oid parentOid, int32 seqNumber)
 	values[Anum_pg_inherits_inhparent - 1] = ObjectIdGetDatum(parentOid);
 	values[Anum_pg_inherits_inhseqno - 1] = Int32GetDatum(seqNumber);
 
-	memset(nulls, 0, sizeof(nulls));
-
 	tuple = heap_form_tuple(RelationGetDescr(inhRelation), values, nulls);
 
 	CatalogTupleInsert(inhRelation, tuple);
diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c
index 1a68702..c58a499 100644
--- a/src/backend/catalog/pg_largeobject.c
+++ b/src/backend/catalog/pg_largeobject.c
@@ -42,8 +42,8 @@ LargeObjectCreate(Oid loid)
 	Relation	pg_lo_meta;
 	HeapTuple	ntup;
 	Oid			loid_new;
-	Datum		values[Natts_pg_largeobject_metadata];
-	bool		nulls[Natts_pg_largeobject_metadata];
+	Datum		values[Natts_pg_largeobject_metadata] = {0};
+	bool		nulls[Natts_pg_largeobject_metadata] = {false};
 
 	pg_lo_meta = table_open(LargeObjectMetadataRelationId,
 							RowExclusiveLock);
@@ -51,8 +51,6 @@ LargeObjectCreate(Oid loid)
 	/*
 	 * Insert metadata of the largeobject
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
 
 	if (OidIsValid(loid))
 		loid_new = loid;
diff --git a/src/backend/catalog/pg_publication.c b/src/backend/catalog/pg_publication.c
index fd5da7d..adccd77 100644
--- a/src/backend/catalog/pg_publication.c
+++ b/src/backend/catalog/pg_publication.c
@@ -154,8 +154,8 @@ publication_add_relation(Oid pubid, Relation targetrel,
 {
 	Relation	rel;
 	HeapTuple	tup;
-	Datum		values[Natts_pg_publication_rel];
-	bool		nulls[Natts_pg_publication_rel];
+	Datum		values[Natts_pg_publication_rel] = {0};
+	bool		nulls[Natts_pg_publication_rel] = {false};
 	Oid			relid = RelationGetRelid(targetrel);
 	Oid			prrelid;
 	Publication *pub = GetPublication(pubid);
@@ -186,8 +186,6 @@ publication_add_relation(Oid pubid, Relation targetrel,
 	check_publication_add_relation(targetrel);
 
 	/* Form a tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
 
 	prrelid = GetNewOidWithIndex(rel, PublicationRelObjectIndexId,
 								 Anum_pg_publication_rel_oid);
diff --git a/src/backend/catalog/pg_range.c b/src/backend/catalog/pg_range.c
index e6e138b..d9f9576 100644
--- a/src/backend/catalog/pg_range.c
+++ b/src/backend/catalog/pg_range.c
@@ -39,15 +39,13 @@ RangeCreate(Oid rangeTypeOid, Oid rangeSubType, Oid rangeCollation,
 {
 	Relation	pg_range;
 	Datum		values[Natts_pg_range];
-	bool		nulls[Natts_pg_range];
+	bool		nulls[Natts_pg_range] = {false};
 	HeapTuple	tup;
 	ObjectAddress myself;
 	ObjectAddress referenced;
 
 	pg_range = table_open(RangeRelationId, RowExclusiveLock);
 
-	memset(nulls, 0, sizeof(nulls));
-
 	values[Anum_pg_range_rngtypid - 1] = ObjectIdGetDatum(rangeTypeOid);
 	values[Anum_pg_range_rngsubtype - 1] = ObjectIdGetDatum(rangeSubType);
 	values[Anum_pg_range_rngcollation - 1] = ObjectIdGetDatum(rangeCollation);
diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c
index fb7f8dd..d537557 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -273,9 +273,7 @@ shdepChangeDep(Relation sdepRel,
 	{
 		/* Need to insert new entry */
 		Datum		values[Natts_pg_shdepend];
-		bool		nulls[Natts_pg_shdepend];
-
-		memset(nulls, false, sizeof(nulls));
+		bool		nulls[Natts_pg_shdepend] = {false};
 
 		values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(dbid);
 		values[Anum_pg_shdepend_classid - 1] = ObjectIdGetDatum(classid);
@@ -801,9 +799,9 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId)
 	SysScanDesc scan;
 	HeapTuple	tup;
 	CatalogIndexState indstate;
-	Datum		values[Natts_pg_shdepend];
-	bool		nulls[Natts_pg_shdepend];
-	bool		replace[Natts_pg_shdepend];
+	Datum		values[Natts_pg_shdepend] = {0};
+	bool		nulls[Natts_pg_shdepend] = {false};
+	bool		replace[Natts_pg_shdepend] = {false};
 
 	sdepRel = table_open(SharedDependRelationId, RowExclusiveLock);
 	sdepDesc = RelationGetDescr(sdepRel);
@@ -820,10 +818,6 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId)
 							  NULL, 1, key);
 
 	/* Set up to copy the tuples except for inserting newDbId */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-	memset(replace, false, sizeof(replace));
-
 	replace[Anum_pg_shdepend_dbid - 1] = true;
 	values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(newDbId);
 
@@ -934,7 +928,7 @@ shdepAddDependency(Relation sdepRel,
 {
 	HeapTuple	tup;
 	Datum		values[Natts_pg_shdepend];
-	bool		nulls[Natts_pg_shdepend];
+	bool		nulls[Natts_pg_shdepend] = {false};
 
 	/*
 	 * Make sure the object doesn't go away while we record the dependency on
@@ -943,8 +937,6 @@ shdepAddDependency(Relation sdepRel,
 	 */
 	shdepLockAndCheckObject(refclassId, refobjId);
 
-	memset(nulls, false, sizeof(nulls));
-
 	/*
 	 * Form the new tuple and record the dependency.
 	 */
diff --git a/src/backend/catalog/pg_subscription.c b/src/backend/catalog/pg_subscription.c
index afee283..4af39f4 100644
--- a/src/backend/catalog/pg_subscription.c
+++ b/src/backend/catalog/pg_subscription.c
@@ -243,8 +243,8 @@ AddSubscriptionRelState(Oid subid, Oid relid, char state,
 {
 	Relation	rel;
 	HeapTuple	tup;
-	bool		nulls[Natts_pg_subscription_rel];
-	Datum		values[Natts_pg_subscription_rel];
+	bool		nulls[Natts_pg_subscription_rel] = {false};
+	Datum		values[Natts_pg_subscription_rel] = {0};
 
 	LockSharedObject(SubscriptionRelationId, subid, 0, AccessShareLock);
 
@@ -259,8 +259,6 @@ AddSubscriptionRelState(Oid subid, Oid relid, char state,
 			 relid, subid);
 
 	/* Form the tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
 	values[Anum_pg_subscription_rel_srsubid - 1] = ObjectIdGetDatum(subid);
 	values[Anum_pg_subscription_rel_srrelid - 1] = ObjectIdGetDatum(relid);
 	values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state);
@@ -289,9 +287,9 @@ UpdateSubscriptionRelState(Oid subid, Oid relid, char state,
 {
 	Relation	rel;
 	HeapTuple	tup;
-	bool		nulls[Natts_pg_subscription_rel];
-	Datum		values[Natts_pg_subscription_rel];
-	bool		replaces[Natts_pg_subscription_rel];
+	bool		nulls[Natts_pg_subscription_rel] = {false};
+	Datum		values[Natts_pg_subscription_rel] = {0};
+	bool		replaces[Natts_pg_subscription_rel] = {false};
 
 	LockSharedObject(SubscriptionRelationId, subid, 0, AccessShareLock);
 
@@ -306,10 +304,6 @@ UpdateSubscriptionRelState(Oid subid, Oid relid, char state,
 			 relid, subid);
 
 	/* Update the tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
-
 	replaces[Anum_pg_subscription_rel_srsubstate - 1] = true;
 	values[Anum_pg_subscription_rel_srsubstate - 1] = CharGetDatum(state);
 
diff --git a/src/backend/commands/amcmds.c b/src/backend/commands/amcmds.c
index c0e4098..c37cce9 100644
--- a/src/backend/commands/amcmds.c
+++ b/src/backend/commands/amcmds.c
@@ -46,8 +46,8 @@ CreateAccessMethod(CreateAmStmt *stmt)
 	ObjectAddress referenced;
 	Oid			amoid;
 	Oid			amhandler;
-	bool		nulls[Natts_pg_am];
-	Datum		values[Natts_pg_am];
+	bool		nulls[Natts_pg_am] = {false};
+	Datum		values[Natts_pg_am] = {0};
 	HeapTuple	tup;
 
 	rel = table_open(AccessMethodRelationId, RowExclusiveLock);
@@ -79,9 +79,6 @@ CreateAccessMethod(CreateAmStmt *stmt)
 	/*
 	 * Insert tuple into pg_am.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	amoid = GetNewOidWithIndex(rel, AmOidIndexId, Anum_pg_am_oid);
 	values[Anum_pg_am_oid - 1] = ObjectIdGetDatum(amoid);
 	values[Anum_pg_am_amname - 1] =
diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c
index 919e092..9624ce8 100644
--- a/src/backend/commands/collationcmds.c
+++ b/src/backend/commands/collationcmds.c
@@ -315,18 +315,14 @@ AlterCollation(AlterCollationStmt *stmt)
 		elog(ERROR, "invalid collation version change");
 	else if (oldversion && newversion && strcmp(newversion, oldversion) != 0)
 	{
-		bool		nulls[Natts_pg_collation];
-		bool		replaces[Natts_pg_collation];
-		Datum		values[Natts_pg_collation];
+		bool		nulls[Natts_pg_collation] = {false};
+		bool		replaces[Natts_pg_collation] = {false};
+		Datum		values[Natts_pg_collation] = {0};
 
 		ereport(NOTICE,
 				(errmsg("changing version from %s to %s",
 						oldversion, newversion)));
 
-		memset(values, 0, sizeof(values));
-		memset(nulls, false, sizeof(nulls));
-		memset(replaces, false, sizeof(replaces));
-
 		values[Anum_pg_collation_collversion - 1] = CStringGetTextDatum(newversion);
 		replaces[Anum_pg_collation_collversion - 1] = true;
 
diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index f7ee983..ee6f234 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -381,7 +381,7 @@ insert_event_trigger_tuple(const char *trigname, const char *eventname, Oid evtO
 	Oid			trigoid;
 	HeapTuple	tuple;
 	Datum		values[Natts_pg_trigger];
-	bool		nulls[Natts_pg_trigger];
+	bool		nulls[Natts_pg_trigger] = {false};
 	NameData	evtnamedata,
 				evteventdata;
 	ObjectAddress myself,
@@ -394,7 +394,6 @@ insert_event_trigger_tuple(const char *trigname, const char *eventname, Oid evtO
 	trigoid = GetNewOidWithIndex(tgrel, EventTriggerOidIndexId,
 								 Anum_pg_event_trigger_oid);
 	values[Anum_pg_event_trigger_oid - 1] = ObjectIdGetDatum(trigoid);
-	memset(nulls, false, sizeof(nulls));
 	namestrcpy(&evtnamedata, trigname);
 	values[Anum_pg_event_trigger_evtname - 1] = NameGetDatum(&evtnamedata);
 	namestrcpy(&evteventdata, eventname);
@@ -1494,14 +1493,11 @@ pg_event_trigger_dropped_objects(PG_FUNCTION_ARGS)
 	{
 		SQLDropObject *obj;
 		int			i = 0;
-		Datum		values[12];
-		bool		nulls[12];
+		Datum		values[12] = {0};
+		bool		nulls[12] = {false};
 
 		obj = slist_container(SQLDropObject, next, iter.cur);
 
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, 0, sizeof(nulls));
-
 		/* classid */
 		values[i++] = ObjectIdGetDatum(obj->address.classId);
 
@@ -2046,7 +2042,7 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS)
 	{
 		CollectedCommand *cmd = lfirst(lc);
 		Datum		values[9];
-		bool		nulls[9];
+		bool		nulls[9] = {false};
 		ObjectAddress addr;
 		int			i = 0;
 
@@ -2064,8 +2060,6 @@ pg_event_trigger_ddl_commands(PG_FUNCTION_ARGS)
 			!OidIsValid(cmd->d.simple.address.objectId))
 			continue;
 
-		MemSet(nulls, 0, sizeof(nulls));
-
 		switch (cmd->type)
 		{
 			case SCT_Simple:
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index f7202cc..c98a0cd 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -1771,8 +1771,8 @@ InsertExtensionTuple(const char *extName, Oid extOwner,
 {
 	Oid			extensionOid;
 	Relation	rel;
-	Datum		values[Natts_pg_extension];
-	bool		nulls[Natts_pg_extension];
+	Datum		values[Natts_pg_extension] = {0};
+	bool		nulls[Natts_pg_extension] = {false};
 	HeapTuple	tuple;
 	ObjectAddress myself;
 	ObjectAddress nsp;
@@ -1783,9 +1783,6 @@ InsertExtensionTuple(const char *extName, Oid extOwner,
 	 */
 	rel = table_open(ExtensionRelationId, RowExclusiveLock);
 
-	memset(values, 0, sizeof(values));
-	memset(nulls, 0, sizeof(nulls));
-
 	extensionOid = GetNewOidWithIndex(rel, ExtensionOidIndexId,
 									  Anum_pg_extension_oid);
 	values[Anum_pg_extension_oid - 1] = ObjectIdGetDatum(extensionOid);
@@ -1960,8 +1957,8 @@ pg_available_extensions(PG_FUNCTION_ARGS)
 		{
 			ExtensionControlFile *control;
 			char	   *extname;
-			Datum		values[3];
-			bool		nulls[3];
+			Datum		values[3] = {0};
+			bool		nulls[3] = {false};
 
 			if (!is_extension_control_filename(de->d_name))
 				continue;
@@ -1976,9 +1973,6 @@ pg_available_extensions(PG_FUNCTION_ARGS)
 
 			control = read_extension_control_file(extname);
 
-			memset(values, 0, sizeof(values));
-			memset(nulls, 0, sizeof(nulls));
-
 			/* name */
 			values[0] = DirectFunctionCall1(namein,
 											CStringGetDatum(control->name));
@@ -2117,8 +2111,8 @@ get_available_versions_for_extension(ExtensionControlFile *pcontrol,
 	{
 		ExtensionVersionInfo *evi = (ExtensionVersionInfo *) lfirst(lc);
 		ExtensionControlFile *control;
-		Datum		values[7];
-		bool		nulls[7];
+		Datum		values[7] = {0};
+		bool		nulls[7] = {false};
 		ListCell   *lc2;
 
 		if (!evi->installable)
@@ -2129,9 +2123,6 @@ get_available_versions_for_extension(ExtensionControlFile *pcontrol,
 		 */
 		control = read_extension_aux_control_file(pcontrol, evi->name);
 
-		memset(values, 0, sizeof(values));
-		memset(nulls, 0, sizeof(nulls));
-
 		/* name */
 		values[0] = DirectFunctionCall1(namein,
 										CStringGetDatum(control->name));
@@ -2292,8 +2283,8 @@ pg_extension_update_paths(PG_FUNCTION_ARGS)
 		{
 			ExtensionVersionInfo *evi2 = (ExtensionVersionInfo *) lfirst(lc2);
 			List	   *path;
-			Datum		values[3];
-			bool		nulls[3];
+			Datum		values[3] = {0};
+			bool		nulls[3] = {false};
 
 			if (evi1 == evi2)
 				continue;
@@ -2302,8 +2293,6 @@ pg_extension_update_paths(PG_FUNCTION_ARGS)
 			path = find_update_path(evi_list, evi1, evi2, false, true);
 
 			/* Emit result row */
-			memset(values, 0, sizeof(values));
-			memset(nulls, 0, sizeof(nulls));
 
 			/* source */
 			values[0] = CStringGetTextDatum(evi1->name);
@@ -3061,9 +3050,9 @@ ApplyExtensionUpdates(Oid extensionOid,
 		SysScanDesc extScan;
 		HeapTuple	extTup;
 		Form_pg_extension extForm;
-		Datum		values[Natts_pg_extension];
-		bool		nulls[Natts_pg_extension];
-		bool		repl[Natts_pg_extension];
+		Datum		values[Natts_pg_extension] = {0};
+		bool		nulls[Natts_pg_extension] = {false};
+		bool		repl[Natts_pg_extension] = {false};
 		ObjectAddress myself;
 		ListCell   *lc;
 
@@ -3100,10 +3089,6 @@ ApplyExtensionUpdates(Oid extensionOid,
 		/*
 		 * Modify extrelocatable and extversion in the pg_extension tuple
 		 */
-		memset(values, 0, sizeof(values));
-		memset(nulls, 0, sizeof(nulls));
-		memset(repl, 0, sizeof(repl));
-
 		values[Anum_pg_extension_extrelocatable - 1] =
 			BoolGetDatum(control->relocatable);
 		repl[Anum_pg_extension_extrelocatable - 1] = true;
diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c
index f96c278..6eccfdc 100644
--- a/src/backend/commands/foreigncmds.c
+++ b/src/backend/commands/foreigncmds.c
@@ -563,8 +563,8 @@ ObjectAddress
 CreateForeignDataWrapper(CreateFdwStmt *stmt)
 {
 	Relation	rel;
-	Datum		values[Natts_pg_foreign_data_wrapper];
-	bool		nulls[Natts_pg_foreign_data_wrapper];
+	Datum		values[Natts_pg_foreign_data_wrapper] = {0};
+	bool		nulls[Natts_pg_foreign_data_wrapper] = {false};
 	HeapTuple	tuple;
 	Oid			fdwId;
 	bool		handler_given;
@@ -601,9 +601,6 @@ CreateForeignDataWrapper(CreateFdwStmt *stmt)
 	/*
 	 * Insert tuple into pg_foreign_data_wrapper.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	fdwId = GetNewOidWithIndex(rel, ForeignDataWrapperOidIndexId,
 							   Anum_pg_foreign_data_wrapper_oid);
 	values[Anum_pg_foreign_data_wrapper_oid - 1] = ObjectIdGetDatum(fdwId);
@@ -868,8 +865,8 @@ CreateForeignServer(CreateForeignServerStmt *stmt)
 {
 	Relation	rel;
 	Datum		srvoptions;
-	Datum		values[Natts_pg_foreign_server];
-	bool		nulls[Natts_pg_foreign_server];
+	Datum		values[Natts_pg_foreign_server] = {0};
+	bool		nulls[Natts_pg_foreign_server] = {false};
 	HeapTuple	tuple;
 	Oid			srvId;
 	Oid			ownerId;
@@ -918,9 +915,6 @@ CreateForeignServer(CreateForeignServerStmt *stmt)
 	/*
 	 * Insert tuple into pg_foreign_server.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	srvId = GetNewOidWithIndex(rel, ForeignServerOidIndexId,
 							   Anum_pg_foreign_server_oid);
 	values[Anum_pg_foreign_server_oid - 1] = ObjectIdGetDatum(srvId);
@@ -1145,8 +1139,8 @@ CreateUserMapping(CreateUserMappingStmt *stmt)
 {
 	Relation	rel;
 	Datum		useoptions;
-	Datum		values[Natts_pg_user_mapping];
-	bool		nulls[Natts_pg_user_mapping];
+	Datum		values[Natts_pg_user_mapping] = {0};
+	bool		nulls[Natts_pg_user_mapping] = {false};
 	HeapTuple	tuple;
 	Oid			useId;
 	Oid			umId;
@@ -1201,9 +1195,6 @@ CreateUserMapping(CreateUserMappingStmt *stmt)
 	/*
 	 * Insert tuple into pg_user_mapping.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	umId = GetNewOidWithIndex(rel, UserMappingOidIndexId,
 							  Anum_pg_user_mapping_oid);
 	values[Anum_pg_user_mapping_oid - 1] = ObjectIdGetDatum(umId);
@@ -1465,8 +1456,8 @@ CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid)
 {
 	Relation	ftrel;
 	Datum		ftoptions;
-	Datum		values[Natts_pg_foreign_table];
-	bool		nulls[Natts_pg_foreign_table];
+	Datum		values[Natts_pg_foreign_table] = {0};
+	bool		nulls[Natts_pg_foreign_table] = {false};
 	HeapTuple	tuple;
 	AclResult	aclresult;
 	ObjectAddress myself;
@@ -1502,9 +1493,6 @@ CreateForeignTable(CreateForeignTableStmt *stmt, Oid relid)
 	/*
 	 * Insert tuple into pg_foreign_table.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	values[Anum_pg_foreign_table_ftrelid - 1] = ObjectIdGetDatum(relid);
 	values[Anum_pg_foreign_table_ftserver - 1] = ObjectIdGetDatum(server->serverid);
 	/* Add table generic options */
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 40f1f9a..756e4e8 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -1504,7 +1504,7 @@ CreateCast(CreateCastStmt *stmt)
 	Relation	relation;
 	HeapTuple	tuple;
 	Datum		values[Natts_pg_cast];
-	bool		nulls[Natts_pg_cast];
+	bool		nulls[Natts_pg_cast] = {false};
 	ObjectAddress myself,
 				referenced;
 	AclResult	aclresult;
@@ -1757,8 +1757,6 @@ CreateCast(CreateCastStmt *stmt)
 	values[Anum_pg_cast_castcontext - 1] = CharGetDatum(castcontext);
 	values[Anum_pg_cast_castmethod - 1] = CharGetDatum(castmethod);
 
-	MemSet(nulls, false, sizeof(nulls));
-
 	tuple = heap_form_tuple(RelationGetDescr(relation), values, nulls);
 
 	CatalogTupleInsert(relation, tuple);
@@ -1893,8 +1891,8 @@ CreateTransform(CreateTransformStmt *stmt)
 	AclResult	aclresult;
 	Form_pg_proc procstruct;
 	Datum		values[Natts_pg_transform];
-	bool		nulls[Natts_pg_transform];
-	bool		replaces[Natts_pg_transform];
+	bool		nulls[Natts_pg_transform] = {false};
+	bool		replaces[Natts_pg_transform] = {false};
 	Oid			transformid;
 	HeapTuple	tuple;
 	HeapTuple	newtuple;
@@ -1999,8 +1997,6 @@ CreateTransform(CreateTransformStmt *stmt)
 	values[Anum_pg_transform_trffromsql - 1] = ObjectIdGetDatum(fromsqlfuncid);
 	values[Anum_pg_transform_trftosql - 1] = ObjectIdGetDatum(tosqlfuncid);
 
-	MemSet(nulls, false, sizeof(nulls));
-
 	relation = table_open(TransformRelationId, RowExclusiveLock);
 
 	tuple = SearchSysCache2(TRFTYPELANG,
@@ -2017,7 +2013,6 @@ CreateTransform(CreateTransformStmt *stmt)
 							format_type_be(typeid),
 							stmt->lang)));
 
-		MemSet(replaces, false, sizeof(replaces));
 		replaces[Anum_pg_transform_trffromsql - 1] = true;
 		replaces[Anum_pg_transform_trftosql - 1] = true;
 
diff --git a/src/backend/commands/opclasscmds.c b/src/backend/commands/opclasscmds.c
index 6a1ccde..88dbc7d 100644
--- a/src/backend/commands/opclasscmds.c
+++ b/src/backend/commands/opclasscmds.c
@@ -248,8 +248,8 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am
 	Oid			opfamilyoid;
 	Relation	rel;
 	HeapTuple	tup;
-	Datum		values[Natts_pg_opfamily];
-	bool		nulls[Natts_pg_opfamily];
+	Datum		values[Natts_pg_opfamily] = {0};
+	bool		nulls[Natts_pg_opfamily] = {false};
 	NameData	opfName;
 	ObjectAddress myself,
 				referenced;
@@ -272,9 +272,6 @@ CreateOpFamily(const char *amname, const char *opfname, Oid namespaceoid, Oid am
 	/*
 	 * Okay, let's create the pg_opfamily entry.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	opfamilyoid = GetNewOidWithIndex(rel, OpfamilyOidIndexId,
 									 Anum_pg_opfamily_oid);
 	values[Anum_pg_opfamily_oid - 1] = ObjectIdGetDatum(opfamilyoid);
@@ -347,8 +344,8 @@ DefineOpClass(CreateOpClassStmt *stmt)
 	HeapTuple	tup;
 	Form_pg_am	amform;
 	IndexAmRoutine *amroutine;
-	Datum		values[Natts_pg_opclass];
-	bool		nulls[Natts_pg_opclass];
+	Datum		values[Natts_pg_opclass] = {0};
+	bool		nulls[Natts_pg_opclass] = {false};
 	AclResult	aclresult;
 	NameData	opcName;
 	ObjectAddress myself,
@@ -639,9 +636,6 @@ DefineOpClass(CreateOpClassStmt *stmt)
 	/*
 	 * Okay, let's create the pg_opclass entry.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	opclassoid = GetNewOidWithIndex(rel, OpclassOidIndexId,
 									Anum_pg_opclass_oid);
 	values[Anum_pg_opclass_oid - 1] = ObjectIdGetDatum(opclassoid);
@@ -1308,8 +1302,8 @@ storeOperators(List *opfamilyname, Oid amoid,
 			   List *operators, bool isAdd)
 {
 	Relation	rel;
-	Datum		values[Natts_pg_amop];
-	bool		nulls[Natts_pg_amop];
+	Datum		values[Natts_pg_amop] = {0};
+	bool		nulls[Natts_pg_amop] = {false};
 	HeapTuple	tup;
 	Oid			entryoid;
 	ObjectAddress myself,
@@ -1344,8 +1338,6 @@ storeOperators(List *opfamilyname, Oid amoid,
 		oppurpose = OidIsValid(op->sortfamily) ? AMOP_ORDER : AMOP_SEARCH;
 
 		/* Create the pg_amop entry */
-		memset(values, 0, sizeof(values));
-		memset(nulls, false, sizeof(nulls));
 
 		entryoid = GetNewOidWithIndex(rel, AccessMethodOperatorOidIndexId,
 									  Anum_pg_amop_oid);
@@ -1426,8 +1418,8 @@ storeProcedures(List *opfamilyname, Oid amoid,
 				List *procedures, bool isAdd)
 {
 	Relation	rel;
-	Datum		values[Natts_pg_amproc];
-	bool		nulls[Natts_pg_amproc];
+	Datum		values[Natts_pg_amproc] = {0};
+	bool		nulls[Natts_pg_amproc] = {false};
 	HeapTuple	tup;
 	Oid			entryoid;
 	ObjectAddress myself,
@@ -1459,9 +1451,6 @@ storeProcedures(List *opfamilyname, Oid amoid,
 							NameListToString(opfamilyname))));
 
 		/* Create the pg_amproc entry */
-		memset(values, 0, sizeof(values));
-		memset(nulls, false, sizeof(nulls));
-
 		entryoid = GetNewOidWithIndex(rel, AccessMethodProcedureOidIndexId,
 									  Anum_pg_amproc_oid);
 		values[Anum_pg_amproc_oid - 1] = ObjectIdGetDatum(entryoid);
diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c
index 7e0a041..e1eb06e 100644
--- a/src/backend/commands/prepare.c
+++ b/src/backend/commands/prepare.c
@@ -757,9 +757,7 @@ pg_prepared_statement(PG_FUNCTION_ARGS)
 		while ((prep_stmt = hash_seq_search(&hash_seq)) != NULL)
 		{
 			Datum		values[5];
-			bool		nulls[5];
-
-			MemSet(nulls, 0, sizeof(nulls));
+			bool		nulls[5] = {false};
 
 			values[0] = CStringGetTextDatum(prep_stmt->stmt_name);
 			values[1] = CStringGetTextDatum(prep_stmt->plansource->query_string);
diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c
index 343cd1d..99a6087 100644
--- a/src/backend/commands/proclang.c
+++ b/src/backend/commands/proclang.c
@@ -325,8 +325,8 @@ create_proc_lang(const char *languageName, bool replace,
 {
 	Relation	rel;
 	TupleDesc	tupDesc;
-	Datum		values[Natts_pg_language];
-	bool		nulls[Natts_pg_language];
+	Datum		values[Natts_pg_language] = {0};
+	bool		nulls[Natts_pg_language] = {false};
 	bool		replaces[Natts_pg_language];
 	NameData	langname;
 	HeapTuple	oldtup;
@@ -340,8 +340,6 @@ create_proc_lang(const char *languageName, bool replace,
 	tupDesc = RelationGetDescr(rel);
 
 	/* Prepare data to be inserted */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
 	memset(replaces, true, sizeof(replaces));
 
 	namestrcpy(&langname, languageName);
diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c
index f115d4b..fccc357 100644
--- a/src/backend/commands/publicationcmds.c
+++ b/src/backend/commands/publicationcmds.c
@@ -142,8 +142,8 @@ CreatePublication(CreatePublicationStmt *stmt)
 	Relation	rel;
 	ObjectAddress myself;
 	Oid			puboid;
-	bool		nulls[Natts_pg_publication];
-	Datum		values[Natts_pg_publication];
+	bool		nulls[Natts_pg_publication] = {false};
+	Datum		values[Natts_pg_publication] = {0};
 	HeapTuple	tup;
 	bool		publish_given;
 	bool		publish_insert;
@@ -178,9 +178,6 @@ CreatePublication(CreatePublicationStmt *stmt)
 	}
 
 	/* Form a tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	values[Anum_pg_publication_pubname - 1] =
 		DirectFunctionCall1(namein, CStringGetDatum(stmt->pubname));
 	values[Anum_pg_publication_pubowner - 1] = ObjectIdGetDatum(GetUserId());
@@ -250,9 +247,9 @@ static void
 AlterPublicationOptions(AlterPublicationStmt *stmt, Relation rel,
 						HeapTuple tup)
 {
-	bool		nulls[Natts_pg_publication];
-	bool		replaces[Natts_pg_publication];
-	Datum		values[Natts_pg_publication];
+	bool		nulls[Natts_pg_publication] = {false};
+	bool		replaces[Natts_pg_publication] = {false};
+	Datum		values[Natts_pg_publication] = {0};
 	bool		publish_given;
 	bool		publish_insert;
 	bool		publish_update;
@@ -267,10 +264,6 @@ AlterPublicationOptions(AlterPublicationStmt *stmt, Relation rel,
 							  &publish_truncate);
 
 	/* Everything ok, form a new tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
-
 	if (publish_given)
 	{
 		values[Anum_pg_publication_pubinsert - 1] = BoolGetDatum(publish_insert);
diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c
index 63219ad..de15630 100644
--- a/src/backend/commands/seclabel.c
+++ b/src/backend/commands/seclabel.c
@@ -258,12 +258,10 @@ SetSharedSecurityLabel(const ObjectAddress *object,
 	HeapTuple	oldtup;
 	HeapTuple	newtup = NULL;
 	Datum		values[Natts_pg_shseclabel];
-	bool		nulls[Natts_pg_shseclabel];
-	bool		replaces[Natts_pg_shseclabel];
+	bool		nulls[Natts_pg_shseclabel] = {false};
+	bool		replaces[Natts_pg_shseclabel] = {false};
 
 	/* Prepare to form or update a tuple, if necessary. */
-	memset(nulls, false, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
 	values[Anum_pg_shseclabel_objoid - 1] = ObjectIdGetDatum(object->objectId);
 	values[Anum_pg_shseclabel_classoid - 1] = ObjectIdGetDatum(object->classId);
 	values[Anum_pg_shseclabel_provider - 1] = CStringGetTextDatum(provider);
@@ -333,8 +331,8 @@ SetSecurityLabel(const ObjectAddress *object,
 	HeapTuple	oldtup;
 	HeapTuple	newtup = NULL;
 	Datum		values[Natts_pg_seclabel];
-	bool		nulls[Natts_pg_seclabel];
-	bool		replaces[Natts_pg_seclabel];
+	bool		nulls[Natts_pg_seclabel] = {false};
+	bool		replaces[Natts_pg_seclabel] = {false};
 
 	/* Shared objects have their own security label catalog. */
 	if (IsSharedRelation(object->classId))
@@ -344,8 +342,6 @@ SetSecurityLabel(const ObjectAddress *object,
 	}
 
 	/* Prepare to form or update a tuple, if necessary. */
-	memset(nulls, false, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
 	values[Anum_pg_seclabel_objoid - 1] = ObjectIdGetDatum(object->objectId);
 	values[Anum_pg_seclabel_classoid - 1] = ObjectIdGetDatum(object->classId);
 	values[Anum_pg_seclabel_objsubid - 1] = Int32GetDatum(object->objectSubId);
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index f51eb7b..e9a8f9e 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -69,10 +69,10 @@ CreateStatistics(CreateStatsStmt *stmt)
 	Oid			namespaceId;
 	Oid			stxowner = GetUserId();
 	HeapTuple	htup;
-	Datum		values[Natts_pg_statistic_ext];
-	bool		nulls[Natts_pg_statistic_ext];
-	Datum		datavalues[Natts_pg_statistic_ext_data];
-	bool		datanulls[Natts_pg_statistic_ext_data];
+	Datum		values[Natts_pg_statistic_ext] = {0};
+	bool		nulls[Natts_pg_statistic_ext] = {false};
+	Datum		datavalues[Natts_pg_statistic_ext_data] = {0};
+	bool		datanulls[Natts_pg_statistic_ext_data] = {false};
 	int2vector *stxkeys;
 	Relation	statrel;
 	Relation	datarel;
@@ -330,9 +330,6 @@ CreateStatistics(CreateStatsStmt *stmt)
 	/*
 	 * Everything seems fine, so let's build the pg_statistic_ext tuple.
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	statoid = GetNewOidWithIndex(statrel, StatisticExtOidIndexId,
 								 Anum_pg_statistic_ext_oid);
 	values[Anum_pg_statistic_ext_oid - 1] = ObjectIdGetDatum(statoid);
@@ -357,9 +354,6 @@ CreateStatistics(CreateStatsStmt *stmt)
 	 */
 	datarel = table_open(StatisticExtDataRelationId, RowExclusiveLock);
 
-	memset(datavalues, 0, sizeof(datavalues));
-	memset(datanulls, false, sizeof(datanulls));
-
 	datavalues[Anum_pg_statistic_ext_data_stxoid - 1] = ObjectIdGetDatum(statoid);
 
 	/* no statistics built yet */
@@ -607,9 +601,9 @@ UpdateStatisticsForTypeChange(Oid statsOid, Oid relationOid, int attnum,
 
 	Relation	rel;
 
-	Datum		values[Natts_pg_statistic_ext_data];
-	bool		nulls[Natts_pg_statistic_ext_data];
-	bool		replaces[Natts_pg_statistic_ext_data];
+	Datum		values[Natts_pg_statistic_ext_data] = {0};
+	bool		nulls[Natts_pg_statistic_ext_data] = {false};
+	bool		replaces[Natts_pg_statistic_ext_data] = {false};
 
 	oldtup = SearchSysCache1(STATEXTDATASTXOID, ObjectIdGetDatum(statsOid));
 	if (!HeapTupleIsValid(oldtup))
@@ -630,10 +624,6 @@ UpdateStatisticsForTypeChange(Oid statsOid, Oid relationOid, int attnum,
 	 * OK, we need to reset some statistics. So let's build the new tuple,
 	 * replacing the affected statistics types with NULL.
 	 */
-	memset(nulls, 0, Natts_pg_statistic_ext_data * sizeof(bool));
-	memset(replaces, 0, Natts_pg_statistic_ext_data * sizeof(bool));
-	memset(values, 0, Natts_pg_statistic_ext_data * sizeof(Datum));
-
 	replaces[Anum_pg_statistic_ext_data_stxdmcv - 1] = true;
 	nulls[Anum_pg_statistic_ext_data_stxdmcv - 1] = true;
 
diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c
index 2e67a58..4cabcc3 100644
--- a/src/backend/commands/subscriptioncmds.c
+++ b/src/backend/commands/subscriptioncmds.c
@@ -317,8 +317,8 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel)
 	Relation	rel;
 	ObjectAddress myself;
 	Oid			subid;
-	bool		nulls[Natts_pg_subscription];
-	Datum		values[Natts_pg_subscription];
+	bool		nulls[Natts_pg_subscription] = {false};
+	Datum		values[Natts_pg_subscription] = {0};
 	Oid			owner = GetUserId();
 	HeapTuple	tup;
 	bool		connect;
@@ -396,9 +396,6 @@ CreateSubscription(CreateSubscriptionStmt *stmt, bool isTopLevel)
 	walrcv_check_conninfo(conninfo);
 
 	/* Everything ok, form a new tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	subid = GetNewOidWithIndex(rel, SubscriptionObjectIndexId,
 							   Anum_pg_subscription_oid);
 	values[Anum_pg_subscription_oid - 1] = ObjectIdGetDatum(subid);
@@ -636,9 +633,9 @@ AlterSubscription(AlterSubscriptionStmt *stmt)
 {
 	Relation	rel;
 	ObjectAddress myself;
-	bool		nulls[Natts_pg_subscription];
-	bool		replaces[Natts_pg_subscription];
-	Datum		values[Natts_pg_subscription];
+	bool		nulls[Natts_pg_subscription] = {false};
+	bool		replaces[Natts_pg_subscription] = {false};
+	Datum		values[Natts_pg_subscription] = {0};
 	HeapTuple	tup;
 	Oid			subid;
 	bool		update_tuple = false;
@@ -671,9 +668,6 @@ AlterSubscription(AlterSubscriptionStmt *stmt)
 	LockSharedObject(SubscriptionRelationId, subid, 0, AccessExclusiveLock);
 
 	/* Form a new tuple. */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
 
 	switch (stmt->kind)
 	{
diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index 84efb41..3c01980 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -236,7 +236,7 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
 #ifdef HAVE_SYMLINK
 	Relation	rel;
 	Datum		values[Natts_pg_tablespace];
-	bool		nulls[Natts_pg_tablespace];
+	bool		nulls[Natts_pg_tablespace] = {false};
 	HeapTuple	tuple;
 	Oid			tablespaceoid;
 	char	   *location;
@@ -334,8 +334,6 @@ CreateTableSpace(CreateTableSpaceStmt *stmt)
 	 */
 	rel = table_open(TableSpaceRelationId, RowExclusiveLock);
 
-	MemSet(nulls, false, sizeof(nulls));
-
 	tablespaceoid = GetNewOidWithIndex(rel, TablespaceOidIndexId,
 									   Anum_pg_tablespace_oid);
 	values[Anum_pg_tablespace_oid - 1] = ObjectIdGetDatum(tablespaceoid);
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c
index cdb1105..56ff802 100644
--- a/src/backend/commands/trigger.c
+++ b/src/backend/commands/trigger.c
@@ -171,7 +171,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
 	List	   *whenRtable;
 	char	   *qual;
 	Datum		values[Natts_pg_trigger];
-	bool		nulls[Natts_pg_trigger];
+	bool		nulls[Natts_pg_trigger] = {false};
 	Relation	rel;
 	AclResult	aclresult;
 	Relation	tgrel;
@@ -844,8 +844,6 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
 	 * makes the triggers in partitions identical to the ones in the
 	 * partitioned tables, except that they are marked internal.
 	 */
-	memset(nulls, false, sizeof(nulls));
-
 	values[Anum_pg_trigger_oid - 1] = ObjectIdGetDatum(trigoid);
 	values[Anum_pg_trigger_tgrelid - 1] = ObjectIdGetDatum(RelationGetRelid(rel));
 	values[Anum_pg_trigger_tgname - 1] = DirectFunctionCall1(namein,
diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c
index 5d6528f..77270aa 100644
--- a/src/backend/commands/tsearchcmds.c
+++ b/src/backend/commands/tsearchcmds.c
@@ -179,8 +179,8 @@ DefineTSParser(List *names, List *parameters)
 	ListCell   *pl;
 	Relation	prsRel;
 	HeapTuple	tup;
-	Datum		values[Natts_pg_ts_parser];
-	bool		nulls[Natts_pg_ts_parser];
+	Datum		values[Natts_pg_ts_parser] = {0};
+	bool		nulls[Natts_pg_ts_parser] = {false};
 	NameData	pname;
 	Oid			prsOid;
 	Oid			namespaceoid;
@@ -197,9 +197,6 @@ DefineTSParser(List *names, List *parameters)
 	namespaceoid = QualifiedNameGetCreationNamespace(names, &prsname);
 
 	/* initialize tuple fields with name/namespace */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	prsOid = GetNewOidWithIndex(prsRel, TSParserOidIndexId,
 								Anum_pg_ts_parser_oid);
 	values[Anum_pg_ts_parser_oid - 1] = ObjectIdGetDatum(prsOid);
@@ -414,8 +411,8 @@ DefineTSDictionary(List *names, List *parameters)
 	ListCell   *pl;
 	Relation	dictRel;
 	HeapTuple	tup;
-	Datum		values[Natts_pg_ts_dict];
-	bool		nulls[Natts_pg_ts_dict];
+	Datum		values[Natts_pg_ts_dict] = {0};
+	bool		nulls[Natts_pg_ts_dict] = {false};
 	NameData	dname;
 	Oid			templId = InvalidOid;
 	List	   *dictoptions = NIL;
@@ -468,9 +465,6 @@ DefineTSDictionary(List *names, List *parameters)
 	/*
 	 * Looks good, insert
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	dictOid = GetNewOidWithIndex(dictRel, TSDictionaryOidIndexId,
 								 Anum_pg_ts_dict_oid);
 	values[Anum_pg_ts_dict_oid - 1] = ObjectIdGetDatum(dictOid);
@@ -733,7 +727,7 @@ DefineTSTemplate(List *names, List *parameters)
 	Relation	tmplRel;
 	HeapTuple	tup;
 	Datum		values[Natts_pg_ts_template];
-	bool		nulls[Natts_pg_ts_template];
+	bool		nulls[Natts_pg_ts_template] = {false};
 	NameData	dname;
 	int			i;
 	Oid			tmplOid;
@@ -753,7 +747,6 @@ DefineTSTemplate(List *names, List *parameters)
 
 	for (i = 0; i < Natts_pg_ts_template; i++)
 	{
-		nulls[i] = false;
 		values[i] = ObjectIdGetDatum(InvalidOid);
 	}
 
@@ -965,8 +958,8 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied)
 	Relation	cfgRel;
 	Relation	mapRel = NULL;
 	HeapTuple	tup;
-	Datum		values[Natts_pg_ts_config];
-	bool		nulls[Natts_pg_ts_config];
+	Datum		values[Natts_pg_ts_config] = {0};
+	bool		nulls[Natts_pg_ts_config] = {false};
 	AclResult	aclresult;
 	Oid			namespaceoid;
 	char	   *cfgname;
@@ -1050,9 +1043,6 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied)
 	/*
 	 * Looks good, build tuple and insert
 	 */
-	memset(values, 0, sizeof(values));
-	memset(nulls, false, sizeof(nulls));
-
 	cfgOid = GetNewOidWithIndex(cfgRel, TSConfigOidIndexId,
 								Anum_pg_ts_config_oid);
 	values[Anum_pg_ts_config_oid - 1] = ObjectIdGetDatum(cfgOid);
@@ -1089,11 +1079,8 @@ DefineTSConfiguration(List *names, List *parameters, ObjectAddress *copied)
 		{
 			Form_pg_ts_config_map cfgmap = (Form_pg_ts_config_map) GETSTRUCT(maptup);
 			HeapTuple	newmaptup;
-			Datum		mapvalues[Natts_pg_ts_config_map];
-			bool		mapnulls[Natts_pg_ts_config_map];
-
-			memset(mapvalues, 0, sizeof(mapvalues));
-			memset(mapnulls, false, sizeof(mapnulls));
+			Datum		mapvalues[Natts_pg_ts_config_map] = {0};
+			bool		mapnulls[Natts_pg_ts_config_map] = {false};
 
 			mapvalues[Anum_pg_ts_config_map_mapcfg - 1] = cfgOid;
 			mapvalues[Anum_pg_ts_config_map_maptokentype - 1] = cfgmap->maptokentype;
@@ -1420,9 +1407,8 @@ MakeConfigurationMapping(AlterTSConfigurationStmt *stmt,
 			for (j = 0; j < ndict; j++)
 			{
 				Datum		values[Natts_pg_ts_config_map];
-				bool		nulls[Natts_pg_ts_config_map];
+				bool		nulls[Natts_pg_ts_config_map] = {false};
 
-				memset(nulls, false, sizeof(nulls));
 				values[Anum_pg_ts_config_map_mapcfg - 1] = ObjectIdGetDatum(cfgId);
 				values[Anum_pg_ts_config_map_maptokentype - 1] = Int32GetDatum(tokens[i]);
 				values[Anum_pg_ts_config_map_mapseqno - 1] = Int32GetDatum(j + 1);
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 2221c04..9f4e71c 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -2414,8 +2414,8 @@ static void
 fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc,
 			  int lineno, HbaLine *hba, const char *err_msg)
 {
-	Datum		values[NUM_PG_HBA_FILE_RULES_ATTS];
-	bool		nulls[NUM_PG_HBA_FILE_RULES_ATTS];
+	Datum		values[NUM_PG_HBA_FILE_RULES_ATTS] = {0};
+	bool		nulls[NUM_PG_HBA_FILE_RULES_ATTS] = {false};
 	char		buffer[NI_MAXHOST];
 	HeapTuple	tuple;
 	int			index;
@@ -2427,8 +2427,6 @@ fill_hba_line(Tuplestorestate *tuple_store, TupleDesc tupdesc,
 
 	Assert(tupdesc->natts == NUM_PG_HBA_FILE_RULES_ATTS);
 
-	memset(values, 0, sizeof(values));
-	memset(nulls, 0, sizeof(nulls));
 	index = 0;
 
 	/* line_number */
diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c
index 186057b..83e646e 100644
--- a/src/backend/replication/logical/launcher.c
+++ b/src/backend/replication/logical/launcher.c
@@ -1136,8 +1136,8 @@ pg_stat_get_subscription(PG_FUNCTION_ARGS)
 	for (i = 0; i <= max_logical_replication_workers; i++)
 	{
 		/* for each row */
-		Datum		values[PG_STAT_GET_SUBSCRIPTION_COLS];
-		bool		nulls[PG_STAT_GET_SUBSCRIPTION_COLS];
+		Datum		values[PG_STAT_GET_SUBSCRIPTION_COLS] = {0};
+		bool		nulls[PG_STAT_GET_SUBSCRIPTION_COLS] = {false};
 		int			worker_pid;
 		LogicalRepWorker worker;
 
@@ -1151,9 +1151,6 @@ pg_stat_get_subscription(PG_FUNCTION_ARGS)
 
 		worker_pid = worker.proc->pid;
 
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, 0, sizeof(nulls));
-
 		values[0] = ObjectIdGetDatum(worker.subid);
 		if (OidIsValid(worker.relid))
 			values[1] = ObjectIdGetDatum(worker.relid);
diff --git a/src/backend/replication/logical/logicalfuncs.c b/src/backend/replication/logical/logicalfuncs.c
index d1cf80d..2e3026c 100644
--- a/src/backend/replication/logical/logicalfuncs.c
+++ b/src/backend/replication/logical/logicalfuncs.c
@@ -75,7 +75,7 @@ LogicalOutputWrite(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xi
 				   bool last_write)
 {
 	Datum		values[3];
-	bool		nulls[3];
+	bool		nulls[3] = {false};
 	DecodingOutputState *p;
 
 	/* SQL Datums can only be of a limited length... */
@@ -84,7 +84,6 @@ LogicalOutputWrite(LogicalDecodingContext *ctx, XLogRecPtr lsn, TransactionId xi
 
 	p = (DecodingOutputState *) ctx->output_writer_private;
 
-	memset(nulls, 0, sizeof(nulls));
 	values[0] = LSNGetDatum(lsn);
 	values[1] = TransactionIdGetDatum(xid);
 
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 07ae613..b5c1fc9 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -275,7 +275,7 @@ replorigin_create(char *roname)
 
 	for (roident = InvalidOid + 1; roident < PG_UINT16_MAX; roident++)
 	{
-		bool		nulls[Natts_pg_replication_origin];
+		bool		nulls[Natts_pg_replication_origin] = {false};
 		Datum		values[Natts_pg_replication_origin];
 		bool		collides;
 
@@ -301,8 +301,6 @@ replorigin_create(char *roname)
 			 * Ok, found an unused roident, insert the new row and do a CCI,
 			 * so our callers can look it up if they want to.
 			 */
-			memset(&nulls, 0, sizeof(nulls));
-
 			values[Anum_pg_replication_origin_roident - 1] = ObjectIdGetDatum(roident);
 			values[Anum_pg_replication_origin_roname - 1] = roname_d;
 
@@ -1517,7 +1515,7 @@ pg_show_replication_origin_status(PG_FUNCTION_ARGS)
 	for (i = 0; i < max_replication_slots; i++)
 	{
 		ReplicationState *state;
-		Datum		values[REPLICATION_ORIGIN_PROGRESS_COLS];
+		Datum		values[REPLICATION_ORIGIN_PROGRESS_COLS] = {0};
 		bool		nulls[REPLICATION_ORIGIN_PROGRESS_COLS];
 		char	   *roname;
 
@@ -1527,7 +1525,6 @@ pg_show_replication_origin_status(PG_FUNCTION_ARGS)
 		if (state->roident == InvalidRepOriginId)
 			continue;
 
-		memset(values, 0, sizeof(values));
 		memset(nulls, 1, sizeof(nulls));
 
 		values[0] = ObjectIdGetDatum(state->roident);
diff --git a/src/backend/replication/slotfuncs.c b/src/backend/replication/slotfuncs.c
index 42da631..1cad40a 100644
--- a/src/backend/replication/slotfuncs.c
+++ b/src/backend/replication/slotfuncs.c
@@ -77,7 +77,7 @@ pg_create_physical_replication_slot(PG_FUNCTION_ARGS)
 	bool		immediately_reserve = PG_GETARG_BOOL(1);
 	bool		temporary = PG_GETARG_BOOL(2);
 	Datum		values[2];
-	bool		nulls[2];
+	bool		nulls[2] = {false};
 	TupleDesc	tupdesc;
 	HeapTuple	tuple;
 	Datum		result;
@@ -95,12 +95,10 @@ pg_create_physical_replication_slot(PG_FUNCTION_ARGS)
 									 InvalidXLogRecPtr);
 
 	values[0] = NameGetDatum(&MyReplicationSlot->data.name);
-	nulls[0] = false;
 
 	if (immediately_reserve)
 	{
 		values[1] = LSNGetDatum(MyReplicationSlot->data.restart_lsn);
-		nulls[1] = false;
 	}
 	else
 		nulls[1] = true;
@@ -167,7 +165,7 @@ pg_create_logical_replication_slot(PG_FUNCTION_ARGS)
 	TupleDesc	tupdesc;
 	HeapTuple	tuple;
 	Datum		values[2];
-	bool		nulls[2];
+	bool		nulls[2] = {false};
 
 	if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE)
 		elog(ERROR, "return type must be a row type");
@@ -184,8 +182,6 @@ pg_create_logical_replication_slot(PG_FUNCTION_ARGS)
 	values[0] = NameGetDatum(&MyReplicationSlot->data.name);
 	values[1] = LSNGetDatum(MyReplicationSlot->data.confirmed_flush);
 
-	memset(nulls, 0, sizeof(nulls));
-
 	tuple = heap_form_tuple(tupdesc, values, nulls);
 	result = HeapTupleGetDatum(tuple);
 
@@ -265,7 +261,7 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
 	{
 		ReplicationSlot *slot = &ReplicationSlotCtl->replication_slots[slotno];
 		Datum		values[PG_GET_REPLICATION_SLOTS_COLS];
-		bool		nulls[PG_GET_REPLICATION_SLOTS_COLS];
+		bool		nulls[PG_GET_REPLICATION_SLOTS_COLS] = {false};
 
 		ReplicationSlotPersistency persistency;
 		TransactionId xmin;
@@ -295,8 +291,6 @@ pg_get_replication_slots(PG_FUNCTION_ARGS)
 
 		SpinLockRelease(&slot->mutex);
 
-		memset(nulls, 0, sizeof(nulls));
-
 		i = 0;
 		values[i++] = NameGetDatum(&slot_name);
 
@@ -513,7 +507,7 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 	XLogRecPtr	minlsn;
 	TupleDesc	tupdesc;
 	Datum		values[2];
-	bool		nulls[2];
+	bool		nulls[2] = {false};
 	HeapTuple	tuple;
 	Datum		result;
 
@@ -572,7 +566,6 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 		endlsn = pg_physical_replication_slot_advance(moveto);
 
 	values[0] = NameGetDatum(&MyReplicationSlot->data.name);
-	nulls[0] = false;
 
 	/* Update the on disk state when lsn was updated. */
 	if (XLogRecPtrIsInvalid(endlsn))
@@ -587,7 +580,6 @@ pg_replication_slot_advance(PG_FUNCTION_ARGS)
 
 	/* Return the reached position. */
 	values[1] = LSNGetDatum(endlsn);
-	nulls[1] = false;
 
 	tuple = heap_form_tuple(tupdesc, values, nulls);
 	result = HeapTupleGetDatum(tuple);
@@ -609,7 +601,7 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
 	bool		temporary;
 	char	   *plugin;
 	Datum		values[2];
-	bool		nulls[2];
+	bool		nulls[2] = {false};
 	Datum		result;
 	TupleDesc	tupdesc;
 	HeapTuple	tuple;
@@ -779,11 +771,9 @@ copy_replication_slot(FunctionCallInfo fcinfo, bool logical_slot)
 
 	/* All done.  Set up the return values */
 	values[0] = NameGetDatum(dst_name);
-	nulls[0] = false;
 	if (!XLogRecPtrIsInvalid(MyReplicationSlot->data.confirmed_flush))
 	{
 		values[1] = LSNGetDatum(MyReplicationSlot->data.confirmed_flush);
-		nulls[1] = false;
 	}
 	else
 		nulls[1] = true;
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index eb4a98c..d17ab54 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -351,7 +351,7 @@ IdentifySystem(void)
 	TupOutputState *tstate;
 	TupleDesc	tupdesc;
 	Datum		values[4];
-	bool		nulls[4];
+	bool		nulls[4] = {false};
 
 	/*
 	 * Reply with a result set with one row, four columns. First col is system
@@ -388,7 +388,6 @@ IdentifySystem(void)
 	}
 
 	dest = CreateDestReceiver(DestRemoteSimple);
-	MemSet(nulls, false, sizeof(nulls));
 
 	/* need a tuple descriptor representing four columns */
 	tupdesc = CreateTemplateTupleDesc(4);
@@ -717,14 +716,13 @@ StartReplication(StartReplicationCmd *cmd)
 		TupOutputState *tstate;
 		TupleDesc	tupdesc;
 		Datum		values[2];
-		bool		nulls[2];
+		bool		nulls[2] = {false};
 
 		snprintf(startpos_str, sizeof(startpos_str), "%X/%X",
 				 (uint32) (sendTimeLineValidUpto >> 32),
 				 (uint32) sendTimeLineValidUpto);
 
 		dest = CreateDestReceiver(DestRemoteSimple);
-		MemSet(nulls, false, sizeof(nulls));
 
 		/*
 		 * Need a tuple descriptor representing two columns. int8 may seem
@@ -859,7 +857,7 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
 	TupOutputState *tstate;
 	TupleDesc	tupdesc;
 	Datum		values[4];
-	bool		nulls[4];
+	bool		nulls[4] = {false};
 
 	Assert(!MyReplicationSlot);
 
@@ -995,7 +993,6 @@ CreateReplicationSlot(CreateReplicationSlotCmd *cmd)
 			 (uint32) MyReplicationSlot->data.confirmed_flush);
 
 	dest = CreateDestReceiver(DestRemoteSimple);
-	MemSet(nulls, false, sizeof(nulls));
 
 	/*----------
 	 * Need a tuple descriptor representing four columns:
@@ -3286,7 +3283,7 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 		WalSndState state;
 		TimestampTz replyTime;
 		Datum		values[PG_STAT_GET_WAL_SENDERS_COLS];
-		bool		nulls[PG_STAT_GET_WAL_SENDERS_COLS];
+		bool		nulls[PG_STAT_GET_WAL_SENDERS_COLS] = {false};
 
 		SpinLockAcquire(&walsnd->mutex);
 		if (walsnd->pid == 0)
@@ -3307,7 +3304,6 @@ pg_stat_get_wal_senders(PG_FUNCTION_ARGS)
 		replyTime = walsnd->replyTime;
 		SpinLockRelease(&walsnd->mutex);
 
-		memset(nulls, 0, sizeof(nulls));
 		values[0] = Int32GetDatum(pid);
 
 		if (!is_member_of_role(GetUserId(), DEFAULT_ROLE_READ_ALL_STATS))
diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c
index 7df2b61..179e283 100644
--- a/src/backend/rewrite/rewriteDefine.c
+++ b/src/backend/rewrite/rewriteDefine.c
@@ -67,8 +67,8 @@ InsertRule(const char *rulname,
 	char	   *evqual = nodeToString(event_qual);
 	char	   *actiontree = nodeToString((Node *) action);
 	Datum		values[Natts_pg_rewrite];
-	bool		nulls[Natts_pg_rewrite];
-	bool		replaces[Natts_pg_rewrite];
+	bool		nulls[Natts_pg_rewrite] = {false};
+	bool		replaces[Natts_pg_rewrite] = {false};
 	NameData	rname;
 	Relation	pg_rewrite_desc;
 	HeapTuple	tup,
@@ -79,10 +79,8 @@ InsertRule(const char *rulname,
 	bool		is_update = false;
 
 	/*
-	 * Set up *nulls and *values arrays
+	 * Set up *values array
 	 */
-	MemSet(nulls, false, sizeof(nulls));
-
 	namestrcpy(&rname, rulname);
 	values[Anum_pg_rewrite_rulename - 1] = NameGetDatum(&rname);
 	values[Anum_pg_rewrite_ev_class - 1] = ObjectIdGetDatum(eventrel_oid);
@@ -115,7 +113,6 @@ InsertRule(const char *rulname,
 		/*
 		 * When replacing, we don't need to replace every attribute
 		 */
-		MemSet(replaces, false, sizeof(replaces));
 		replaces[Anum_pg_rewrite_ev_type - 1] = true;
 		replaces[Anum_pg_rewrite_is_instead - 1] = true;
 		replaces[Anum_pg_rewrite_ev_qual - 1] = true;
diff --git a/src/backend/statistics/extended_stats.c b/src/backend/statistics/extended_stats.c
index 207ee31..1ee9127 100644
--- a/src/backend/statistics/extended_stats.c
+++ b/src/backend/statistics/extended_stats.c
@@ -471,14 +471,12 @@ statext_store(Oid statOid,
 {
 	HeapTuple	stup,
 				oldtup;
-	Datum		values[Natts_pg_statistic_ext_data];
+	Datum		values[Natts_pg_statistic_ext_data] = {0};
 	bool		nulls[Natts_pg_statistic_ext_data];
-	bool		replaces[Natts_pg_statistic_ext_data];
+	bool		replaces[Natts_pg_statistic_ext_data] = {false};
 	Relation	pg_stextdata;
 
 	memset(nulls, true, sizeof(nulls));
-	memset(replaces, false, sizeof(replaces));
-	memset(values, 0, sizeof(values));
 
 	/*
 	 * Construct a new pg_statistic_ext_data tuple, replacing the calculated
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index e591236..f773a59 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -608,9 +608,6 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 	}			workbuf;
 	char	   *workb = VARDATA(&workbuf.hdr);
 	HeapTuple	newtup;
-	Datum		values[Natts_pg_largeobject];
-	bool		nulls[Natts_pg_largeobject];
-	bool		replace[Natts_pg_largeobject];
 	CatalogIndexState indstate;
 
 	Assert(PointerIsValid(obj_desc));
@@ -656,6 +653,10 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 
 	while (nwritten < nbytes)
 	{
+		Datum           values[Natts_pg_largeobject] = {0};
+		bool            nulls[Natts_pg_largeobject] = {false};
+		bool            replace[Natts_pg_largeobject] = {false};
+
 		/*
 		 * If possible, get next pre-existing page of the LO.  We expect the
 		 * indexscan will deliver these in order --- but there may be holes.
@@ -711,9 +712,6 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 			/*
 			 * Form and insert updated tuple
 			 */
-			memset(values, 0, sizeof(values));
-			memset(nulls, false, sizeof(nulls));
-			memset(replace, false, sizeof(replace));
 			values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf);
 			replace[Anum_pg_largeobject_data - 1] = true;
 			newtup = heap_modify_tuple(oldtuple, RelationGetDescr(lo_heap_r),
@@ -755,8 +753,6 @@ inv_write(LargeObjectDesc *obj_desc, const char *buf, int nbytes)
 			/*
 			 * Form and insert updated tuple
 			 */
-			memset(values, 0, sizeof(values));
-			memset(nulls, false, sizeof(nulls));
 			values[Anum_pg_largeobject_loid - 1] = ObjectIdGetDatum(obj_desc->id);
 			values[Anum_pg_largeobject_pageno - 1] = Int32GetDatum(pageno);
 			values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf);
@@ -799,9 +795,9 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len)
 	}			workbuf;
 	char	   *workb = VARDATA(&workbuf.hdr);
 	HeapTuple	newtup;
-	Datum		values[Natts_pg_largeobject];
-	bool		nulls[Natts_pg_largeobject];
-	bool		replace[Natts_pg_largeobject];
+	Datum		values[Natts_pg_largeobject] = {0};
+	bool		nulls[Natts_pg_largeobject] = {false};
+	bool		replace[Natts_pg_largeobject] = {false};
 	CatalogIndexState indstate;
 
 	Assert(PointerIsValid(obj_desc));
@@ -886,9 +882,6 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len)
 		/*
 		 * Form and insert updated tuple
 		 */
-		memset(values, 0, sizeof(values));
-		memset(nulls, false, sizeof(nulls));
-		memset(replace, false, sizeof(replace));
 		values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf);
 		replace[Anum_pg_largeobject_data - 1] = true;
 		newtup = heap_modify_tuple(oldtuple, RelationGetDescr(lo_heap_r),
@@ -925,8 +918,6 @@ inv_truncate(LargeObjectDesc *obj_desc, int64 len)
 		/*
 		 * Form and insert new tuple
 		 */
-		memset(values, 0, sizeof(values));
-		memset(nulls, false, sizeof(nulls));
 		values[Anum_pg_largeobject_loid - 1] = ObjectIdGetDatum(obj_desc->id);
 		values[Anum_pg_largeobject_pageno - 1] = Int32GetDatum(pageno);
 		values[Anum_pg_largeobject_data - 1] = PointerGetDatum(&workbuf);
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index d7e6100..f6be73e 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -1810,7 +1810,7 @@ aclexplode(PG_FUNCTION_ARGS)
 		{
 			Datum		result;
 			Datum		values[4];
-			bool		nulls[4];
+			bool		nulls[4] = {false};
 			HeapTuple	tuple;
 
 			values[0] = ObjectIdGetDatum(aidata->ai_grantor);
@@ -1818,8 +1818,6 @@ aclexplode(PG_FUNCTION_ARGS)
 			values[2] = CStringGetTextDatum(convert_aclright_to_string(priv_bit));
 			values[3] = BoolGetDatum((ACLITEM_GET_GOPTIONS(*aidata) & priv_bit) != 0);
 
-			MemSet(nulls, 0, sizeof(nulls));
-
 			tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
 			result = HeapTupleGetDatum(tuple);
 
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index 8079b13..afc3f08 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -738,11 +738,10 @@ ReadArrayStr(char *arrayStr,
 	bool		eoArray = false;
 	bool		hasnull;
 	int32		totbytes;
-	int			indx[MAXDIM],
+	int			indx[MAXDIM] = {0},
 				prod[MAXDIM];
 
 	mda_get_prod(ndim, dim, prod);
-	MemSet(indx, 0, sizeof(indx));
 
 	/* Initialize is-null markers to true */
 	memset(nulls, true, nitems * sizeof(bool));
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index e38bd93..2fdd9c6 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -4635,7 +4635,7 @@ pg_timezone_abbrevs(PG_FUNCTION_ARGS)
 	Datum		result;
 	HeapTuple	tuple;
 	Datum		values[3];
-	bool		nulls[3];
+	bool		nulls[3] = {false};
 	const datetkn *tp;
 	char		buffer[TOKMAXLEN + 1];
 	int			gmtoffset;
@@ -4722,8 +4722,6 @@ pg_timezone_abbrevs(PG_FUNCTION_ARGS)
 			break;
 	}
 
-	MemSet(nulls, 0, sizeof(nulls));
-
 	/*
 	 * Convert name to text, using upcasing conversion that is the inverse of
 	 * what ParseDateTime() uses.
@@ -4765,7 +4763,7 @@ pg_timezone_names(PG_FUNCTION_ARGS)
 	Datum		result;
 	HeapTuple	tuple;
 	Datum		values[4];
-	bool		nulls[4];
+	bool		nulls[4] = {false};
 	int			tzoff;
 	struct pg_tm tm;
 	fsec_t		fsec;
@@ -4847,8 +4845,6 @@ pg_timezone_names(PG_FUNCTION_ARGS)
 		break;
 	}
 
-	MemSet(nulls, 0, sizeof(nulls));
-
 	values[0] = CStringGetTextDatum(pg_get_timezone_name(tz));
 	values[1] = CStringGetTextDatum(tzn ? tzn : "");
 
diff --git a/src/backend/utils/adt/genfile.c b/src/backend/utils/adt/genfile.c
index 5d4f26a..8537085 100644
--- a/src/backend/utils/adt/genfile.c
+++ b/src/backend/utils/adt/genfile.c
@@ -576,7 +576,7 @@ pg_ls_dir_files(FunctionCallInfo fcinfo, const char *dir, bool missing_ok)
 	while ((de = ReadDir(fctx->dirdesc, fctx->location)) != NULL)
 	{
 		Datum		values[3];
-		bool		nulls[3];
+		bool		nulls[3] = {false};
 		char		path[MAXPGPATH * 2];
 		struct stat attrib;
 		HeapTuple	tuple;
@@ -599,7 +599,6 @@ pg_ls_dir_files(FunctionCallInfo fcinfo, const char *dir, bool missing_ok)
 		values[0] = CStringGetTextDatum(de->d_name);
 		values[1] = Int64GetDatum((int64) attrib.st_size);
 		values[2] = TimestampTzGetDatum(time_t_to_timestamptz(attrib.st_mtime));
-		memset(nulls, 0, sizeof(nulls));
 
 		tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
 		SRF_RETURN_NEXT(funcctx, HeapTupleGetDatum(tuple));
diff --git a/src/backend/utils/adt/lockfuncs.c b/src/backend/utils/adt/lockfuncs.c
index bc62c6e..19c5437 100644
--- a/src/backend/utils/adt/lockfuncs.c
+++ b/src/backend/utils/adt/lockfuncs.c
@@ -160,8 +160,8 @@ pg_lock_status(PG_FUNCTION_ARGS)
 		LOCKMODE	mode = 0;
 		const char *locktypename;
 		char		tnbuf[32];
-		Datum		values[NUM_LOCK_STATUS_COLUMNS];
-		bool		nulls[NUM_LOCK_STATUS_COLUMNS];
+		Datum		values[NUM_LOCK_STATUS_COLUMNS] = {0};
+		bool		nulls[NUM_LOCK_STATUS_COLUMNS] = {false};
 		HeapTuple	tuple;
 		Datum		result;
 		LockInstanceData *instance;
@@ -218,9 +218,6 @@ pg_lock_status(PG_FUNCTION_ARGS)
 		/*
 		 * Form tuple with appropriate data.
 		 */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
-
 		if (instance->locktag.locktag_type <= LOCKTAG_LAST_TYPE)
 			locktypename = LockTagTypeNames[instance->locktag.locktag_type];
 		else
@@ -332,8 +329,8 @@ pg_lock_status(PG_FUNCTION_ARGS)
 
 		PREDICATELOCKTARGETTAG *predTag = &(predLockData->locktags[mystatus->predLockIdx]);
 		SERIALIZABLEXACT *xact = &(predLockData->xacts[mystatus->predLockIdx]);
-		Datum		values[NUM_LOCK_STATUS_COLUMNS];
-		bool		nulls[NUM_LOCK_STATUS_COLUMNS];
+		Datum		values[NUM_LOCK_STATUS_COLUMNS] = {0};
+		bool		nulls[NUM_LOCK_STATUS_COLUMNS] = {false};
 		HeapTuple	tuple;
 		Datum		result;
 
@@ -342,8 +339,6 @@ pg_lock_status(PG_FUNCTION_ARGS)
 		/*
 		 * Form tuple with appropriate data.
 		 */
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, false, sizeof(nulls));
 
 		/* lock type */
 		lockType = GET_PREDICATELOCKTARGETTAG_TYPE(*predTag);
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 05240bf..fa24d56 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -492,13 +492,10 @@ pg_stat_get_progress_info(PG_FUNCTION_ARGS)
 	{
 		LocalPgBackendStatus *local_beentry;
 		PgBackendStatus *beentry;
-		Datum		values[PG_STAT_GET_PROGRESS_COLS];
-		bool		nulls[PG_STAT_GET_PROGRESS_COLS];
+		Datum		values[PG_STAT_GET_PROGRESS_COLS] = {0};
+		bool		nulls[PG_STAT_GET_PROGRESS_COLS] = {false};
 		int			i;
 
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, 0, sizeof(nulls));
-
 		local_beentry = pgstat_fetch_stat_local_beentry(curr_backend);
 
 		if (!local_beentry)
@@ -585,17 +582,14 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
 	for (curr_backend = 1; curr_backend <= num_backends; curr_backend++)
 	{
 		/* for each row */
-		Datum		values[PG_STAT_GET_ACTIVITY_COLS];
-		bool		nulls[PG_STAT_GET_ACTIVITY_COLS];
+		Datum		values[PG_STAT_GET_ACTIVITY_COLS] = {0};
+		bool		nulls[PG_STAT_GET_ACTIVITY_COLS] = {false};
 		LocalPgBackendStatus *local_beentry;
 		PgBackendStatus *beentry;
 		PGPROC	   *proc;
 		const char *wait_event_type = NULL;
 		const char *wait_event = NULL;
 
-		MemSet(values, 0, sizeof(values));
-		MemSet(nulls, 0, sizeof(nulls));
-
 		/* Get the next one in the list */
 		local_beentry = pgstat_fetch_stat_local_beentry(curr_backend);
 		if (!local_beentry)
@@ -1908,14 +1902,10 @@ Datum
 pg_stat_get_archiver(PG_FUNCTION_ARGS)
 {
 	TupleDesc	tupdesc;
-	Datum		values[7];
-	bool		nulls[7];
+	Datum		values[7] = {0};
+	bool		nulls[7] = {false};
 	PgStat_ArchiverStats *archiver_stats;
 
-	/* Initialise values and NULL flags arrays */
-	MemSet(values, 0, sizeof(values));
-	MemSet(nulls, 0, sizeof(nulls));
-
 	/* Initialise attributes information in the tuple descriptor */
 	tupdesc = CreateTemplateTupleDesc(7);
 	TupleDescInitEntry(tupdesc, (AttrNumber) 1, "archived_count",
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 2178e1c..52a1ed8 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -9483,11 +9483,8 @@ show_all_file_settings(PG_FUNCTION_ARGS)
 	/* Process the results and create a tuplestore */
 	for (seqno = 1; conf != NULL; conf = conf->next, seqno++)
 	{
-		Datum		values[NUM_PG_FILE_SETTINGS_ATTS];
-		bool		nulls[NUM_PG_FILE_SETTINGS_ATTS];
-
-		memset(values, 0, sizeof(values));
-		memset(nulls, 0, sizeof(nulls));
+		Datum		values[NUM_PG_FILE_SETTINGS_ATTS] = {0};
+		bool		nulls[NUM_PG_FILE_SETTINGS_ATTS] = {false};
 
 		/* sourcefile */
 		if (conf->filename)
diff --git a/src/backend/utils/mmgr/portalmem.c b/src/backend/utils/mmgr/portalmem.c
index 334e35b..0ecbeb7 100644
--- a/src/backend/utils/mmgr/portalmem.c
+++ b/src/backend/utils/mmgr/portalmem.c
@@ -1176,14 +1176,12 @@ pg_cursor(PG_FUNCTION_ARGS)
 	{
 		Portal		portal = hentry->portal;
 		Datum		values[6];
-		bool		nulls[6];
+		bool		nulls[6] = {false};
 
 		/* report only "visible" entries */
 		if (!portal->visible)
 			continue;
 
-		MemSet(nulls, 0, sizeof(nulls));
-
 		values[0] = CStringGetTextDatum(portal->name);
 		values[1] = CStringGetTextDatum(portal->sourceText);
 		values[2] = BoolGetDatum(portal->cursorOptions & CURSOR_OPT_HOLD);
