The following bug has been logged on the website:
Bug reference:      14059
Logged by:          digoal
Email address:      digoal(at)126(dot)com
PostgreSQL version: 9.5.2
Operating system:   CentOS 6.x x64
Description:        
postgres=# create or replace function f() returns void as $$
declare
begin
  raise notice 'called';
end;
$$ language plpgsql strict volatile;
CREATE FUNCTION
postgres=# select f(),* from ( values(1),(2),(3),(4),(5),(6) ) t(id) offset
3 limit 2;
NOTICE:  called
NOTICE:  called
NOTICE:  called
NOTICE:  called
NOTICE:  called
 f | id 
---+----
   |  4
   |  5
(2 rows)
offset skip 3 tuple, but function f() called with 5 times, can we tuning
this .
or this is a bug?