Hi people, I've been trying to set up table auditing using a tcl function and a trigger. I followed the guide here to start with: http://www.alberton.info/postgresql_table_audit.html The thing is we have multiple fields in our primary keys so I need to change it to handle them all. I was thinking for now to just set pk_name like "fieldName1,field2Name" and pk_value to "fieldvalue1,fieldvalue2" etc. The script runs the query: "SELECT a.attname AS pk_name FROM pg_class c, pg_attribute a, pg_index i WHERE c.relname = '$tgname' AND c.oid=i.indrelid AND a.attnum > 0 AND a.attrelid = i.indexrelid AND i.indisprimary='t'" which should produce a list of the values. It then does: #get PK value foreach field $TG_relatts { if {[string equal -nocase [lindex [array get NEW $field] 0] $pk_name]} { set pk_value [lindex [array get NEW $field] 1] break; } } Which I presume just gets the first value, then breaks. I want to get them all and put them into a comma separated string. So (baering in mind I've not touched tcl before) I changed this to: #get PK value foreach field $TG_relatts { if {[string equal -nocase [lindex [array get NEW $field] 0] $pk_name]} { if {[string length $pk_value] > 0} { append pk_value "," [lindex [array get NEW $field] 1] append pk_list "," $pk_name } else { set pk_value [lindex [array get NEW $field] 1] set pk_list $pk_name } #break; } } But it didn't work, so I guess I'm missing something. ___________________________________________________________ Support the World Aids Awareness campaign this month with Yahoo! For Good http://uk.promotions.yahoo.com/forgood/ ---------------------------(end of broadcast)--------------------------- TIP 6: explain analyze is your friend