[PostgreSQL] Как отследить операции записи в БД с опред. знач. полей?

mazamaza2008

"Спасите, помогите, спасите, помогите..." (с) лев Алекс, "Мадагаскар"
Дана БД и таблица в ней. У таблицы есть поле с идентификатором: ID. Надо: постоянно следить, когда в эту таблицу записываются строки, у которых поле ID начинается с заданной подстроки. В случае такового события запустить внешнюю функцию.
Чувствую, что все это на триггер очень похоже, но не могу сообразить, как заставить триггер отслеживать INSERT у которого ID='blablabla%'.
Спасибо

skvoria

Ну а если выполнять для каждой добавляемой записи и проверять ID уже внутри функции?

mazamaza2008

Была у меня такая мысль, но так делать не хочется, потому что будет слишком много ложных срабатываний. Событие это достаточно редкое по сравнению с общим объемом операций INSERT. Замедлит работу, наверное...

skvoria

Дык а иначе-то... опачки.
Как вариант - перевесь это дело с БД на скрипты. Вообще есть такая тенденция - на больших проектах сносить все констрейнты, чтобы не перегружать и без того запарившуюся базу.

zya369

psql 8.0.0beta1

create table tmp1(id text);
create or replace function f1(tt text)
returns integer as
$$
declare
begin
if(tt like 'as%')
then
insert into tmp1 values(tt);
end if;
return 0;
end;
$$ language plpgsql;
create table tmp2
(
id text primary key,
constraint ccc check
(id not like 'as%' or f1(id) = 0)
);
insert into tmp2 values('as1');
insert into tmp2 values('as2');
insert into tmp2 values('as3');
insert into tmp2 values('E1');
insert into tmp2 values('E2');
insert into tmp2 values('E3');
select * from tmp1;
id
-----
as1
as2
as3
(3 rows)

думаю, в общем мысль ясна

mazamaza2008

ухты!
здорово спасибо за идею!

zya369

сам только что придумал
Оставить комментарий
Имя или ник:
Комментарий: