Ich möchte die Benutzer-ID in einer benutzerdefinierten Sitzungsvariablen speichern und in Triggerprozeduren verwenden (lesen), um Benutzeraktionen zu autorisieren. Ich habe so etwas gefunden:
set session "myapp.user" = '12345';
...
SELECT current_setting('myapp.user');
und es scheint zu funktionieren - ich dachte, dass "myapp.user" in der .conf-Datei deklariert werden sollte, aber es scheint, dass ich Sitzungsvariablen im laufenden Betrieb erstellen kann (ich habe die .conf-Datei überhaupt nicht geändert).
Gibt es einen Nachteil, wenn man so etwas macht?
postgresql
postgresql-9.4
user606521
quelle
quelle
myapp.user
die in deklariert werden muss,postgresql.conf
wurde in 9.2 oder 9.1 entferntAntworten:
Vor Version 9.2 mussten Sie dem
custom_variable_classes
Parameter inpostgresql.conf
Ihre benutzerdefinierte Klassenvariable hinzufügen , z.In 9.2 wurde diese Anforderung entfernt :
Seit 9.2 können Sie Ihre benutzerdefinierte Klassenvariable einfach so festlegen, wie Sie es gerade tun. Sie müssen sich also keine Gedanken über Änderungen machen
postgresql.conf
.quelle
Wenn Sie nur die Benutzer-ID speichern müssen, lesen Sie So erhalten Sie die Benutzer-ID des Betriebssystems in PostgreSQL
Es ist ziemlich einfach und erfordert keine benutzerdefinierte Konfiguration.
quelle
Für solche Fälle möchte ich eine plperl-Funktion wie diese erstellen:
Dies hat den Vorteil, dass es auch in SQL-Anweisungen funktioniert, zum Beispiel:
quelle