Desejo armazenar o ID do usuário na variável de sessão personalizada e usá-lo (ler) em procedimentos de gatilho para autorizar ações do usuário. Eu encontrei algo assim:
set session "myapp.user" = '12345';
...
SELECT current_setting('myapp.user');
e parece funcionar - pensei que "myapp.user" deveria ser declarado no arquivo .conf, mas parece que posso criar variáveis de sessão na hora (não alterei o arquivo .conf).
Existe alguma desvantagem em fazer assim?
Antes da versão 9.2, você precisava adicionar sua variável de classe personalizada ao
custom_variable_classes
parâmetro empostgresql.conf
, como:Em 9.2, este requisito foi removido :
Portanto, desde 9.2, você pode apenas definir sua variável de classe personalizada como está fazendo atualmente, não precisa se preocupar em alterar
postgresql.conf
.Para casos como este, gosto de criar uma função plperl como esta:
A vantagem disso é que também funciona em instruções SQL, por exemplo:
Se você só precisa armazenar o ID do usuário, consulte Como obter o ID do usuário do sistema operacional no PostgreSQL
É bastante simples e não requer configuração personalizada.