Re: TG_COLUMNS_UPDATED
От | Josh Kupershmidt |
---|---|
Тема | Re: TG_COLUMNS_UPDATED |
Дата | |
Msg-id | CAK3UJRFUiTKxw4ufUQLoZLfYmQ+XhfA6_DZGoYc8bauBQY60YQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: TG_COLUMNS_UPDATED (Bartosz Dmytrak <bdmytrak@gmail.com>) |
Список | pgsql-general |
On Tue, Jul 3, 2012 at 2:47 PM, Bartosz Dmytrak <bdmytrak@gmail.com> wrote: [snip] > FOR v_row IN > SELECT attname > FROM pg_attribute > WHERE attrelid = (quote_ident(TG_TABLE_SCHEMA) || '.' || > quote_ident(TG_TABLE_NAME))::text::regclass > AND attnum > 0 > ORDER BY attnum > LOOP > EXECUTE 'SELECT NOT ($1.' || quote_ident(v_row.attname) || ' = $2.' || > quote_ident(v_row.attname) || ')' INTO v_match USING NEW, OLD; > v_match_array = array_append (v_match_array, v_match); > END LOOP; A few problems with this function: 1.) The comparison should be using 'IS DISTINCT FROM' instead of != to handle NULLs 2.) The query against pg_attribute should respect 'attisdropped'. (There are also other ways to iterate over NEW/OLD fields, e.g. using hstore.) 3.) This solution doesn't solve the OP's stated goal: >> It would allow me to know whether various timestamp columns in the row >> were >> unlucky enough to have been set to the same exact value already existing >> in the table >> *versus* were simply not set by the UPDATE statement. I'm not sure how feasible it'd be add a new TG_ variable available to plpgsql for the problem above. Josh
В списке pgsql-general по дате отправления: