Ich sehe keinen Weg, um dieses andere zu tun, als temporäre Tabellen zu erstellen und in Ihrem Execute Trigger verwenden. Dies wird jedoch Auswirkungen auf die Leistung haben. Eine bessere Option wäre, irgendwo in eine andere Tabelle einzubinden und sich anzumelden, wer sich per Sitzungs-ID und Back-End-PID an-/abmeldet und darauf verweist?
Hinweis: Sie haben keine andere Möglichkeit, die Informationen in die Update-Anweisung zu übernehmen. Beachten Sie, dass der Auslöser nur sehen kann, was in der API oder in der Datenbank verfügbar ist. Wenn Sie möchten, dass ein Trigger transparent arbeitet, können Sie nicht erwarten, dass er zur Laufzeit Informationen an ihn weitergibt, auf die er sonst keinen Zugriff hätte.
Die grundlegende Frage, die Sie stellen müssen, ist "Wie weiß die dB, was man dort setzt?" Sobald Sie sich für eine Methode entscheiden, sollte die Antwort klar sein, aber es gibt keine kostenlosen Mittagessen.
aktualisieren
In der Vergangenheit, als ich hatte, so etwas zu tun, wenn die Anmeldung an die DB mit einer Anwendungsrolle ist, die Art, wie ich es getan haben ist eine temporäre Tabelle zu erstellen und dann den Zugriff diese Tabelle aus den gespeicherten Prozeduren. Gegenwärtig gespeicherte Prozeduren können auf diese Weise temporäre Tabellen verarbeiten, aber in der Vergangenheit mussten wir EXECUTE verwenden.
Es gibt zwei große Einschränkungen bei diesem Ansatz. Die erste ist, dass es eine Menge Tabellen erstellt und dies schließlich zu der Möglichkeit der Oid-Wraparound führt.
In diesen Tagen bevorzuge ich die Logins für die db als Benutzer Logins. Dies macht das viel einfacher zu verwalten und Sie können Zugang nur über den Wert SESSION_USER
(ein Neuling Fehler ist CURRENT_USER
zu verwenden, die Sie den aktuellen Sicherheitskontext zeigt statt der Anmeldung des Benutzers.
Keiner dieser Ansätze funktionieren gut mit Verbindungspooling Im ersten Fall können Sie kein Verbindungspooling durchführen, da Ihre temporären Tabellen falsch interpretiert oder geplottert werden, im zweiten Fall nicht, da die Login-Rollen unterschiedlich sind
mögliches Duplikat von [Passender Benutzer ID zu PostgreSQL-Triggern] (http://stackoverflow.com/questions/13172524/passing-user-id-to-postgresql-triggers) –
Die Antwort [hier] [1] fasst es ziemlich gut zusammen. [1]: http://stackoverflow.com/a/13172964/947357 –
8.2? Bitte lesen Sie http://www.postgresql.org/support/versioning/ und beginnen Sie mit der Planung Ihres Upgrades. –