Skip to content

Commit ecaa2e0

Browse files
committed
Fix some poor decisions about sizing of trigger-related memory contexts.
1 parent 84d2c51 commit ecaa2e0

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/backend/commands/trigger.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.93 2001/06/22 19:16:21 wieck Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.94 2001/08/02 15:59:28 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -1499,7 +1499,7 @@ deferredTriggerInvokeEvents(bool immediate_only)
14991499
per_tuple_context =
15001500
AllocSetContextCreate(CurrentMemoryContext,
15011501
"DeferredTriggerTupleContext",
1502-
0,
1502+
ALLOCSET_DEFAULT_MINSIZE,
15031503
ALLOCSET_DEFAULT_INITSIZE,
15041504
ALLOCSET_DEFAULT_MAXSIZE);
15051505

@@ -1594,9 +1594,13 @@ deferredTriggerInvokeEvents(bool immediate_only)
15941594
void
15951595
DeferredTriggerInit(void)
15961596
{
1597+
/*
1598+
* Since this context will never be reset, give it a minsize of 0.
1599+
* This avoids using any memory if the session never stores anything.
1600+
*/
15971601
deftrig_gcxt = AllocSetContextCreate(TopMemoryContext,
15981602
"DeferredTriggerSession",
1599-
ALLOCSET_DEFAULT_MINSIZE,
1603+
0,
16001604
ALLOCSET_DEFAULT_INITSIZE,
16011605
ALLOCSET_DEFAULT_MAXSIZE);
16021606
}
@@ -1623,11 +1627,12 @@ DeferredTriggerBeginXact(void)
16231627

16241628
/*
16251629
* Create the per transaction memory context and copy all states from
1626-
* the per session context to here.
1630+
* the per session context to here. Set the minsize to 0 to avoid
1631+
* wasting memory if there is no deferred trigger data.
16271632
*/
16281633
deftrig_cxt = AllocSetContextCreate(TopTransactionContext,
16291634
"DeferredTriggerXact",
1630-
ALLOCSET_DEFAULT_MINSIZE,
1635+
0,
16311636
ALLOCSET_DEFAULT_INITSIZE,
16321637
ALLOCSET_DEFAULT_MAXSIZE);
16331638
oldcxt = MemoryContextSwitchTo(deftrig_cxt);
@@ -1911,7 +1916,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
19111916

19121917
if (!IsTransactionBlock())
19131918
{
1914-
19151919
/*
19161920
* Outside of a transaction block set the trigger states of
19171921
* individual triggers on session level.
@@ -1949,7 +1953,6 @@ DeferredTriggerSetState(ConstraintsSetStmt *stmt)
19491953
}
19501954
else
19511955
{
1952-
19531956
/*
19541957
* Inside of a transaction block set the trigger states of
19551958
* individual triggers on transaction level.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy