From: | Arda Çeşmecioğlu <arda(dot)mtb(at)gmail(dot)com> |
---|---|
To: | pgsql-novice(at)postgresql(dot)org |
Subject: | Test inserted text in trigger (arrays, custom types) |
Date: | 2012-02-24 09:43:14 |
Message-ID: | 4F475BB2.1010303@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
Hello people,
I tried to compose a header that sums up the question :).
Now to the actual question;
I do the following
DROP TABLE IF EXISTS mytable;
DROP TYPE IF EXISTS mytype;
CREATE TYPE mytype AS (
a_nr Numeric(18,7),
a_text Text
);
CREATE TABLE mytable(
id Serial NOT NULL PRIMARY KEY,
some_col mytype[] NOT NULL
);
CREATE OR REPLACE FUNCTION chk_mytab_input() RETURNS TRIGGER
LANGUAGE 'plpgsql'
VOLATILE
AS $BODY$
BEGIN
-- for all some_col
FOR c IN array_lower(NEW.some_col,1)..array_upper(NEW.some_ col,1) LOOP
RAISE INFO '%', (NEW.some_col[c]).a_text IS DISTINCT FROM 'VA';
RAISE INFO '%', (NEW.some_col[c]).a_text = 'VA';
END LOOP;
RETURN NEW;
END $BODY$;
CREATE TRIGGER trig_chk_mytab_input BEFORE INSERT OR UPDATE
ON mytable FOR EACH ROW
EXECUTE PROCEDURE chk_mytab_input();
and then when I insert some data with
INSERT INTO mytable VALUES (
DEFAULT,
'{
"(55, VA)",
"(1000, VA)"
}'
);
I get the following output (the two "RAISE INFO ..." statements):
INFO: t
INFO: f
INFO: t
INFO: f
but I expect all "t"s. So this means (I think) the VA in "(55, VA)"
statement is not the same with the VA in " RAISE INFO '%',
(NEW.some_col[c]).a_text = 'VA' " . But why?
Thanks in advance.
From | Date | Subject | |
---|---|---|---|
Next Message | Arda Çeşmecioğlu | 2012-02-24 10:00:27 | Test inserted text in trigger (arrays, custom types) (corrected) |
Previous Message | Tom Lane | 2012-02-24 04:51:50 | Re: select on bytea column returns hex encoded data instead of binary data |