I'm running "PostgreSQL 7.3.3 on i686-pc-linux-gnu, compiled by 
GCC gcc (GCC) 3.2.2", and seeing a problem in trigger functions 
written in plpython. This also happens in 7.3.2; I upgraded this 
morning to see if the problem was already fixed. For fields of type 
char, when a plpython trigger is called, the char fields in the 
TD["new"] or TD["old"] maps show as 0 or 1 instead of their actual 
value. As far as I've seen right now, it only affects char. The 
varchar and text types seem ok, but I have not done any 
comprehensive testing of the numerics and other types.

Here's a test script to show the problem:
CREATE TABLE test (
        broken CHAR(4),
        works VARCHAR(4),
        alsoworks TEXT
);
CREATE OR REPLACE FUNCTION pytest() RETURNS TRIGGER 
AS '
plpy.info ("TD=%s" % TD)
return None
' LANGUAGE 'plpython';
CREATE TRIGGER test_trig BEFORE INSERT OR UPDATE OR 
DELETE ON test 
  FOR EACH ROW EXECUTE PROCEDURE pytest();
INSERT INTO test VALUES ('test', 'test', 'test');
UPDATE test SET broken='1234', works='1234', alsoworks='1234';
DELETE FROM test;

And here's the output from the last three statements on my system:
award=> INSERT INTO test VALUES ('test', 'test', 'test');
INFO:  ("TD={'relid': '3928912', 'old': None, 'name': 'test_trig', 'level': 
'ROW', 'new': {'alsoworks': 'test', 'broken': 1, 'works': 'test'}, 'args': 
None, 'when': 'BEFORE', 'event': 'INSERT'}",)
INSERT 3928918 1
award=> UPDATE test SET broken='1234', works='1234', 
alsoworks='1234';
INFO:  ("TD={'relid': '3928912', 'old': {'alsoworks': 'test', 'broken': 1, 
'works': 'test'}, 'name': 'test_trig', 'level': 'ROW', 'new': {'alsoworks': 
'1234', 'broken': 0, 'works': '1234'}, 'args': None, 'when': 'BEFORE', 
'event': 'UPDATE'}",)
UPDATE 1
award=> DELETE FROM test;
INFO:  ("TD={'relid': '3928912', 'old': {'alsoworks': '1234', 'broken': 0, 
'works': '1234'}, 'name': 'test_trig', 'level': 'ROW', 'new': None, 'args': 
None, 'when': 'BEFORE', 'event': 'DELETE'}",)
DELETE 1


--
Arthur Ward


---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to