Commit 1120b994 authored by Jan Wieck's avatar Jan Wieck

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
parent f7442628
......@@ -33,7 +33,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.9 2007/05/14 18:13:21 tgl Exp $
* $PostgreSQL: pgsql/src/backend/utils/cache/plancache.c,v 1.10 2007/06/05 20:00:41 wieck Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -944,14 +944,3 @@ InvalRelid(Oid relid, LOCKMODE lockmode, InvalRelidContext *context)
if (relid == context->inval_relid || context->inval_relid == InvalidOid)
context->plan->dead = true;
}
/*
* HaveCachedPlans
* Check if the plancache has stored any plans at all.
*/
bool
HaveCachedPlans(void)
{
return (cached_plans_list != NIL);
}
......@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* 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,25 +6270,30 @@ 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;
return newval;
......
......@@ -8,7 +8,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $PostgreSQL: pgsql/src/include/utils/plancache.h,v 1.6 2007/04/16 18:21:07 tgl Exp $
* $PostgreSQL: pgsql/src/include/utils/plancache.h,v 1.7 2007/06/05 20:00:41 wieck Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -106,7 +106,6 @@ extern CachedPlan *RevalidateCachedPlan(CachedPlanSource *plansource,
bool useResOwner);
extern void ReleaseCachedPlan(CachedPlan *plan, bool useResOwner);
extern TupleDesc PlanCacheComputeResultDesc(List *stmt_list);
extern bool HaveCachedPlans(void);
extern void ResetPlanCache(void);
......
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