giovedì 3 agosto 2023

PostgreSQL e le variabili di sessione

Nel migrare un Database Firebird ad uno PostgreSQL, mi sono trovato a dover fare il porting di stored procedure che fanno uso di variabili di contesto, definite in Firebird con le istruzioni SQL :

rdb$set_context('USER_SESSION', 'User_id', 1);
rdb$get_context('USER_SESSION', 'User_id');


Anche PostgreSQL permette di poter definire variabili legate alla sessione, con le seguenti istruzioni SQL:

set foo.username to ''flavio''  per poter definire la nuova variabile 
select current_setting(''foo.username '')  per recuperarne il valore.

Lo scope della variabile creata è limitata alla sessione: alla chiusura della sessione, la variabile non sarà più accessibile. Ed essendo una variabile il cui scope è legato alla sessione, non sarà accessibile a sessioni differenti da quella che l'ha creata.

Per fare un piccolo test, ho creato un progettino in Delphi che, eseguito due (o più volte), permette di definire una nuova variabile legata alla sessione durante la quale sono connesso al database.

Da questo link è possibile scaricare il progetto: Progetto Delphi

Dopo aver creato il vostro DB denominato mydb, mandate in esecuzione due istanze di esso contemporaneamente e provate voi stessi a verificare l'isolamento della variabile creata nell'ambito della sessione.


#codinglikeacoder




Nessun commento:

Posta un commento

Embedding "Flavio", my name

 Hi, I'm { "embedding": [ 0.02614186331629753, 0.4381698966026306, -0.21378979086875916, 0.2108100950717926, ...