Skip to content

Commit e0d3fe0

Browse files
committed
fixed update trigger names
1 parent 73b8a41 commit e0d3fe0

File tree

4 files changed

+17
-44
lines changed

4 files changed

+17
-44
lines changed

expected/pathman_basic.out

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1476,7 +1476,7 @@ SELECT pathman.replace_hash_partition('test.hash_rel_0', 'test.hash_rel_extern')
14761476
Indexes:
14771477
"hash_rel_0_pkey" PRIMARY KEY, btree (id)
14781478
Triggers:
1479-
hash_rel_upd_trig BEFORE UPDATE ON test.hash_rel_0 FOR EACH ROW EXECUTE PROCEDURE pathman.update_trigger_func()
1479+
hash_rel_upd_trig BEFORE UPDATE OF value ON test.hash_rel_0 FOR EACH ROW EXECUTE PROCEDURE pathman.update_trigger_func()
14801480

14811481
\d+ test.hash_rel_extern
14821482
Table "test.hash_rel_extern"

range.sql

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -992,39 +992,6 @@ END
992992
$$
993993
LANGUAGE plpgsql;
994994

995-
996-
/*
997-
* Creates an update trigger
998-
*/
999-
CREATE OR REPLACE FUNCTION @extschema@.create_range_update_trigger(
1000-
IN parent_relid REGCLASS)
1001-
RETURNS TEXT AS
1002-
$$
1003-
DECLARE
1004-
trigger TEXT := 'CREATE TRIGGER %s
1005-
BEFORE UPDATE ON %s
1006-
FOR EACH ROW EXECUTE PROCEDURE
1007-
@extschema@.update_trigger_func()';
1008-
triggername TEXT;
1009-
rec RECORD;
1010-
1011-
BEGIN
1012-
triggername := @extschema@.build_update_trigger_name(parent_relid);
1013-
1014-
/* Create trigger on every partition */
1015-
FOR rec in (SELECT * FROM pg_catalog.pg_inherits
1016-
WHERE inhparent = parent_relid)
1017-
LOOP
1018-
EXECUTE format(trigger,
1019-
triggername,
1020-
rec.inhrelid::REGCLASS::TEXT);
1021-
END LOOP;
1022-
1023-
RETURN 'update_trigger_func()';
1024-
END
1025-
$$ LANGUAGE plpgsql;
1026-
1027-
1028995
/*
1029996
* Drops partition and expands the next partition so that it cover dropped
1030997
* one

src/pl_funcs.c

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838

3939
static Oid get_partition_for_key(const PartRelationInfo *prel, Datum key);
4040
static void create_single_update_trigger_internal(Oid relid,
41+
const char *trigname,
4142
const char *attname);
4243
static bool update_trigger_exists(Oid relid, char *trigname);
4344

@@ -540,7 +541,7 @@ build_update_trigger_name(PG_FUNCTION_ARGS)
540541
Oid relid = PG_GETARG_OID(0);
541542
const char *result; /* trigger's name can't be qualified */
542543

543-
result = build_update_trigger_name_internal(relid);
544+
result = quote_identifier(build_update_trigger_name_internal(relid));
544545

545546
PG_RETURN_TEXT_P(cstring_to_text(result));
546547
}
@@ -1066,7 +1067,7 @@ create_update_triggers(PG_FUNCTION_ARGS)
10661067
errmsg("trigger \"%s\" for relation \"%s\" already exists",
10671068
trigname, get_rel_name_or_relid(children[i]))));
10681069

1069-
create_single_update_trigger_internal(children[i], attname);
1070+
create_single_update_trigger_internal(children[i], trigname, attname);
10701071
}
10711072

10721073
PG_RETURN_VOID();
@@ -1115,7 +1116,8 @@ create_single_update_trigger(PG_FUNCTION_ARGS)
11151116
Oid partition = PG_GETARG_OID(0);
11161117
Oid parent;
11171118
PartParentSearch parent_search;
1118-
char *attname;
1119+
char *trigname,
1120+
*attname;
11191121

11201122
/* Get parent's Oid */
11211123
parent = get_parent_of_partition(partition, &parent_search);
@@ -1126,15 +1128,19 @@ create_single_update_trigger(PG_FUNCTION_ARGS)
11261128
/* Determine partitioning key name */
11271129
prel = get_pathman_relation_info(parent);
11281130
shout_if_prel_is_invalid(partition, prel, PT_INDIFFERENT);
1131+
1132+
trigname = build_update_trigger_name_internal(parent);
11291133
attname = get_attname(prel->key, prel->attnum);
11301134

1131-
create_single_update_trigger_internal(partition, attname);
1135+
create_single_update_trigger_internal(partition, trigname, attname);
11321136

11331137
PG_RETURN_VOID();
11341138
}
11351139

11361140
static void
1137-
create_single_update_trigger_internal(Oid relid, const char *attname)
1141+
create_single_update_trigger_internal(Oid relid,
1142+
const char *trigname,
1143+
const char *attname)
11381144
{
11391145
CreateTrigStmt *stmt;
11401146
List *func;
@@ -1143,7 +1149,7 @@ create_single_update_trigger_internal(Oid relid, const char *attname)
11431149
makeString("update_trigger_func"));
11441150

11451151
stmt = makeNode(CreateTrigStmt);
1146-
stmt->trigname = build_update_trigger_name_internal(relid);
1152+
stmt->trigname = (char *) trigname;
11471153
stmt->relation = makeRangeVarFromRelid(relid);
11481154
stmt->funcname = func;
11491155
stmt->args = NIL;
@@ -1152,9 +1158,9 @@ create_single_update_trigger_internal(Oid relid, const char *attname)
11521158
stmt->events = TRIGGER_TYPE_UPDATE;
11531159
stmt->columns = list_make1(makeString((char *) attname));
11541160
stmt->whenClause = NULL;
1155-
stmt->isconstraint = false;
1156-
stmt->deferrable = false;
1157-
stmt->initdeferred = false;
1161+
stmt->isconstraint = false;
1162+
stmt->deferrable = false;
1163+
stmt->initdeferred = false;
11581164
stmt->constrrel = NULL;
11591165

11601166
(void) CreateTrigger(stmt, NULL, InvalidOid, InvalidOid,

src/utils.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ build_update_trigger_name_internal(Oid relid)
113113
if (!check_relation_exists(relid))
114114
elog(ERROR, "Invalid relation %u", relid);
115115

116-
return (char *) quote_identifier(psprintf("%s_upd_trig", get_rel_name(relid)));
116+
return (char *) psprintf("%s_upd_trig", get_rel_name(relid));
117117
}
118118

119119
/*

0 commit comments

Comments
 (0)