powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логирование изменений
4 сообщений из 4, страница 1 из 1
Логирование изменений
    #39330092
band-rk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем вечер добрый. В просторах интернета нашел простой способ логирование.
Все в принципе работает, но хотелось бы чуть упростить, т.к. в таблице может быть большое количество полей и перечислять их каждый раз не сильно хорошо.
Пробую так но не получается приветить NEW :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
  mstr varchar(30);
  astr varchar(100);
  retstr varchar(254);
  i int;
  arr_field text[] = array['field_1', 'field_2', field_3', 'field_4'];
  arr_field_new text[];
BEGIN

FOR i IN 1..array_upper(arr_field, 1)
LOOP
arr_field_new[i] = 'NEW.'||arr_field[i];
END LOOP; 

IF TG_OP = 'UPDATE' THEN EXECUTE 'INSERT INTO tab_log ('||array_to_string(arr_field, ',')||') values ('|| array_to_string(arr_field_new, ',') ||')';
RETURN NEW;



Помогите разобраться, буду очень признателен.
...
Рейтинг: 0 / 0
Логирование изменений
    #39330116
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
band-rkВсем вечер добрый. В просторах интернета нашел простой способ логирование.
Все в принципе работает, но хотелось бы чуть упростить, т.к. в таблице может быть большое количество полей и перечислять их каждый раз не сильно хорошо.
Пробую так но не получается приветить NEW :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
  mstr varchar(30);
  astr varchar(100);
  retstr varchar(254);
  i int;
  arr_field text[] = array['field_1', 'field_2', 'field_3', 'field_4'];--checked
  arr_field_new text[];
BEGIN

FOR i IN 1..array_upper(arr_field, 1)
LOOP
arr_field_new[i] = 'NEW.'||arr_field[i];-- gjhhenxbr !11111
END LOOP; 

IF TG_OP = 'UPDATE' THEN EXECUTE 'INSERT INTO tab_log ('||array_to_string(arr_field, ',')||') values ('|| array_to_string(arr_field_new, ',') ||')';
RETURN NEW;



Помогите разобраться, буду очень признателен. во первых при совпадении порядка полей всего этого не надо -- пользуйте безсписковый синтакс инсерта
во вторых на случай опасности смены ддл--ей перечисление полей все равно не спасёт. Юз ашсторе, люк (hstore) / Hstore -- замечательно хранит всю историю даже при смене ддл.

в третьих попробуйте что--то из оперы EXECUTE 'SELECT %1.'||fld_name||';' USING NEW;
хотя это все не нужно, а в вашем случае статически предопределенного списка полей можно просто всё статично откейсить.
...
Рейтинг: 0 / 0
Логирование изменений
    #39330122
band-rk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqband-rkВсем вечер добрый. В просторах интернета нашел простой способ логирование.
Все в принципе работает, но хотелось бы чуть упростить, т.к. в таблице может быть большое количество полей и перечислять их каждый раз не сильно хорошо.
Пробую так но не получается приветить NEW :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE
  mstr varchar(30);
  astr varchar(100);
  retstr varchar(254);
  i int;
  arr_field text[] = array['field_1', 'field_2', 'field_3', 'field_4'];--checked
  arr_field_new text[];
BEGIN

FOR i IN 1..array_upper(arr_field, 1)
LOOP
arr_field_new[i] = 'NEW.'||arr_field[i];-- gjhhenxbr !11111
END LOOP; 

IF TG_OP = 'UPDATE' THEN EXECUTE 'INSERT INTO tab_log ('||array_to_string(arr_field, ',')||') values ('|| array_to_string(arr_field_new, ',') ||')';
RETURN NEW;



Помогите разобраться, буду очень признателен. во первых при совпадении порядка полей всего этого не надо -- пользуйте безсписковый синтакс инсерта
во вторых на случай опасности смены ддл--ей перечисление полей все равно не спасёт. Юз ашсторе, люк (hstore) / Hstore -- замечательно хранит всю историю даже при смене ддл.

в третьих попробуйте что--то из оперы EXECUTE 'SELECT %1.'||fld_name||';' USING NEW;
хотя это все не нужно, а в вашем случае статически предопределенного списка полей можно просто всё статично откейсить.
поля не совподут, поэтому все и танцы т.к. в таблице tab_log есть дополнительные поля, такие как дата изменения = now(), соле счетчика serial и т.д.
...
Рейтинг: 0 / 0
Логирование изменений
    #39330208
band-rk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
band-rk,
Может кто-то тупо тыкнуть носом, сейчас голова ворвется !!!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Логирование изменений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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