From 1120b99445a90ceba27f49e5cf86293f0628d06a Mon Sep 17 00:00:00 2001 From: Jan Wieck Date: Tue, 5 Jun 2007 20:00:41 +0000 Subject: The session_replication_role actually can be changed at will during a session regardless of the existence of cached plans. The plancache only needs to be invalidated so that rules affected by the new setting will be reflected in the new query plans. Jan --- src/backend/utils/misc/guc.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/backend/utils/misc/guc.c') diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ec547a66706..3428d0a172f 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.393 2007/06/03 17:07:34 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.394 2007/06/05 20:00:41 wieck Exp $ * *-------------------------------------------------------------------- */ @@ -6270,24 +6270,29 @@ assign_defaultxactisolevel(const char *newval, bool doit, GucSource source) static const char * assign_session_replication_role(const char *newval, bool doit, GucSource source) { - if (HaveCachedPlans()) - elog(ERROR, "session_replication_role cannot be changed " - "after prepared plans have been cached"); - if (pg_strcasecmp(newval, "origin") == 0) { if (doit) + { + ResetPlanCache(); SessionReplicationRole = SESSION_REPLICATION_ROLE_ORIGIN; + } } else if (pg_strcasecmp(newval, "replica") == 0) { if (doit) + { + ResetPlanCache(); SessionReplicationRole = SESSION_REPLICATION_ROLE_REPLICA; + } } else if (pg_strcasecmp(newval, "local") == 0) { if (doit) + { + ResetPlanCache(); SessionReplicationRole = SESSION_REPLICATION_ROLE_LOCAL; + } } else return NULL; -- cgit v1.2.3