Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Собрать максимально информацию в триггере. / 16 сообщений из 16, страница 1 из 1
01.06.2017, 13:12
    #39463776
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Привет, нужно собирать инфу по изменению таблицы.

И собрать максимальную информацию, кто изменил, какое приложение, какой ip и тп...

Подскажите пожалуйста как эту информацию (кто изменил, какое приложение, какой ip и тп) добыть.
...
Рейтинг: 0 / 0
01.06.2017, 13:21
    #39463789
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Ну и в принципе возможно ли это?

В мс скл возможно, например.
...
Рейтинг: 0 / 0
01.06.2017, 13:40
    #39463804
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
пока не нашел как это сделать
...
Рейтинг: 0 / 0
01.06.2017, 13:56
    #39463818
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Только это нашел:

When a PL/pgSQL function is called as a trigger, several special variables are created automatically in the top-level block. They are:

NEW

Data type RECORD; variable holding the new database row for INSERT/UPDATE operations in row-level triggers. This variable is NULL in statement-level triggers.
OLD

Data type RECORD; variable holding the old database row for UPDATE/DELETE operations in row-level triggers. This variable is NULL in statement-level triggers.
TG_NAME

Data type name; variable that contains the name of the trigger actually fired.
TG_WHEN

Data type text; a string of either BEFORE or AFTER depending on the trigger's definition.
TG_LEVEL

Data type text; a string of either ROW or STATEMENT depending on the trigger's definition.
TG_OP

Data type text; a string of INSERT, UPDATE, or DELETE telling for which operation the trigger was fired.
TG_RELID

Data type oid; the object ID of the table that caused the trigger invocation.
TG_RELNAME

Data type name; the name of the table that caused the trigger invocation.
TG_NARGS

Data type integer; the number of arguments given to the trigger procedure in the CREATE TRIGGER statement.
TG_ARGV[]

Data type array of text; the arguments from the CREATE TRIGGER statement. The index counts from 0. Invalid indices (less than 0 or greater than or equal to tg_nargs) result in a null value.




Но это не то.
...
Рейтинг: 0 / 0
01.06.2017, 14:38
    #39463854
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Неужели постгрес так не может делать? :(
...
Рейтинг: 0 / 0
01.06.2017, 14:46
    #39463860
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
...
Рейтинг: 0 / 0
01.06.2017, 16:43
    #39463975
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
...
Рейтинг: 0 / 0
01.06.2017, 16:44
    #39463977
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
LeXa NalBat,

Скажите, в триггере SELECT inet_client_addr() должен вернуть адрес того, кто изменяет стороки?



Просто у меня в пг-админе не пойму что он возвращает, не мой IP точно.
...
Рейтинг: 0 / 0
01.06.2017, 16:45
    #39463978
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Ну и приложение очень хочется отловить триггером.
...
Рейтинг: 0 / 0
01.06.2017, 17:07
    #39464001
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Что-то никак не найду как запросом получить название клиентского приложения

Постгре 8
...
Рейтинг: 0 / 0
01.06.2017, 17:10
    #39464004
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
камаз5320,

select current_setting('application_name');

Чтобы это работало, клиентское приложение при старте должно выставить:
set application_name = 'имя приложения';
...
Рейтинг: 0 / 0
01.06.2017, 17:14
    #39464008
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Павел Лузановкамаз5320,

select current_setting('application_name');

Чтобы это работало, клиентское приложение при старте должно выставить:
set application_name = 'имя приложения';

Спасибо!

В 9.5 работает нормально.



Однако в 8-й версии:

Код: sql
1.
2.
3.
4.
5.
ERROR:  unrecognized configuration parameter "application_name"
********** Ошибка **********

ERROR: unrecognized configuration parameter "application_name"
SQL-состояние: 42704





Как бы в 8-й версии отловить его?...
...
Рейтинг: 0 / 0
01.06.2017, 17:20
    #39464014
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
камаз5320,

Ну сделайте пользовательский параметр (должна быть точка в имени):
set myapp.name = 'имя приложения';
select current_setting('myapp.name');
...
Рейтинг: 0 / 0
01.06.2017, 17:21
    #39464016
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
камаз5320Павел Лузановкамаз5320,

select current_setting('application_name');

Чтобы это работало, клиентское приложение при старте должно выставить:
set application_name = 'имя приложения';

Спасибо!

В 9.5 работает нормально.



Однако в 8-й версии:

Код: sql
1.
2.
3.
4.
5.
ERROR:  unrecognized configuration parameter "application_name"
********** Ошибка **********

ERROR: unrecognized configuration parameter "application_name"
SQL-состояние: 42704





Как бы в 8-й версии отловить его?...


1)в 8 версии такого параметра нет
2)если приложение у вас не самописное то 99% что "application_name" оно не ставит (и без переписывания ставить не будет).
(т.е. параметр на новых версиях то есть но если ПРИЛОЖЕНИЕ его не ставит - толку ноль).
...
Рейтинг: 0 / 0
01.06.2017, 17:23
    #39464017
камаз5320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
Maxim Bogukкамаз5320пропущено...


Спасибо!

В 9.5 работает нормально.



Однако в 8-й версии:

Код: sql
1.
2.
3.
4.
5.
ERROR:  unrecognized configuration parameter "application_name"
********** Ошибка **********

ERROR: unrecognized configuration parameter "application_name"
SQL-состояние: 42704







Как бы в 8-й версии отловить его?...


1)в 8 версии такого параметра нет
2)если приложение у вас не самописное то 99% что "application_name" оно не ставит (и без переписывания ставить не будет).
(т.е. параметр на новых версиях то есть но если ПРИЛОЖЕНИЕ его не ставит - толку ноль).





Получается

select current_setting('application_name');

Просто берет информацию из:
SELECT * FROM pg_settings WHERE name='application_name'






А на 8-ке в принципе нельзя имя приложения в триггер записать?
...
Рейтинг: 0 / 0
02.06.2017, 10:21
    #39464316
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Собрать максимально информацию в триггере.
камаз5320А на 8-ке в принципе нельзя имя приложения в триггер записать?

Последняя 8рка (8.4) EOL 3 года назад!!!! ( July 2014)
Если вам нечего делать - возьмите исходники и внесите туда поддержку application_name из новых версий.

--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Собрать максимально информацию в триггере. / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]