Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / использование CONSTRAINT TRIGGER / 1 сообщений из 1, страница 1 из 1
12.10.2007, 17:38
    #34866006
Gold_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование CONSTRAINT TRIGGER
Начал изучать PostgreSQL
уставил 8.2 на WinXP SP2, соотвественно pgAdmin v. 1.6.3.
и SQL Manager 2007 for PostgreSQL (4.1.0.7)
В качестве учебной задачи для себя:
есть таблица (удалил лишние поля)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE filling
(
  id_filling serial NOT NULL,
  start_date date,
  end_date date,
  CONSTRAINT filling_pkey PRIMARY KEY (id_filling)
) 
WITHOUT OIDS;
ALTER TABLE filling OWNER TO postgres;

необходимо не допустить пересечения интервалов, т.е. после вставки/обновления запрос дожен вернуть только одно значение. (обсуждалось http://www.sql.ru/forum/actualthread.aspx?tid=475528&pg=2)

Код: plaintext
1.
2.
   SELECT INTO cnt COUNT(*) FROM filling
    WHERE new.start_date <= filling.end_date
      AND new.end_date >= filling.start_date;
Как понял для этого в постгрес используется CONSTRAINT TRIGGER
Делаю след:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE OR REPLACE FUNCTION check_shipment_addition()
  RETURNS "trigger" AS
$BODY$  
DECLARE 
-- Объявление переменной для количества 
cnt integer; 

BEGIN 
   SELECT INTO cnt COUNT(*) FROM filling
    WHERE new.start_date <= filling.end_date
      AND new.end_date >= filling.start_date;
   IF cnt >  1  THEN    
      RAISE EXCEPTION 'Invalid record' ;
   END IF;   

RETURN NEW; 
END; 
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION check_shipment_addition() OWNER TO postgres;

CREATE CONSTRAINT  TRIGGER filling_i
    AFTER INSERT OR UPDATE
    ON filling
    FOR EACH ROW
    EXECUTE PROCEDURE check_shipment_addition (); 

Вроде работает. Беспокоит след.:
-при большом количестве записей будут ли при таком подходе тормоза. (Индексы по полям start_date, end_date создал)
-Возможно ли при каких-либо условиях "просачивание" ошибочных записей, конкурирующие
транзакции, разные уровни изоляции.
-в SQL Manager 2007 for PostgreSQL не могу найти ни триггерную функцию, ни триггер. (лучше искать ?)
-pgAdmin не могу найти триггер (лучше искать ?)
-как удалит триггер? :)

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


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