1

I'm trying to create a trigger via pgadmin in order to have a calculated column.

I need to do: c = a / b

I created a function UpdateC, which contains the following code:

UPDATE table_name
SET c = a / b
WHERE id = @id

and I declared @id as a parameter.

Then I thought I would create a trigger and would link it to that function, but I found out that I need to link it to a trigger function rather than to a function.

Now I'm trying to create a trigger function with the exact same SQL as above, but I'm getting the next error:

syntax error at or near "UPDATE"

Under definition tab I had to choose a language, so I chose "plpgsql" (The other options are "c" and "internal").

Any help will be profoundly appreciated!

1 Answer 1

6

You should create a BEFORE trigger FOR EACH ROW and not UPDATE the table, but change the row before it is written.

See the doocumentation for details.

Here is a proof of concept:

CREATE TABLE t (
   id integer PRIMARY KEY,
   a double precision,
   b double precision,
   c double precision
);

CREATE OR REPLACE FUNCTION t_trig() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.c = NEW.a / NEW.b;
   RETURN NEW;
END;$$;

CREATE TRIGGER t_trig BEFORE INSERT OR UPDATE ON t FOR EACH ROW
   EXECUTE PROCEDURE t_trig();

INSERT INTO t (id, a, b) VALUES (1, 42, 7);
INSERT 0 1
test=> SELECT * FROM t;
┌────┬────┬───┬───┐
│ id │ a  │ b │ c │
├────┼────┼───┼───┤
│  1 │ 42 │ 7 │ 6 │
└────┴────┴───┴───┘
(1 row)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.