La raison en est que vous avez besoin de privilèges supplémentaires pour accéder à une vue ou à une table. Les privilèges sur la base de données ne couvrent pas l'accès à tous les objets qu'elle contient.
C'est différent avec les fonctions :EXECUTE le privilège est accordé à public par défaut. Mais la fonction est exécutée avec les privilèges de l'utilisateur courant. Vous pourriez être intéressé par le SECURITY DEFINER modificateur pour CREATE FUNCTION . Mais normalement, il suffit d'accorder SELECT sur les tables concernées.
Selon la documentation sur les privilèges par défaut :
Selon le type d'objet, les privilèges initiaux par défaut peuvent inclure l'octroi de certains privilèges à
PUBLIC. La valeur par défaut est no publicaccess pour les tables, les colonnes, les schémas et les tablespaces ;CONNECTprivilège etTEMPprivilège de création de table pour les bases de données ;EXECUTEprivilège pour les fonctions; etUSAGEprivilège pour les langues.
Vous pourriez être intéressé par cette commande DDL (nécessite Postgres 9.0 ou version ultérieure) :
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
En étant connecté à la base de données en question, bien sûr (voir le commentaire de @marcel ci-dessous), et en tant qu'utilisateur disposant de privilèges suffisants. Vous pouvez également être intéressé par le paramètre DEFAULT PRIVILEGES :
- Accorder tout sur un schéma spécifique dans la base de données à un rôle de groupe dans PostgreSQL
Réponse plus détaillée sur la gestion des privilèges :
- Comment gérer les PRIVILÈGES PAR DÉFAUT pour les UTILISATEURS sur une BASE DE DONNÉES vs SCHEMA ?
pgAdmin dispose d'une fonctionnalité pour des opérations groupées plus sophistiquées :

Ou vous pouvez interroger les catalogues système pour créer des instructions DDL pour l'octroi / la révocation en masse ...