Mutation on table with UUID seems to randomly fail with "invalid input syntax for type uuid" when the select RLS is slow
### Summary

When I do a mutation on a table that has a UUID field it randomly fails with the folowing message: "invalid input syntax for type uuid: \"\"". This happens when RLS is used. It is as if the result after the mutation is not returned in time.

### Steps to reproduce

Create the following table:

```sql
CREATE SEQUENCE public.test_table_id_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

CREATE TABLE public.test_table
(
    id integer NOT NULL DEFAULT nextval('test_table_id_seq'::regclass),
    person_id uuid,
    token uuid NOT NULL DEFAULT gen_random_uuid(),
    created timestamp without time zone NOT NULL DEFAULT (now())::timestamp without time zone,
    updated timestamp without time zone NOT NULL DEFAULT (now())::timestamp without time zone,
    txid numeric NOT NULL DEFAULT txid_current(),
    deleted boolean NOT NULL DEFAULT false,
    name text COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT test_table_id PRIMARY KEY (id),
    CONSTRAINT test_table_token UNIQUE (token),
    CONSTRAINT test_table_person_id FOREIGN KEY (person_id)
        REFERENCES public.person (id) MATCH SIMPLE
        ON UPDATE CASCADE
        ON DELETE CASCADE,
)

ALTER TABLE public.test_table
    ENABLE ROW LEVEL SECURITY;

CREATE INDEX test_table_person_id_idx
    ON public.test_table USING btree
    (person_id ASC NULLS LAST)
    TABLESPACE pg_default;
```

And the following policy (replace `// Something slow` with some slow / complex code):

```sql
CREATE POLICY person_test_table_insert_policy
    ON public.test_table
    AS PERMISSIVE
    FOR INSERT
    TO public
    WITH CHECK ((person_id IS NULL));

CREATE POLICY person_test_table_select_policy
    ON public.test_table
    AS PERMISSIVE
    FOR SELECT
    TO public
    USING (	
    (deleted = false) AND (
        (
          (created = now()) AND (txid = (txid_current())::numeric)
        ) OR (
          (updated = now()) AND (txid = (txid_current())::numeric)
        ) OR (
          (person_id IS NULL) AND (token = current_person_id())
        ) OR (
          (person_id = current_person_id())
        )  OR (
          // Something slow
        )
      )
    )
```

Then run the following `curl` command against Postgraphile with bash/sh (replace SERVER_HOST as needed):

```bash
curl 'https://<SERVER_HOST>/graphql' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0' -H 'Accept: */*' -H 'X-PostGraphile-Explain: off' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: http://localhost/' -H 'content-type: application/json' -H 'Origin: http://localhost' -H 'ConnecTesalive' -H 'TE: Trailers' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data-raw '{"operationName":"createTest","variables":{"name": "'$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)'"},"query":"mutation createTest($name: String!) {\ncreateTest(\ninput: {test: {name: $name}}\n) {\ntest {\nid\npersonId\ntoken\nname\n__typename\n}\n__typename\n}\n}\n"}'
```

### Expected results

```json
{"data":{"createTest":{"test":{"id":3797,"personId":null,"token":"8de211b1-400e-4b13-8525-ff9061b7fa59","name":"i8XMC3NTaxzCoUrq8FZq2YkP2FCXtU9Q","__typename":"Test"},"__typename":"CreateTestPayload"}}}
```

### Actual results

```json
{"errors":[{"errcode":"22P02","extensions":{"exception":{"errcode":"22P02"}},"message":"invalid input syntax for type uuid: \"\"","locations":[{"line":2,"column":3}],"path":["createTest"]}],"data":{"createTest":null}}
```

In this case I also do not get any Explain output when I have it turned on.

### Additional context

When the RLS is small and quick it does not seem to happen and why I think it is a sort of race condition.

NodeJS: v14.16.1
Postgraphile vesion: 4.11.0

Running it with the following arguments:
```bash
graphile --cors --port 5000 --host 127.0.0.1 --connection 'socket://var/run/postgresql?db=test&encoding=utf8' --schema public --default-role test_anonymous --jwt-secret 'TEST' --jwt-token-identifier public.jwt_token --jwt-verify-ignore-expiration --extended-errors errcode --no-setof-functions-contain-nulls --retry-on-init-fail --no-ignore-rbac --no-ignore-indexes --enable-query-batching --disable-query-log --dynamic-json --graphiql "/gui" --enhance-graphiql --allow-explain --skip-plugins graphile-build:NodePlugin --append-plugins @graphile-contrib/pg-simplify-inflector --watch
```

Rest of the SQL:
```sql
CREATE FUNCTION public.mtime_update()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
begin
  NEW.updated = NOW();
  return NEW;
end;
$BODY$;

CREATE TABLE public.person
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    username text COLLATE pg_catalog."default" NOT NULL,
    password text COLLATE pg_catalog."default" NOT NULL,
    created timestamp with time zone NOT NULL DEFAULT (now())::timestamp without time zone,
    updated timestamp with time zone NOT NULL DEFAULT (now())::timestamp without time zone,
    CONSTRAINT person_id PRIMARY KEY (id),
    CONSTRAINT person_unique_id UNIQUE (id),
    CONSTRAINT person_username UNIQUE (username)
)

CREATE TRIGGER person_mtime_update
    BEFORE UPDATE 
    ON public.person
    FOR EACH ROW
    EXECUTE PROCEDURE public.mtime_update();

CREATE OR REPLACE FUNCTION public.current_person_id(
	)
    RETURNS uuid
    LANGUAGE 'sql'
    COST 100
    STABLE PARALLEL UNSAFE
AS $BODY$
select current_setting('jwt.claims.person_id', true)::uuid
$BODY$;
```
