На клиентском сервере у меня возникла проблема - у меня не было разрешения на создание расширения pgcrypto . Итак, администратор сервера сделал это для меня, и теперь я вижу в pg_available_extensions что pgcrypto установлен (1.1), однако его функции для меня недоступны:

=> select gen_random_uuid();
ERROR:  function gen_random_uuid() does not exist
LINE 1: select gen_random_uuid();
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Также у меня нет прав на удаление расширения (что может быть подсказкой, что не так?):

=> drop extension pgcrypto;
ERROR:  must be owner of extension pgcrypto

Есть идеи, что не так и почему я не вижу функции pgcrypto ? Что-то с разрешениями?

1 ответ1

6

Несколько возможных объяснений:

  • Версия PostgreSQL старше 9.4. Эта функция gen_random_uuid() не существовала до http://www.postgresql.org/docs/9.4/static/release-9-4.html :

    Добавьте генератор случайных чисел UUID gen_random_uuid() в pgcrypto (Оскари Сааренмаа)

    Используйте select version(); проверить версию.

  • или это 9.4+, но расширение было создано в схеме, которой нет в search_path вашего сеанса SQL. Используйте мета-команду \dx в psql, чтобы просмотреть список установленных расширений и проверить столбец Schema .

  • или расширение находится в схеме, включенной в search_path , но у пользователя базы данных нет разрешения на его просмотр. Предоставьте его с помощью: GRANT USAGE ON SCHEMA schema_name TO role_name .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .