Ответ 1
Причина в том, что вам нужны дополнительные привилегии для доступа к представлению или таблице. Привилегии в базе данных не охватывают доступ ко всем объектам в ней.
Это отличается от функций: EXECUTE
привилегия предоставляется public
по умолчанию. Но функция выполняется с привилегиями текущего пользователя. Вас может заинтересовать модификатор SECURITY DEFINER
для CREATE FUNCTION
. Но обычно достаточно предоставить SELECT
для задействованных таблиц.
В документации о привилегиях по умолчанию:
В зависимости от типа объекта первоначальные привилегии по умолчанию могут включают предоставление некоторых привилегий
public
. По умолчанию нет общедоступных доступ к таблицам, столбцам, схемам и табличным пространствам;CONNECT
привилегии иTEMP
привилегии создания таблиц для баз данных;EXECUTE
привилегия для функций; иUSAGE
привилегия для языков.
Вам может быть интересна эта команда DDL (требуется Postgres 9.0 или более поздняя версия):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
При подключении к соответствующей базе данных (см. комментарий @marcel ниже) и как пользователь с достаточными привилегиями. Вы также можете быть заинтересованы в настройке DEFAULT PRIVILEGES
:
Более подробный ответ, как управлять привилегиями:
pgAdmin имеет функцию более сложных операций с массой:
Или вы можете запросить системные каталоги для создания операторов DDL для массового предоставления/отзыва...