Årsagen er, at du har brug for yderligere privilegier for at få adgang til en visning eller tabel. Privilegier på databasen dækker ikke adgang til alle objekter i den.
Det er anderledes med funktionerne:EXECUTE privilegium er givet til public som standard. Men funktionen udføres med den aktuelle brugers privilegier. Du kan være interesseret i SECURITY DEFINER modifikator for CREATE FUNCTION . Men normalt er det nok at give SELECT på involverede borde.
Per dokumentation om standardrettigheder:
Afhængigt af typen af objekt kan de oprindelige standardprivilegier omfatte tildeling af nogle privilegier til PUBLIC . Standarden er ingen offentlig adgang til tabeller, kolonner, skemaer og tablespaces; CONNECT privilegium og TEMP rettigheder til oprettelse af tabel for databaser; EXECUTE privilegium til funktioner; og USAGE privilegium til sprog.
Du kan være interesseret i denne DDL-kommando (kræver Postgres 9.0 eller senere):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Mens du er forbundet til den pågældende database, selvfølgelig (se @marcels kommentar nedenfor), og som bruger med tilstrækkelige privilegier. Du kan også være interesseret i indstillingen DEFAULT PRIVILEGES :
- Tildel alle på et specifikt skema i db'en til en grupperolle i PostgreSQL
Mere detaljeret svar på, hvordan man administrerer privilegier:
- Hvordan administrerer man STANDARDPRIVILEGIER for BRUGERE på en DATABASE vs. SCHEMA?
pgAdmin har en funktion til mere sofistikerede masseoperationer:

Eller du kan forespørge systemkatalogerne for at oprette DDL-erklæringer til massetildeling/tilbagekaldelse ...