Skip site navigation (1) Skip section navigation (2)

Rule'ы и ссылки на другие таблицы

From: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
To: pgsql-ru-general(at)postgresql(dot)org
Subject: Rule'ы и ссылки на другие таблицы
Date: 2011-09-19 07:50:55
Message-ID: 20110919075054.GB14612@apache.rbscorp.ru (view raw or flat)
Thread:
Lists: pgsql-ru-general
Имеем табличку users:

 | user_id | какие-то поля |

Далее имеем табличку событий events:

 | event_id | user_id REFERENCES users ("id") | time | какие-то поля |


То есть события поступают и записываются со ссылками на пользователя с
текущим временем.

теперь чтобы выбрать все события 25-го пользователя надо сказать

    SELECT * FROM events WHERE user_id = 25;

А чтобы выбрать последнее событие 25-го пользователя надо сказать

    SELECT * FROM events WHERE id = 25 ORDER BY time DESC LIMIT 1;

Далее потребовалось выводить список пользователей в одной колонке,
список последних их событий в другой.

Поскольку получаются подзапросы, то хочется завести табличку
last_events:

 | user_id REFERENCES "users" ("user_id") | event_id REFERENCES "events" ("event_id") |

Теперь хочется чтобы эту табличку правила сама база.

CREATE RULE "event_insert" AS ON INSERT TO "events" DO ALSO
    UPDATE
        "last_events"
    SET "event_id" = NEW."event_id"
    WHERE "user_id" = NEW."user_id";

Вот, а тепрерь если попробовать добавить запись в events то получаем
исключение о том что поскольку event_id еще некорректный (транзакция
еще незавершена), то и стало быть запись не проходит.

Вопрос: как можно средствами БД заполнять табличку last_events?

-- 

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Responses

pgsql-ru-general by date

Next:From: Andrey N. OktyabrskiDate: 2011-09-19 09:04:28
Subject: Re: Rule'ы и ссылки на другие таблицы
Previous:From: Alexander M. PravkinDate: 2011-09-08 14:40:45
Subject: Косяки с отменой летнего времени

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group