Re: Help creating rules/triggers/functions

Поиск
Список
Период
Сортировка
От Jan Wieck
Тема Re: Help creating rules/triggers/functions
Дата
Msg-id 200103021534.KAA03563@jupiter.jw.home
обсуждение исходный текст
Ответ на Help creating rules/triggers/functions  (Blaise Carrupt <bc@mjtsa.com>)
Список pgsql-sql
Blaise Carrupt wrote:
> Hi all !
>
> I use PostgreSQL 7.0.2 on a HP-UX system.
>
> I would like to create a simple function and a simple trigger (or rule) that
> deny a delete from a table if the row is referenced in another table.
>
> I though it should look like this (from my Ingres experience... :) :
>
> create function A_del(int4 i_id)
> BEGIN
>    SELECT id
>      FROM b
>      where a_id = :i_id;
>
>    if rowcount > 0 then
>    RAISE EXCEPTION "not allowed !"
>    end if;
> END
>
       CREATE FUNCTION A_del () RETURNS opaque AS '       DECLARE           nrefs integer;       BEGIN           nrefs
:=count(*) FROM b WHERE a_id = OLD.i_id;           IF nrefs > 0 THEN               RAISE EXCEPTION ''a_id % still
referencedfrom b'', OLD.i_id;           END IF;           RETURN OLD;       END;'       LANGUAGE 'plpgsql';
 
>
> create trigger before delete from A for each row execute procedure A_del(old.id)
       CREATE TRIGGER A_del BEFORE DELETE ON A           FOR EACH ROW EXECUTE PROCEDURE A_del();

>
>
> But it seems to be much more complicated with Postgres (create a C function
> using CurrentTriggerData,...). May I have missed something or is it really much
> more complicated ?
   Alternatively  (IMHO  preferred)  you could use a referential   integrity constraint in  table  B,  which  would
also cover   UPDATE on A and check values inserted/updated into/in B.
 
       CREATE TABLE B ( ...           FOREIGN KEY (i_id) REFERENCES A (a_id)


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com



В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Help needed -> ERROR: record arow has no field description
Следующее
От: "pgsql-sql"
Дата:
Сообщение: Re: lo_import for storing Blobs