Ein paar Fragen zu FDW-Usermapping

Ich erstelle mit postgres_fdw einige Foreign Tables zu einer anderen Datenbank auf dem gleichen Server. Das funktioniert auch sehr gut, bloß beim Usermapping lauf ich vor die Wand. Anwendungsfall ist Digitalisierarbeit in QGIS die von mehreren Nutzern verteilt ausgeführt wird. Beim Speichern der Daten sollen dann einge Felder per Trigger mit Daten aus einer Foreigntable ausgefüllt werden.
Wie kann ich z.B. einer Gruppe ‘user’, die meine User umfasst, Zugriff auf die Foreign Table geben? Muß ich da für jeden User ein Mapping anlegen oder kann ich da eine ganze Gruppe auf einen User/eine Gruppe/Public der anderen Datenbank mappen?

create user mapping for user server local_basemap options (user 'Nutzer', password 'blabla');
ERROR:  user mapping "postgres" already exists for server local_basemap

Ich kann ein Mapping mit ‘CURRENT_USER’ anlegen, dann wird aber immer ein Mapping bezogen auf den momentan eingeloggten Nutzer angelegt? Ich würde das aber so verstehen, das dann eben immer ein Mapping für jeden Nutzer angelegt wird der das halt darf? Kann man dass ggf. beim Einloogen als Script erledigen, so das der Nutzer sich quasi beim ersten einloggen automatisch ein Mapping erstellt?

CREATE USER MAPPING 
   FOR postgres
   SERVER local_basemap;

Ähnlich ist es mit ‘PUBLIC’ als Mapping. Da würde ich verstehen, das dann eben jeder ohne extra Mapping die Tabelle sehen darf. Wie auch immer, beides hat keinen Effekt, bei mir funktionieren irgendwie nur Mappings mit Usernamen oder ich hab noch nicht verstanden wie das geht.

create user mapping
   for public
   server local_basemap;

Und zu guter letzt: Kann ich die einzulesenden Reihen der entfernten Tabelle direkt beschränken, so das nur eine Teilmenge der Gesamttabelle angezeigt wird oder kann man das nur mit einem dahintergeschalteten View bewerkstelligen?
Server ist im übrigen Postgres 9.4.5.

Fragen über Fragen :slight_smile:

Viele Grüße

Uwe

ist das Thema noch aktuell?

Das User Mapping sollte so zu lösen sein, daß Du auf die foreign table passende Rechte GRANTest.

2te Frage: nach welchen Regeln willst Du das beschränken? Anhand des Users? Das sollte sich mit 9.5 schön via Row Level Security machen lassen, aber Du hast noch 9.4, oder?

Prinzipiell ist das noch aktuell allerdings verwende ich im Moment den Workaround, dass ich aus den vollständigen Foreigntables einen Materiaized View baue, der auch einige projektbezogene Filterungen enthält und der für alle Nutzer benutzbar ist. Das lässt sich im Moment benutzen.
Als ersten Ansatz wollte ich das generell so machen, das keine redundanten Daten entstehen. Also wollte ich ein Mapping für die Gruppe ‘users’ und einen Filter anlegen, was irgendwie nicht funktioniert hat, bin da im Moment selbst etwas draussen, was ich da genau machen wollte. Auf jeden Fall sollte die Beschränkung anhand verschiedener Attribute erzeugt werden ohne entweder auf der einen oder anderen Seite Views anlegen zu müssen.
Ich wollte das möglichst alles unter Postgres erledigen, da eine der externen Quellen eine Oracle ist und ich keine Lust und Zeit habe mich damit so ausgiebig zu beschäftigen.

Gruß UWe