diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index afc26d4..136e2e6 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -6028,9 +6028,12 @@ get_variable(Var *var, int levelsup, bool istoplevel, deparse_context *context)
 	else if (attnum > 0)
 	{
 		/* Get column name to use from the colinfo struct */
-		Assert(attnum <= colinfo->num_cols);
+		if (attnum > colinfo->num_cols)
+			elog(ERROR, "incorrect number of arguments: specified %d but found %d",
+				 attnum, colinfo->num_cols);
 		attname = colinfo->colnames[attnum - 1];
-		Assert(attname != NULL);
+		if (attname == NULL)
+			elog(ERROR, "invalid attribute name");
 	}
 	else
 	{
diff --git a/src/test/regress/expected/rules.out b/src/test/regress/expected/rules.out
index 125c31b..d066572 100644
--- a/src/test/regress/expected/rules.out
+++ b/src/test/regress/expected/rules.out
@@ -3057,3 +3057,25 @@ SELECT * FROM hat_data WHERE hat_name IN ('h8', 'h9', 'h7') ORDER BY hat_name;
 DROP RULE hat_upsert ON hats;
 drop table hats;
 drop table hat_data;
+-- tests for pg_get_expr
+CREATE TABLE tab_short (a1 int, CHECK(a1 > 0));
+CREATE TABLE tab_long (a2 text, b2 text, CHECK(a2 IS NOT NULL AND b2 IS NOT NULL));
+CREATE TABLE tab_dropped_col (a3 int, b3 int);
+ALTER TABLE tab_dropped_col DROP COLUMN b3;
+-- contraint definition of tab_short uses column definitions from tab_long.
+SELECT pg_get_expr(conbin, 'tab_long'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_short'::regclass;
+ pg_get_expr 
+-------------
+ (a2 > 0)
+(1 row)
+
+-- error, column number mismatch
+SELECT pg_get_expr(conbin, 'tab_short'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_long'::regclass;
+ERROR:  incorrect number of arguments: specified 2 but found 1
+-- error, invalid attribute name
+SELECT pg_get_expr(conbin, 'tab_dropped_col'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_long'::regclass;
+ERROR:  invalid attribute name
+DROP TABLE tab_short, tab_long, tab_dropped_col;
diff --git a/src/test/regress/sql/rules.sql b/src/test/regress/sql/rules.sql
index 4299a5b..360696c 100644
--- a/src/test/regress/sql/rules.sql
+++ b/src/test/regress/sql/rules.sql
@@ -1144,3 +1144,19 @@ DROP RULE hat_upsert ON hats;
 
 drop table hats;
 drop table hat_data;
+
+-- tests for pg_get_expr
+CREATE TABLE tab_short (a1 int, CHECK(a1 > 0));
+CREATE TABLE tab_long (a2 text, b2 text, CHECK(a2 IS NOT NULL AND b2 IS NOT NULL));
+CREATE TABLE tab_dropped_col (a3 int, b3 int);
+ALTER TABLE tab_dropped_col DROP COLUMN b3;
+-- contraint definition of tab_short uses column definitions from tab_long.
+SELECT pg_get_expr(conbin, 'tab_long'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_short'::regclass;
+-- error, column number mismatch
+SELECT pg_get_expr(conbin, 'tab_short'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_long'::regclass;
+-- error, invalid attribute name
+SELECT pg_get_expr(conbin, 'tab_dropped_col'::regclass) FROM pg_constraint
+    WHERE conrelid = 'tab_long'::regclass;
+DROP TABLE tab_short, tab_long, tab_dropped_col;
