diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 265cc3e5fbf..0e86445d58e 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -2635,6 +2635,7 @@ AddRelationNewConstraints(Relation rel,
 			 * requested validity.
 			 */
 			if (AdjustNotNullInheritance(RelationGetRelid(rel), colnum,
+										 cdef->conname,
 										 is_local, cdef->is_no_inherit,
 										 cdef->skip_validation))
 				continue;
diff --git a/src/backend/catalog/pg_constraint.c b/src/backend/catalog/pg_constraint.c
index 43b4507d86e..a4fa5a995fc 100644
--- a/src/backend/catalog/pg_constraint.c
+++ b/src/backend/catalog/pg_constraint.c
@@ -731,14 +731,15 @@ extractNotNullColumn(HeapTuple constrTup)
  * If a constraint exists but the connoinherit flag is not what the caller
  * wants, throw an error about the incompatibility.  If the desired
  * constraint is valid but the existing constraint is not valid, also
- * throw an error about that (the opposite case is acceptable).
+ * throw an error about that (the opposite case is acceptable).  If
+ * the proposed constraint has a different name, also throw an error.
  *
  * If everything checks out, we adjust conislocal/coninhcount and return
  * true.  If is_local is true we flip conislocal true, or do nothing if
  * it's already true; otherwise we increment coninhcount by 1.
  */
 bool
-AdjustNotNullInheritance(Oid relid, AttrNumber attnum,
+AdjustNotNullInheritance(Oid relid, AttrNumber attnum, const char *name,
 						 bool is_local, bool is_no_inherit, bool is_notvalid)
 {
 	HeapTuple	tup;
@@ -777,6 +778,18 @@ AdjustNotNullInheritance(Oid relid, AttrNumber attnum,
 					errhint("You might need to validate it using %s.",
 							"ALTER TABLE ... VALIDATE CONSTRAINT"));
 
+		/*
+		 * Throw an error if the proposed constraint name doesn't match the
+		 * existing one.
+		 */
+		if (name &&
+			strcmp(name, NameStr(conform->conname)) != 0)
+			ereport(ERROR,
+					errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
+					errmsg("mismatching constraint name \"%s\"", name),
+					errdetail("A not-null constraint named \"%s\" already exists for this column.",
+							  NameStr(conform->conname)));
+
 		if (!is_local)
 		{
 			if (pg_add_s16_overflow(conform->coninhcount, 1,
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 1c9ef53be20..9fac531ebc7 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -9958,7 +9958,7 @@ ATAddCheckNNConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel,
 		}
 
 		/* Save the actually assigned name if it was defaulted */
-		if (constr->conname == NULL)
+		if (ccon->contype == CONSTR_CHECK && constr->conname == NULL)
 			constr->conname = ccon->name;
 
 		/*
@@ -9975,8 +9975,10 @@ ATAddCheckNNConstraint(List **wqueue, AlteredTableInfo *tab, Relation rel,
 		ObjectAddressSet(address, ConstraintRelationId, ccon->conoid);
 	}
 
-	/* At this point we must have a locked-down name to use */
-	Assert(newcons == NIL || constr->conname != NULL);
+	/* At this point, CHECK constraints must have a locked-down name to use */
+	Assert(newcons == NIL ||
+		   constr->contype != CONSTR_CHECK ||
+		   constr->conname != NULL);
 
 	/* Advance command counter in case same table is visited multiple times */
 	CommandCounterIncrement();
diff --git a/src/include/catalog/pg_constraint.h b/src/include/catalog/pg_constraint.h
index 4afceb5c692..58e94a19ea5 100644
--- a/src/include/catalog/pg_constraint.h
+++ b/src/include/catalog/pg_constraint.h
@@ -263,7 +263,7 @@ extern HeapTuple findNotNullConstraintAttnum(Oid relid, AttrNumber attnum);
 extern HeapTuple findNotNullConstraint(Oid relid, const char *colname);
 extern HeapTuple findDomainNotNullConstraint(Oid typid);
 extern AttrNumber extractNotNullColumn(HeapTuple constrTup);
-extern bool AdjustNotNullInheritance(Oid relid, AttrNumber attnum,
+extern bool AdjustNotNullInheritance(Oid relid, AttrNumber attnum, const char *name,
 									 bool is_local, bool is_no_inherit, bool is_notvalid);
 extern List *RelationGetNotNullConstraints(Oid relid, bool cooked,
 										   bool include_noinh);
diff --git a/src/test/regress/expected/constraints.out b/src/test/regress/expected/constraints.out
index 1bbf59cca02..a77f71bb0a8 100644
--- a/src/test/regress/expected/constraints.out
+++ b/src/test/regress/expected/constraints.out
@@ -848,6 +848,8 @@ Not-null constraints:
 
 -- no-op
 ALTER TABLE notnull_tbl1 ADD CONSTRAINT nn NOT NULL a;
+ERROR:  mismatching constraint name "nn"
+DETAIL:  A not-null constraint named "notnull_tbl1_a_not_null" already exists for this column.
 \d+ notnull_tbl1
                                Table "public.notnull_tbl1"
  Column |  Type   | Collation | Nullable | Default | Storage | Stats target | Description 
@@ -1115,7 +1117,7 @@ Child tables: cnn_pk_child
  a      | integer |           |          |         | plain   |              | 
  b      | integer |           | not null |         | plain   |              | 
 Not-null constraints:
-    "cnn_pk_b_not_null" NOT NULL "b" (inherited)
+    "cnn_pk_child_b_not_null" NOT NULL "b" (inherited)
 Inherits: cnn_pk
 
 ALTER TABLE cnn_pk DROP CONSTRAINT cnn_primarykey;
@@ -1135,7 +1137,7 @@ Child tables: cnn_pk_child
  a      | integer |           |          |         | plain   |              | 
  b      | integer |           | not null |         | plain   |              | 
 Not-null constraints:
-    "cnn_pk_b_not_null" NOT NULL "b" (inherited)
+    "cnn_pk_child_b_not_null" NOT NULL "b" (inherited)
 Inherits: cnn_pk
 
 DROP TABLE cnn_pk, cnn_pk_child;
@@ -1208,7 +1210,7 @@ Child tables: cnn_pk_child
  a      | integer |           |          |         | plain   |              | 
  b      | integer |           | not null |         | plain   |              | 
 Not-null constraints:
-    "cnn_pk_b_not_null" NOT NULL "b" (inherited)
+    "cnn_pk_child_b_not_null" NOT NULL "b" (inherited)
 Inherits: cnn_pk
 
 DROP TABLE cnn_pk, cnn_pk_child;
@@ -1640,10 +1642,11 @@ create table constr_child (a int) inherits (constr_parent);
 NOTICE:  merging column "a" with inherited definition
 alter table constr_parent add not null a not valid;
 alter table constr_child validate constraint constr_parent_a_not_null;
+ERROR:  constraint "constr_parent_a_not_null" of relation "constr_child" does not exist
 EXECUTE get_nnconstraint_info('{constr_parent, constr_child}');
     tabname    |         conname          | convalidated | conislocal | coninhcount 
 ---------------+--------------------------+--------------+------------+-------------
- constr_child  | constr_parent_a_not_null | t            | f          |           1
+ constr_child  | constr_child_a_not_null  | f            | f          |           1
  constr_parent | constr_parent_a_not_null | f            | t          |           0
 (2 rows)
 
@@ -1651,10 +1654,11 @@ create table constr_parent2 (a int);
 create table constr_child2 () inherits (constr_parent2);
 alter table constr_parent2 add not null a not valid;
 alter table constr_child2 validate constraint constr_parent2_a_not_null;
+ERROR:  constraint "constr_parent2_a_not_null" of relation "constr_child2" does not exist
 EXECUTE get_nnconstraint_info('{constr_parent2, constr_child2}');
     tabname     |          conname          | convalidated | conislocal | coninhcount 
 ----------------+---------------------------+--------------+------------+-------------
- constr_child2  | constr_parent2_a_not_null | t            | f          |           1
+ constr_child2  | constr_child2_a_not_null  | f            | f          |           1
  constr_parent2 | constr_parent2_a_not_null | f            | t          |           0
 (2 rows)
 
@@ -1670,6 +1674,7 @@ EXECUTE get_nnconstraint_info('{constr_parent3, constr_child3}');
 
 COMMENT ON CONSTRAINT constr_parent2_a_not_null ON constr_parent2 IS 'this constraint is invalid';
 COMMENT ON CONSTRAINT constr_parent2_a_not_null ON constr_child2 IS 'this constraint is valid';
+ERROR:  constraint "constr_parent2_a_not_null" for table "constr_child2" does not exist
 DEALLOCATE get_nnconstraint_info;
 -- end NOT NULL NOT VALID
 -- Comments
diff --git a/src/test/regress/expected/foreign_data.out b/src/test/regress/expected/foreign_data.out
index cce49e509ab..68e0f33a65b 100644
--- a/src/test/regress/expected/foreign_data.out
+++ b/src/test/regress/expected/foreign_data.out
@@ -1569,7 +1569,7 @@ Child tables: ft2, FOREIGN
  c8     | integer |           |          |         |             | plain    |              | 
 Not-null constraints:
     "ft2_c1_not_null" NOT NULL "c1" (local, inherited)
-    "fd_pt1_c7_not_null" NOT NULL "c7" (inherited)
+    "ft2_c7_not_null" NOT NULL "c7" (inherited)
 Server: s0
 FDW options: (delimiter ',', quote '"', "be quoted" 'value')
 Inherits: fd_pt1
@@ -1590,7 +1590,7 @@ Child tables: ct3,
  c8     | integer |           |          |         | plain    |              | 
 Not-null constraints:
     "ft2_c1_not_null" NOT NULL "c1" (inherited)
-    "fd_pt1_c7_not_null" NOT NULL "c7" (inherited)
+    "ct3_c7_not_null" NOT NULL "c7" (inherited)
 Inherits: ft2
 
 \d+ ft3
@@ -1607,7 +1607,7 @@ Inherits: ft2
  c8     | integer |           |          |         |             | plain    |              | 
 Not-null constraints:
     "ft3_c1_not_null" NOT NULL "c1" (local, inherited)
-    "fd_pt1_c7_not_null" NOT NULL "c7" (inherited)
+    "ft3_c7_not_null" NOT NULL "c7" (inherited)
 Server: s0
 Inherits: ft2
 
