From b70b78656b352cb4d00655b5ad653353e7d95e55 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 20 Jul 2002 19:55:38 +0000 Subject: [PATCH] Tweak CreateTrigger() so that the OID used in the name of an RI_ConstraintTrigger is the same OID assigned to the pg_trigger row. This reduces consumption of OIDs and may ease debugging. --- src/backend/commands/trigger.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 4c2ee626fe..353d684d90 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.122 2002/07/20 05:16:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.123 2002/07/20 19:55:38 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -50,6 +50,14 @@ static void DeferredTriggerExecute(DeferredTriggerEvent event, int itemno, MemoryContext per_tuple_context); +/* + * Create a trigger. Returns the OID of the created trigger. + * + * forConstraint, if true, says that this trigger is being created to + * implement a constraint. The caller will then be expected to make + * a pg_depend entry linking the trigger to that constraint (and thereby + * to the owning relation(s)). + */ Oid CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) { @@ -94,6 +102,12 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) if (aclresult != ACLCHECK_OK) aclcheck_error(aclresult, RelationGetRelationName(rel)); + /* + * Generate the trigger's OID now, so that we can use it in the name + * if needed. + */ + trigoid = newoid(); + /* * If trigger is an RI constraint, use specified trigger name as * constraint name and build a unique trigger name instead. @@ -103,7 +117,7 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) if (stmt->isconstraint) { snprintf(constrtrigname, sizeof(constrtrigname), - "RI_ConstraintTrigger_%u", newoid()); + "RI_ConstraintTrigger_%u", trigoid); trigname = constrtrigname; constrname = stmt->trigname; } @@ -279,10 +293,14 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint) tuple = heap_formtuple(tgrel->rd_att, values, nulls); + /* force tuple to have the desired OID */ + AssertTupleDescHasOid(tgrel->rd_att); + HeapTupleSetOid(tuple, trigoid); + /* * Insert tuple into pg_trigger. */ - trigoid = simple_heap_insert(tgrel, tuple); + simple_heap_insert(tgrel, tuple); CatalogOpenIndices(Num_pg_trigger_indices, Name_pg_trigger_indices, idescs); CatalogIndexInsert(idescs, Num_pg_trigger_indices, tgrel, tuple);