diff --git a/src/backend/utils/adt/pg_lsn.c b/src/backend/utils/adt/pg_lsn.c
index b4c6c23..d755da3 100644
--- a/src/backend/utils/adt/pg_lsn.c
+++ b/src/backend/utils/adt/pg_lsn.c
@@ -53,6 +53,9 @@ pg_lsn_in_internal(const char *str, bool *have_error)
off = (uint32) strtoul(str + len1 + 1, NULL, 16);
result = ((uint64) id << 32) | off;
+ if (XLogRecPtrIsInvalid(result))
+ *have_error = true;
+
return result;
}
diff --git a/src/test/regress/expected/pg_lsn.out b/src/test/regress/expected/pg_lsn.out
index 64d41df..d0ef436 100644
--- a/src/test/regress/expected/pg_lsn.out
+++ b/src/test/regress/expected/pg_lsn.out
@@ -4,6 +4,10 @@
CREATE TABLE PG_LSN_TBL (f1 pg_lsn);
-- Largest and smallest input
INSERT INTO PG_LSN_TBL VALUES ('0/0');
+ERROR: invalid input syntax for type pg_lsn: "0/0"
+LINE 1: INSERT INTO PG_LSN_TBL VALUES ('0/0');
+ ^
+INSERT INTO PG_LSN_TBL VALUES ('ABC/DEF');
INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
-- Incorrect input
INSERT INTO PG_LSN_TBL VALUES ('G/0');
@@ -28,9 +32,9 @@ LINE 1: INSERT INTO PG_LSN_TBL VALUES ('/ABCD');
^
-- Min/Max aggregation
SELECT MIN(f1), MAX(f1) FROM PG_LSN_TBL;
- min | max
------+-------------------
- 0/0 | FFFFFFFF/FFFFFFFF
+ min | max
+---------+-------------------
+ ABC/DEF | FFFFFFFF/FFFFFFFF
(1 row)
DROP TABLE PG_LSN_TBL;
diff --git a/src/test/regress/sql/pg_lsn.sql b/src/test/regress/sql/pg_lsn.sql
index 2c143c8..391d0b8 100644
--- a/src/test/regress/sql/pg_lsn.sql
+++ b/src/test/regress/sql/pg_lsn.sql
@@ -6,6 +6,7 @@ CREATE TABLE PG_LSN_TBL (f1 pg_lsn);
-- Largest and smallest input
INSERT INTO PG_LSN_TBL VALUES ('0/0');
+INSERT INTO PG_LSN_TBL VALUES ('ABC/DEF');
INSERT INTO PG_LSN_TBL VALUES ('FFFFFFFF/FFFFFFFF');
-- Incorrect input