Folgendes Szenario:
Ein select hat einen Ausführungsplan mit parallelen Anteilen.
Wenn ich diese Query ausführe erhalte ich ein
SQL-Fehler [42501]:
ERROR: permission denied for database “xyz”
DETAIL: User does not have CONNECT privilege.
CONTEXT: parallel worker
Setze ich nun max_parallel_workers_per_gather=0 kann die Query ausgeführt werden.
Aber ich möchte nicht die Parallelisierung ausschalten.
Was könnte der Grund für den Fehler sein. Mir ist nicht klar was ich an den Berechtigungen ändern muss, damit es mit Parallelisierung funktioniert?
Hi Castor, nein es wird nur auf lokale Tables zugegriffen.
Aber wieso sollten unterschiedliche Berechtigungen auf DB-Ressourcen bei paralleler und sequentieller Ausführung ziehen?
Mein - zugegeben sehr schwacher - Verdacht war etwas in der Richtung: der Benutzer der für die Anmeldung an dem foreign server (oder DbLink) verwendet wird, hat ein connection limit.
Aber wenn weder foreign tables, noch DbLink beteiligt sind, kann man das wohl ausschliessen.
Was ist denn die exakte Postgres Version? (Ausgabe von select version();)
Hm, ein Kunde hat den selben Fehler beklagt. Ich kann mir vorstellen, daß die Commits 5a2fed911a und 95f5a52372 hier irgendein Problem eingebaut haben.
Es wäre interessant zu wissen, was genau der User, der die Abfrage ausführt, vorher gemacht hat.
Ist SET SESSION AUTHORIZATION oder SET ROLE ausgeführt worden?
Hat der User mit ALTER ROLE ... SET ROLE ... eine Standardrolle zugewiesen bekommen? Das sieht man mit \ddp in psql.
Ist eine Extension wie set_user in Verwendung, die die aktive Rolle verändert?
Kann es sein, daß die Anzahl der Datenbankverbindungen an max_connections - superuser_reserved_connections - reserved_connections herankommt?
Irgendetwas muß anders sein als normal, sonst würde der Fehler jedesmal bei der Verwendung von Parallel Query kommen.
Ja der einloggende User bekommt eine neue Rolle.
ALTER ROLE role1 IN DATABASE db1 SET role=role2;
Nachdem ich role2 das Connect privilege gegeben habe funktioniert es auch.
Vielen Dank für den Hinweis! 95f5a52372 scheint mir wohl der Grund zu sein.