aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2017-10-05 07:58:02 -0400
committerRobert Haas <rhaas@postgresql.org>2017-10-05 08:00:12 -0400
commitce60c2a2825384ca46e11ccdb418c39c32bf4dc5 (patch)
treea2588200b396ea68e3fdeb1f3c231a7feb71c145
parent2451de7e9e72943dbc71a3749379cf16946920f0 (diff)
downloadpostgresql-ce60c2a2825384ca46e11ccdb418c39c32bf4dc5.tar.gz
postgresql-ce60c2a2825384ca46e11ccdb418c39c32bf4dc5.zip
Fix more user-visible elog() calls.
Michael Paquier discovered that this could be triggered via SQL; give a nicer message instead. Patch by Michael Paquier, reviewed by Masahiko Sawada. Discussion: http://postgr.es/m/CAB7nPqQtPg+LKKtzdKN26judHcvPZ0s1gNigzOT4j8CYuuuBYg@mail.gmail.com
-rw-r--r--contrib/test_decoding/expected/replorigin.out9
-rw-r--r--contrib/test_decoding/sql/replorigin.sql5
-rw-r--r--src/backend/replication/logical/origin.c12
3 files changed, 21 insertions, 5 deletions
diff --git a/contrib/test_decoding/expected/replorigin.out b/contrib/test_decoding/expected/replorigin.out
index 76d4ea986db..8ea4ddda977 100644
--- a/contrib/test_decoding/expected/replorigin.out
+++ b/contrib/test_decoding/expected/replorigin.out
@@ -26,7 +26,14 @@ SELECT pg_replication_origin_drop('test_decoding: temp');
(1 row)
SELECT pg_replication_origin_drop('test_decoding: temp');
-ERROR: cache lookup failed for replication origin 'test_decoding: temp'
+ERROR: replication origin "test_decoding: temp" does not exist
+-- various failure checks for undefined slots
+select pg_replication_origin_advance('test_decoding: temp', '0/1');
+ERROR: replication origin "test_decoding: temp" does not exist
+select pg_replication_origin_session_setup('test_decoding: temp');
+ERROR: replication origin "test_decoding: temp" does not exist
+select pg_replication_origin_progress('test_decoding: temp', true);
+ERROR: replication origin "test_decoding: temp" does not exist
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
?column?
----------
diff --git a/contrib/test_decoding/sql/replorigin.sql b/contrib/test_decoding/sql/replorigin.sql
index 7870f0ea321..451cd4bc3b2 100644
--- a/contrib/test_decoding/sql/replorigin.sql
+++ b/contrib/test_decoding/sql/replorigin.sql
@@ -13,6 +13,11 @@ SELECT pg_replication_origin_create('test_decoding: temp');
SELECT pg_replication_origin_drop('test_decoding: temp');
SELECT pg_replication_origin_drop('test_decoding: temp');
+-- various failure checks for undefined slots
+select pg_replication_origin_advance('test_decoding: temp', '0/1');
+select pg_replication_origin_session_setup('test_decoding: temp');
+select pg_replication_origin_progress('test_decoding: temp', true);
+
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
-- origin tx
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index edc6efb8a6a..1fc8f2dee9b 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -225,8 +225,10 @@ replorigin_by_name(char *roname, bool missing_ok)
ReleaseSysCache(tuple);
}
else if (!missing_ok)
- elog(ERROR, "cache lookup failed for replication origin '%s'",
- roname);
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("replication origin \"%s\" does not exist",
+ roname)));
return roident;
}
@@ -437,8 +439,10 @@ replorigin_by_oid(RepOriginId roident, bool missing_ok, char **roname)
*roname = NULL;
if (!missing_ok)
- elog(ERROR, "cache lookup failed for replication origin with oid %u",
- roident);
+ ereport(ERROR,
+ (errcode(ERRCODE_UNDEFINED_OBJECT),
+ errmsg("replication origin with OID %u does not exist",
+ roident)));
return false;
}