From 6eb9c5a5657d1fe77b55cc261450f3538d35a94d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 14:19:15 +0200 Subject: Adding upstream version 13.4. Signed-off-by: Daniel Baumann --- doc/src/sgml/html/plperl-triggers.html | 74 ++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 doc/src/sgml/html/plperl-triggers.html (limited to 'doc/src/sgml/html/plperl-triggers.html') diff --git a/doc/src/sgml/html/plperl-triggers.html b/doc/src/sgml/html/plperl-triggers.html new file mode 100644 index 0000000..fbe39ce --- /dev/null +++ b/doc/src/sgml/html/plperl-triggers.html @@ -0,0 +1,74 @@ + +44.6. PL/Perl Triggers

44.6. PL/Perl Triggers

+ PL/Perl can be used to write trigger functions. In a trigger function, + the hash reference $_TD contains information about the + current trigger event. $_TD is a global variable, + which gets a separate local value for each invocation of the trigger. + The fields of the $_TD hash reference are: + +

$_TD->{new}{foo}

+ NEW value of column foo +

$_TD->{old}{foo}

+ OLD value of column foo +

$_TD->{name}

+ Name of the trigger being called +

$_TD->{event}

+ Trigger event: INSERT, UPDATE, + DELETE, TRUNCATE, or UNKNOWN +

$_TD->{when}

+ When the trigger was called: BEFORE, + AFTER, INSTEAD OF, or + UNKNOWN +

$_TD->{level}

+ The trigger level: ROW, STATEMENT, or UNKNOWN +

$_TD->{relid}

+ OID of the table on which the trigger fired +

$_TD->{table_name}

+ Name of the table on which the trigger fired +

$_TD->{relname}

+ Name of the table on which the trigger fired. This has been deprecated, + and could be removed in a future release. + Please use $_TD->{table_name} instead. +

$_TD->{table_schema}

+ Name of the schema in which the table on which the trigger fired, is +

$_TD->{argc}

+ Number of arguments of the trigger function +

@{$_TD->{args}}

+ Arguments of the trigger function. Does not exist if $_TD->{argc} is 0. +

+

+ Row-level triggers can return one of the following: + +

return;

+ Execute the operation +

"SKIP"

+ Don't execute the operation +

"MODIFY"

+ Indicates that the NEW row was modified by + the trigger function +

+

+ Here is an example of a trigger function, illustrating some of the + above: +

+CREATE TABLE test (
+    i int,
+    v varchar
+);
+
+CREATE OR REPLACE FUNCTION valid_id() RETURNS trigger AS $$
+    if (($_TD->{new}{i} >= 100) || ($_TD->{new}{i} <= 0)) {
+        return "SKIP";    # skip INSERT/UPDATE command
+    } elsif ($_TD->{new}{v} ne "immortal") {
+        $_TD->{new}{v} .= "(modified by trigger)";
+        return "MODIFY";  # modify row and execute INSERT/UPDATE command
+    } else {
+        return;           # execute INSERT/UPDATE command
+    }
+$$ LANGUAGE plperl;
+
+CREATE TRIGGER test_valid_id_trig
+    BEFORE INSERT OR UPDATE ON test
+    FOR EACH ROW EXECUTE FUNCTION valid_id();
+

+

\ No newline at end of file -- cgit v1.2.3