diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
new file mode 100644
index 4147457..ad81995
*** a/src/backend/commands/tablecmds.c
--- b/src/backend/commands/tablecmds.c
*************** RenameConstraint(RenameStmt *stmt)
*** 2496,2504 ****
  	{
  		/* lock level taken here should match rename_constraint_internal */
  		relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
! 										 false, false,
  										 RangeVarCallbackForRenameAttribute,
  										 NULL);
  	}
  
  	return
--- 2496,2511 ----
  	{
  		/* lock level taken here should match rename_constraint_internal */
  		relid = RangeVarGetRelidExtended(stmt->relation, AccessExclusiveLock,
! 										 stmt->missing_ok, false,
  										 RangeVarCallbackForRenameAttribute,
  										 NULL);
+ 		if (!OidIsValid(relid))
+ 		{
+ 			ereport(NOTICE,
+ 					(errmsg("relation \"%s\" does not exist, skipping",
+ 							stmt->relation->relname)));
+ 			return InvalidObjectAddress;
+ 		}
  	}
  
  	return
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
new file mode 100644
index 82405b9..4dc9d7f
*** a/src/backend/parser/gram.y
--- b/src/backend/parser/gram.y
*************** RenameStmt: ALTER AGGREGATE func_name ag
*** 7692,7697 ****
--- 7692,7708 ----
  					n->relation = $3;
  					n->subname = $6;
  					n->newname = $8;
+ 					n->missing_ok = false;
+ 					$$ = (Node *)n;
+ 				}
+ 			| ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name
+ 				{
+ 					RenameStmt *n = makeNode(RenameStmt);
+ 					n->renameType = OBJECT_TABCONSTRAINT;
+ 					n->relation = $5;
+ 					n->subname = $8;
+ 					n->newname = $10;
+ 					n->missing_ok = true;
  					$$ = (Node *)n;
  				}
  			| ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
new file mode 100644
index 51db1b6..6a31df7
*** a/src/test/regress/expected/alter_table.out
--- b/src/test/regress/expected/alter_table.out
*************** Inherits: constraint_rename_test
*** 289,294 ****
--- 289,296 ----
  
  DROP TABLE constraint_rename_test2;
  DROP TABLE constraint_rename_test;
+ ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok
+ NOTICE:  relation "constraint_not_exist" does not exist, skipping
  ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a);
  NOTICE:  relation "constraint_rename_test" does not exist, skipping
  -- FOREIGN KEY CONSTRAINT adding TEST
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
new file mode 100644
index d0d29ee..b5ee7b0
*** a/src/test/regress/sql/alter_table.sql
--- b/src/test/regress/sql/alter_table.sql
*************** ALTER TABLE constraint_rename_test RENAM
*** 228,233 ****
--- 228,234 ----
  \d constraint_rename_test2
  DROP TABLE constraint_rename_test2;
  DROP TABLE constraint_rename_test;
+ ALTER TABLE IF EXISTS constraint_not_exist RENAME CONSTRAINT con3 TO con3foo; -- ok
  ALTER TABLE IF EXISTS constraint_rename_test ADD CONSTRAINT con4 UNIQUE (a);
  
  -- FOREIGN KEY CONSTRAINT adding TEST
