Usar o usuário do sistema no PostgreSQL

Visão Geral

O Latromi oferece diversos parâmetros (também conhecidos como ‘marcações’) que podem ser usados nos Comandos SQL das Consultas, Formulários e demais Objetos.

Um desses parâmetros é o nome do usuário autenticado (LoginUsuario), que fica no grupo Sessão

image

Para usar este parâmetro em um Comando SQL, é muito simples, como pode ser visto abaixo:

SELECT
   campo1, 
   campo2
FROM tabela
WHERE usuario = '{?SESSION LoginUsuario}'

Mas e se fosse necessário usar o nome do usuário em uma Trigger ou função de banco de dados onde não é possível passar parâmetros adicionais? Vamos descobrir a seguir!

A solução que será apresentada neste tópico só se aplica apenas à bancos de dados PostgreSQL.

Como o Usuário é Passado

Antes de abrir qualquer conexão com o banco de dados PostgreSQL, o Latromi sempre passa para o banco de dados o nome do usuário do sistema como um parâmetro de configuração, usando a função set_config.

O nome do parâmetro é latromi.username, e pode ser acessado à qualquer momento enquanto durar a conexão.

Obtendo o Nome de Usuário

PostgreSQL ≥ 9.6

Para pegar o nome do usuário autenticado a partir da versão 9.6 do PostgreSQL, basta chamar a função current_setting(setting_name [, missing_ok ]):

username = current_setting('latromi.username', true);

O parâmetro missing_ok evitar um erro caso o valor da configuração não estiver disponível. Neste caso, vai retornar null.

Versões anteriores do PosgreSQL

Na versão 9.5 (ou inferior) do PostgreSQL, a função current_setting não tem o parâmetro missing_ok, e dispara o erro a seguir se o valor da configuração não estiver disponível:

ERROR: unrecognized configuration parameter “latromi.username”

Para evitar este erro, basta usar um bloco Begin / Exception:

BEGIN 
   username = current_setting('latromi.username');
EXCEPTION WHEN others THEN
   username = null;
END
2 curtidas