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]