Вы можете использовать execute format
для упрощения вашего заявления об обновлении.
Чтобы проверить, изменил ли оператор обновления значение хотя бы одной строки, вы можете использовать
ROW_COUNT
DIAGNOSTICS
create or replace function test() returns text as $$
declare
cur RECORD;
ct int;
re text default '';
begin
for cur in ( select table_name FROM information_schema.tables
WHERE table_schema = 'xyz' )
LOOP
EXECUTE format( 'update xyz.%I set update_date = %L where update_date = %L',
cur.table_name,'2010-11-17 17:00:00','2010-11-16 17:00:00') ;
GET DIAGNOSTICS ct = ROW_COUNT; --get number of rows affected by the
--previous statement.
IF ct > 0 THEN
re := re|| ',' ||cur.table_name;
END IF;
END LOOP;
return trim(BOTH ',' from re);
end; $$
language plpgsql;
В примечании, вместо того, чтобы возвращать строку обновленных таблиц через запятую, лучше вместо нее возвращать array
.