Definition for the table fpbackup.fp_vpn_data_2021w12: CREATE TABLE fpbackup.fp_vpn_data_2021w12 ( id int8 NOT NULL DEFAULT nextval('fp_vpn_data_id_seq'::regclass), fp_date_start timestamp NOT NULL, fp_date_end timestamp NOT NULL, .... fp_host varchar NOT NULL, .... CONSTRAINT c_d_fp_vpn_data_2021w12 CHECK (((fp_date_start >= '2021-03-19 00:00:00'::timestamp without time zone) AND (fp_date_start < '2021-03-26 00:00:00'::timestamp without time zone))), CONSTRAINT fp_vpn_data_2021w12_pkey PRIMARY KEY (id) ) INHERITS (public.fp_vpn_data) TABLESPACE myts4 ; CREATE INDEX fp_vpn_data_2021w12_fp_host_idx ON fpbackup.fp_vpn_data_2021w12 USING btree (fp_host); CREATE INDEX fp_vpn_data_2021w12_trigrams_vector_idx ON fpbackup.fp_vpn_data_2021w12 USING gin (dict.trigrams_vector((fp_host)::text)); ------------------------ Definition for the function dict.trigrams_array: CREATE OR REPLACE FUNCTION dict.trigrams_array(word text) RETURNS text[] LANGUAGE plpgsql IMMUTABLE STRICT AS $function$ DECLARE result text[]; BEGIN FOR i IN 1 .. length(word) - 2 LOOP result := result || quote_literal(substr(lower(word), i, 3)); END LOOP; RETURN result; END; $function$ ; ------------------------ I do not know exactly what user the function running as is because it is implicit call. I know that records in table the dict.trigrams_array are inserted by user "worker". Owner of the table fpbackup.fp_vpn_data_2021w12 is user "fpbkwriter". user "worker" and "fpbkwriter" have the following permissions: GRANT USAGE ON SCHEMA dict TO worker; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA dict TO worker; GRANT fpbkwriter TO worker GRANTED BY postgres; GRANT USAGE, CREATE ON SCHEMA fpbackup TO fpbkwriter; The user "fpbkwriter" does not have any privileges related to schema "dict".