Commit a1e61bad authored by Tom Lane's avatar Tom Lane

Disallow user-created replication origins named "pg_xxx".

Since we generate such names internally, it seems like a good idea
to have a policy of disallowing them for user use, as we do for many
other object types.  Otherwise attempts to use them will randomly
fail due to collisions with internally-generated names.

Discussion: https://postgr.es/m/3606.1561747369@sss.pgh.pa.us
parent c0faa727
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
#include "access/table.h" #include "access/table.h"
#include "access/xact.h" #include "access/xact.h"
#include "catalog/catalog.h"
#include "catalog/indexing.h" #include "catalog/indexing.h"
#include "nodes/execnodes.h" #include "nodes/execnodes.h"
...@@ -1228,6 +1229,15 @@ pg_replication_origin_create(PG_FUNCTION_ARGS) ...@@ -1228,6 +1229,15 @@ pg_replication_origin_create(PG_FUNCTION_ARGS)
replorigin_check_prerequisites(false, false); replorigin_check_prerequisites(false, false);
name = text_to_cstring((text *) DatumGetPointer(PG_GETARG_DATUM(0))); name = text_to_cstring((text *) DatumGetPointer(PG_GETARG_DATUM(0)));
/* Replication origins "pg_xxx" are reserved for internal use */
if (IsReservedName(name))
ereport(ERROR,
(errcode(ERRCODE_RESERVED_NAME),
errmsg("replication origin name \"%s\" is reserved",
name),
errdetail("Origin names starting with \"pg_\" are reserved.")));
roident = replorigin_create(name); roident = replorigin_create(name);
pfree(name); pfree(name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment