Commit ecaa2e01 authored by Tom Lane's avatar Tom Lane

Fix some poor decisions about sizing of trigger-related memory contexts.

parent 84d2c518
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.93 2001/06/22 19:16:21 wieck Exp $ * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.94 2001/08/02 15:59:28 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1499,7 +1499,7 @@ deferredTriggerInvokeEvents(bool immediate_only) ...@@ -1499,7 +1499,7 @@ deferredTriggerInvokeEvents(bool immediate_only)
per_tuple_context = per_tuple_context =
AllocSetContextCreate(CurrentMemoryContext, AllocSetContextCreate(CurrentMemoryContext,
"DeferredTriggerTupleContext", "DeferredTriggerTupleContext",
0, ALLOCSET_DEFAULT_MINSIZE,
ALLOCSET_DEFAULT_INITSIZE, ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE); ALLOCSET_DEFAULT_MAXSIZE);
...@@ -1594,9 +1594,13 @@ deferredTriggerInvokeEvents(bool immediate_only) ...@@ -1594,9 +1594,13 @@ deferredTriggerInvokeEvents(bool immediate_only)
void void
DeferredTriggerInit(void) DeferredTriggerInit(void)
{ {
/*
* Since this context will never be reset, give it a minsize of 0.
* This avoids using any memory if the session never stores anything.
*/
deftrig_gcxt = AllocSetContextCreate(TopMemoryContext, deftrig_gcxt = AllocSetContextCreate(TopMemoryContext,
"DeferredTriggerSession", "DeferredTriggerSession",
ALLOCSET_DEFAULT_MINSIZE, 0,
ALLOCSET_DEFAULT_INITSIZE, ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE); ALLOCSET_DEFAULT_MAXSIZE);
} }
...@@ -1623,11 +1627,12 @@ DeferredTriggerBeginXact(void) ...@@ -1623,11 +1627,12 @@ DeferredTriggerBeginXact(void)
/* /*
* Create the per transaction memory context and copy all states from * Create the per transaction memory context and copy all states from
* the per session context to here. * the per session context to here. Set the minsize to 0 to avoid
* wasting memory if there is no deferred trigger data.
*/ */
deftrig_cxt = AllocSetContextCreate(TopTransactionContext, deftrig_cxt = AllocSetContextCreate(TopTransactionContext,
"DeferredTriggerXact", "DeferredTriggerXact",
ALLOCSET_DEFAULT_MINSIZE, 0,
ALLOCSET_DEFAULT_INITSIZE, ALLOCSET_DEFAULT_INITSIZE,
ALLOCSET_DEFAULT_MAXSIZE); ALLOCSET_DEFAULT_MAXSIZE);
oldcxt = MemoryContextSwitchTo(deftrig_cxt); oldcxt = MemoryContextSwitchTo(deftrig_cxt);
...@@ -1911,7 +1916,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt) ...@@ -1911,7 +1916,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
if (!IsTransactionBlock()) if (!IsTransactionBlock())
{ {
/* /*
* Outside of a transaction block set the trigger states of * Outside of a transaction block set the trigger states of
* individual triggers on session level. * individual triggers on session level.
...@@ -1949,7 +1953,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt) ...@@ -1949,7 +1953,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
} }
else else
{ {
/* /*
* Inside of a transaction block set the trigger states of * Inside of a transaction block set the trigger states of
* individual triggers on transaction level. * individual triggers on transaction level.
......
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