Então, estou tentando registrar não apenas o usuário postgres, mas seu ID da minha tabela (por exemplo) Person (person_id) quando ele chama funções.
Até agora, pelo que posso dizer, posso obter quase todas as informações necessárias dessas tabelas do sistema:
pg_stat_activity
pg_stat_statements
se eu ativá-lo (mas provavelmente não será possível devido a algumas restrições)
Mas a parte que não consigo descobrir é se quero registrar o ID do usuário (por exemplo) da tabela User ( user_id
por exemplo).
Basicamente, eu gostaria de criar uma pequena tabela que abrigaria apenas o log do último mês e inseriria nela.
- user_id (não id do sistema, mas da minha própria tabela)
- endereço de IP
- timestamptz de quando ele chamou a função/consulta
- consulta que ele executou
Meu principal problema é a parte user_id, já que os outros 3 valores já existem no pg_stat_activity
( client_addr
, query_start
, query
)
Se não houver uma maneira fácil de fazer isso acontecer, digamos que eu queira criar uma função que de alguma forma selecionará o user_id com base nos parâmetros retornados por pg_stat_activity
, mas não consigo descobrir como eu faria isso. Parâmetros de tabela ocultos como tableoid, cmin, cmax, xmin, xmax, ctid
não me ajudam aqui, pelo menos não vejo como, talvez eu tenha perdido alguma coisa?
Com base em seus comentários,
INSERT
pode ser algo assim:A chave para identificar a sessão atual é o ID do processo de back-end.
pg_stat_activity tem application_name. Você pode usar isso para anexar person_id. Antes de cada consulta, você pode executar abaixo da consulta
Usamos essa maneira para registrar user_id e módulo de onde a consulta foi acionada. Este application_name também é registrado em logs reais se você especificar isso no formato de log.