diff options
author | Robert Haas <rhaas@postgresql.org> | 2017-10-05 07:58:02 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2017-10-05 08:00:12 -0400 |
commit | ce60c2a2825384ca46e11ccdb418c39c32bf4dc5 (patch) | |
tree | a2588200b396ea68e3fdeb1f3c231a7feb71c145 | |
parent | 2451de7e9e72943dbc71a3749379cf16946920f0 (diff) | |
download | postgresql-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.out | 9 | ||||
-rw-r--r-- | contrib/test_decoding/sql/replorigin.sql | 5 | ||||
-rw-r--r-- | src/backend/replication/logical/origin.c | 12 |
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; } |