Postgres 9.3, hstore 1.1, неизвестный оператор '?'

У меня есть таблица журнала, которая собирает изменения таблицы с помощью hstore. Что-то подобное:

CREATE TABLE "gt_wells"."log_edits" (
      "well_gid"    SERIAL
    , "modified_by" TEXT
    , "edit"        HSTORE
);

где «редактировать» — это разница между предыдущим и новым значениями записи. Все работает так, как ожидалось.

Я хочу выбрать строки, в которых был отредактирован определенный столбец, поэтому, используя мою роль входа с правами суперпользователя, я могу успешно запустить:

SELECT DISTINCT "well_gid"
FROM "gt_wells"."log_edits"
WHERE "edit" ? 'full_sized_class;

Но когда я запускаю его из другой роли, я получаю неизвестную ошибку оператора:

SET ROLE "inl-trigger";
SELECT DISTINCT "well_gid"
FROM "gt_wells"."log_edits"
WHERE "edit" ? 'full_sized_class' AND "modified_by" != 'inl-trigger';
RESET ROLE;

Error : ERROR:  operator does not exist: public.hstore ? unknown
LINE 3: WHERE "edit" ? 'full_sized_class' AND "modified_by" != 'inl-...
                     ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Приведение «full_sized_class» к TEXT не помогает. Расширение hstore существует в базе данных, и я дал привилегии «inl-trigger» для типа hstore:

CREATE EXTENSION hstore;
Error : ERROR:  extension "hstore" already exists

GRANT ALL ON TYPE hstore TO "inl-trigger";
Affected rows : 0, Time: 0.00sec

Если я сделаю «inl-trigger» суперпользователем, все будет работать как положено. Итак, каких привилегий мне не хватает? Почему «inl-trigger» не может использовать операторы hstore?


person Dylan Hettinger    schedule 17.06.2014    source источник


Ответы (1)


Необходимое использование схемы hstore было установлено для:

GRANT USAGE ON SCHEMA public TO "inl-trigger";
person Dylan Hettinger    schedule 17.06.2014