-- Patch only the version predicates, retaining deployed function hotfixes. -- API updatedAt uses JavaScript Date, which truncates PostgreSQL microseconds. DO $$ DECLARE fn regprocedure; definition text; old_predicate text; new_predicate text; BEGIN FOREACH fn IN ARRAY ARRAY[ 'xs_schedule_save(text,text,jsonb,jsonb,text,text,text)'::regprocedure, 'xs_schedule_cancel(text,text,boolean,text,text,text)'::regprocedure ] LOOP definition=pg_get_functiondef(fn); old_predicate=CASE WHEN fn::text LIKE 'xs_schedule_save(%' THEN 'old_c."updatedAt"<>expected::timestamptz' ELSE 'c."updatedAt"<>expected::timestamptz' END; new_predicate=replace(old_predicate,'<>expected',')<>expected'); new_predicate='date_trunc(''milliseconds'','||new_predicate; IF strpos(definition,new_predicate)>0 THEN CONTINUE;END IF; IF strpos(definition,old_predicate)=0 THEN RAISE EXCEPTION 'Unknown schedule version predicate: %',fn;END IF; EXECUTE replace(definition,old_predicate,new_predicate); END LOOP; END $$;