On 04/06/18 09:12, Pavel Stehule wrote:
2018-06-04 8:35 GMT+02:00 Simon Riggs <si...@2ndquadrant.com>:

Sounds good. I think this would need to be restricted by operator and
datatype, since in general you won't know if the datatype functions
need a snapshot or not. Immutable functions for the operators ought to
do it, but I think that might not be enough.

It requires introduction of new "safe" functions (& operators). Immutable
functions are not enough safe.

CREATE OR REPLACE FUNCTION public.fx()
  RETURNS integer
  LANGUAGE plpgsql
  IMMUTABLE
AS $function$
BEGIN
   RETURN (SELECT count(*) FROM pg_class);
END;
$function$

postgres=# SELECT fx();
┌─────┐
│ fx  │
╞═════╡
│ 343 │
└─────┘
(1 row)

That function is incorrectly marked as IMMUTABLE. In that situation, it's enough that we throw a sane error like "ERROR: no snapshot available".

- Heikki

Reply via email to