diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5e916c78d..29eae4d10 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,6 +20,7 @@ accidentally triggering the load of a previous DB version.**
 * #5214 Fix use of prepared statement in async module
 * #5290 Compression can't be enabled on continuous aggregates when segmentby/orderby columns need quotation
 * #5239 Fix next_start calculation for fixed schedules
+* #5336 Use NameData and namestrcpy for names
 
 ## 2.9.3 (2023-02-03)
 
diff --git a/scripts/test_update_from_tag.sh b/scripts/test_update_from_tag.sh
index cd95dc7fc..9ea9a0252 100755
--- a/scripts/test_update_from_tag.sh
+++ b/scripts/test_update_from_tag.sh
@@ -43,8 +43,12 @@ remove_containers() {
     docker rm -vf ${CONTAINER_CLEAN_RESTORE} 2>/dev/null
     docker rm -vf ${CONTAINER_UPDATED}  2>/dev/null
     docker rm -vf ${CONTAINER_CLEAN_RERUN} 2>/dev/null
-    docker volume rm -f ${CLEAN_VOLUME} 2>/dev/null
-    docker volume rm -f ${UPDATE_VOLUME} 2>/dev/null
+    if [[ -n "${CLEAN_VOLUME}" ]]; then
+	docker volume rm -f ${CLEAN_VOLUME} 2>/dev/null
+    fi
+    if [[ -n "${UPDATE_VOLUME}" ]]; then
+	docker volume rm -f ${UPDATE_VOLUME} 2>/dev/null
+    fi
 }
 
 cleanup() {
diff --git a/src/partitioning.c b/src/partitioning.c
index 33d4d9adc..f33aa7b1f 100644
--- a/src/partitioning.c
+++ b/src/partitioning.c
@@ -122,7 +122,11 @@ partitioning_func_set_func_fmgr(PartitioningFunc *pf, Oid argtype, DimensionType
 	if (dimtype != DIMENSION_TYPE_CLOSED && dimtype != DIMENSION_TYPE_OPEN)
 		elog(ERROR, "invalid dimension type %u", dimtype);
 
-	funcoid = ts_lookup_proc_filtered(pf->schema, pf->name, &pf->rettype, filter, &argtype);
+	funcoid = ts_lookup_proc_filtered(NameStr(pf->schema),
+									  NameStr(pf->name),
+									  &pf->rettype,
+									  filter,
+									  &argtype);
 
 	if (!OidIsValid(funcoid))
 	{
@@ -145,7 +149,7 @@ partitioning_func_set_func_fmgr(PartitioningFunc *pf, Oid argtype, DimensionType
 List *
 ts_partitioning_func_qualified_name(PartitioningFunc *pf)
 {
-	return list_make2(makeString(pf->schema), makeString(pf->name));
+	return list_make2(makeString(NameStr(pf->schema)), makeString(NameStr(pf->name)));
 }
 
 static Oid
@@ -184,16 +188,16 @@ ts_partitioning_info_create(const char *schema, const char *partfunc, const char
 				 errmsg("partitioning function information cannot be null")));
 
 	pinfo = palloc0(sizeof(PartitioningInfo));
-	strlcpy(pinfo->partfunc.name, partfunc, NAMEDATALEN);
-	strlcpy(pinfo->column, partcol, NAMEDATALEN);
-	pinfo->column_attnum = get_attnum(relid, pinfo->column);
+	namestrcpy(&pinfo->partfunc.name, partfunc);
+	namestrcpy(&pinfo->column, partcol);
+	pinfo->column_attnum = get_attnum(relid, NameStr(pinfo->column));
 	pinfo->dimtype = dimtype;
 
 	/* handle the case that the attribute has been dropped */
 	if (pinfo->column_attnum == InvalidAttrNumber)
 		return NULL;
 
-	strlcpy(pinfo->partfunc.schema, schema, NAMEDATALEN);
+	namestrcpy(&pinfo->partfunc.schema, schema);
 
 	/* Lookup the type cache entry to access the hash function for the type */
 	columntype = get_atttype(relid, pinfo->column_attnum);
@@ -250,8 +254,8 @@ ts_partitioning_func_apply(PartitioningInfo *pinfo, Oid collation, Datum value)
 	if (fcinfo->isnull)
 		elog(ERROR,
 			 "partitioning function \"%s.%s\" returned NULL",
-			 pinfo->partfunc.schema,
-			 pinfo->partfunc.name);
+			 NameStr(pinfo->partfunc.schema),
+			 NameStr(pinfo->partfunc.name));
 
 	return result;
 }
diff --git a/src/partitioning.h b/src/partitioning.h
index fae7cac5d..677831862 100644
--- a/src/partitioning.h
+++ b/src/partitioning.h
@@ -25,8 +25,8 @@
 
 typedef struct PartitioningFunc
 {
-	char schema[NAMEDATALEN];
-	char name[NAMEDATALEN];
+	NameData schema;
+	NameData name;
 	Oid rettype;
 
 	/*
@@ -38,7 +38,7 @@ typedef struct PartitioningFunc
 
 typedef struct PartitioningInfo
 {
-	char column[NAMEDATALEN];
+	NameData column;
 	AttrNumber column_attnum;
 	DimensionType dimtype;
 	PartitioningFunc partfunc;
diff --git a/src/ts_catalog/catalog.c b/src/ts_catalog/catalog.c
index 1e009012c..eb629d918 100644
--- a/src/ts_catalog/catalog.c
+++ b/src/ts_catalog/catalog.c
@@ -381,7 +381,7 @@ static void
 catalog_database_info_init(CatalogDatabaseInfo *info)
 {
 	info->database_id = MyDatabaseId;
-	strlcpy(info->database_name, get_database_name(MyDatabaseId), NAMEDATALEN);
+	namestrcpy(&info->database_name, get_database_name(MyDatabaseId));
 	info->schema_id = get_namespace_oid(CATALOG_SCHEMA_NAME, false);
 	info->owner_uid = catalog_owner();
 
diff --git a/src/ts_catalog/catalog.h b/src/ts_catalog/catalog.h
index 2c4796fef..ed3137ac1 100644
--- a/src/ts_catalog/catalog.h
+++ b/src/ts_catalog/catalog.h
@@ -1378,7 +1378,7 @@ typedef struct CatalogTableInfo
 
 typedef struct CatalogDatabaseInfo
 {
-	char database_name[NAMEDATALEN];
+	NameData database_name;
 	Oid database_id;
 	Oid schema_id;
 	Oid owner_uid;