Re: Insert rule and seqences

Поиск
Список
Период
Сортировка
От Jochem van Dieten
Тема Re: Insert rule and seqences
Дата
Msg-id 3B93D789.4060305@oli.tudelft.nl
обсуждение исходный текст
Ответ на Insert rule and seqences  (Bo Lorentsen <bl@netgroup.dk>)
Список pgsql-novice
Bo Lorentsen wrote:
>
>     CREATE SEQUENCE entity_seq;
>
>     CREATE TABLE A (
>         id        INTEGER DEFAULT nextval( 'entity_seq' ),
>         name      TEXT
>     );
>
>     CREATE TABLE B (
>         name     TEXT,
>         a_ref    INTEGER NOT NULL     -- REFERENCES A( id )
>     );
>
>     CREATE RULE insert_on_a
>     AS ON INSERT
>     TO A (
>         INSERT INTO B name, a_ref VALUES( name, currval( 'entity_seq' ));
>     );
>
> Is this all wrong, or is the another way to get the new 'id' value from
> the A table ?

I wouldn't use a RULE but a TRIGGER. Something like the one below
(please check syntax ;) ).

CREATE TRIGGER tr_insert_on_a AFTER INSERT OR UPDATE ON A
FOR EACH ROW EXECUTE PROCEDURE fn_insert_on_a();

CREATE function fn_insert_on_a() RETURNS OPAQUE AS '
     BEGIN
         INSERT INTO B name, a_ref VALUES(NEW.name, NEW.id);
     END;
' LANGUAGE 'plpgsql';

Jochem


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

Предыдущее
От: Bo Lorentsen
Дата:
Сообщение: Insert rule and seqences
Следующее
От: Tom Lane
Дата:
Сообщение: Re: renaming a db