Как получить выполненные детали клиента внутри функции PL / pgSQL - PullRequest
0 голосов
/ 04 сентября 2018

Не могли бы вы, пожалуйста, сообщить мне, как я могу получить подробную информацию о выполняемом клиенте (только для одного клиента) внутри функции PL / pgSQL (что-то $whoexecuted). Я получаю текущие все активные детали клиента. согласно следующему коду.

begin
select ps.usename, ps.client_addr,ps.application_name from pg_stat_activity ps
where state = 'active'
and ps.usename in('user1') into pg_stat_activity_rowtype
;

1 Ответ

0 голосов
/ 04 сентября 2018

Содержимое pg_stat_activity доступно и в PLpgSQL. Так что вы можете использовать

do $$
declare r record;
begin
  for r in select * from pg_stat_activity where pid = pg_backend_pid()
  loop
    raise notice '%', r;
  end loop;
end;
$$;

Эти данные могут быть получены из некоторого источника:

select current_user, session_user, current_database(), inet_client_addr(), current_setting('application_name');
┌──────────────┬──────────────┬──────────────────┬──────────────────┬─────────────────┐
│ current_user │ session_user │ current_database │ inet_client_addr │ current_setting │
╞══════════════╪══════════════╪══════════════════╪══════════════════╪═════════════════╡
│ pavel        │ pavel        │ postgres         │                  │ psql            │
└──────────────┴──────────────┴──────────────────┴──────────────────┴─────────────────┘
(1 row)

Подробнее в документации:

  1. https://www.postgresql.org/docs/current/static/functions-admin.html
  2. https://www.postgresql.org/docs/current/static/functions-info.html
...