powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Триггер: Узнать текст запроса, изменившего данные
4 сообщений из 4, страница 1 из 1
Триггер: Узнать текст запроса, изменившего данные
    #35472887
S. Fedorenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно сабж.
Есть табличка №1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE "public"."table1" (
  "field1" INTEGER
) WITH OIDS;
INSERT INTO 
  public.table1
(
  field1
) 
VALUES (
   0 
);
мне нужно написать триггер, который будет в табличку №2
Код: plaintext
1.
2.
3.
CREATE TABLE "public"."table2" (
  "field1" TEXT, 
  "field2" TIMESTAMP( 0 ) WITHOUT TIME ZONE
) WITH OIDS;
складывать текст запроса на изменение данных.
Т.е. при выполнении запроса
Код: plaintext
UPDATE  public.table1  SET field1 =  1 ;
в табличку 2 добавится строчка с текстом этого запроса и таймстемпом

Подскажите плиз, очень нужно....
...
Рейтинг: 0 / 0
Триггер: Узнать текст запроса, изменившего данные
    #35478318
неадмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну как-нить так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create trigger tg1 after update on table1 for each row
execute procedure f1();

create or replace function f1() returns trigger as '
begin
execute ''insert into table2 select ''||quote_literal(''update table1 set field1='')||''||''||quote_literal(new.field1)||'', localtimestamp'';
return new;
end;' language plpgsql;

наверное можно как-то "по-прямее" сделать, но так тоже вроде работает; пойдет?
...
Рейтинг: 0 / 0
Триггер: Узнать текст запроса, изменившего данные
    #35478635
неадмин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или так.
Код: plaintext
1.
2.
3.
4.
5.
create or replace function f1() returns trigger as '
begin
insert into table2 select ''update table1 set field1=''||new.field1, localtimestamp;
return new;
end;' language plpgsql;
...
Рейтинг: 0 / 0
Триггер: Узнать текст запроса, изменившего данные
    #35478708
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
UPDATE  public.table1  SET field1 =  1 ;
если поле field1 уже имеет это значение, невозможно определить, было ли оно упомянуто в update запросе или нет. фактически - полный текст исходного запроса можно получить только из лога сервера.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Триггер: Узнать текст запроса, изменившего данные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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