Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
Добрый день !!! Такая проблема, есть две таблицы таб1 и таб2. В таблицу таб1 заносятся записи, таб2 должна храниться статистика по таб1. таб1 create table таб1 (id serial, ip inet, size int8, dat date default current_date, name text); таб2 create table таб2 (id serial, name text, size int8); insert into таб1 (ip,size,name) values('10.10.10.1','300','10.10.06','user1'); insert into таб1 (ip,size,name) values('10.10.10.2','300','10.10.06','user2'); insert into таб1 (ip,size,name) values('10.10.10.2','300','10.10.06','user2'); insert into таб1 (ip,size,name) values('10.10.10.1','300','10.10.06','user1'); А в таб2 должна быть сумарная цифра size по user1 или user2. написал функцию на plperl которая получает параметр user1(имя пользователя) и возвращает сумму по user1. Теперь незнаю как мне сделать. Получаеться функцию можно засунут в триггер чтоб по приходу в таб1 цифра помещалась в таб2. Но тут есть два трабла - во первых незнаю как получить значение id записи которая инсертится в таб1 чтоб потом удалить. - а вовторых хочеться чтоб в таб2 занчение пользователя при инсерте в таб1 увеличивалось а не вставлялось. Может есть какие варианты, может можно по другому сделать ? Сильно не судите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 11:17 |
|
||
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
Berx - во первых незнаю как получить значение id записи которая инсертится в таб1 чтоб потом удалить. объявите поле id не serial, а просто int4 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. там где нужно узнать id, явно получайте его через nextval и подставляте вручную Berx - а вовторых хочеться чтоб в таб2 значение пользователя при инсерте в таб1 увеличивалось а не вставлялось так и делайте update а не insert BerxМожет есть какие варианты, может можно по другому сделать ? можно написать одну процедуру, которая будет все считать и сохранять в БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 11:56 |
|
||
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
А как должна выглядеть эта процедура примерно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 12:04 |
|
||
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
Такой дурацкий вопрос а что происходит когда maxvalue доходит до своего предела ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 12:14 |
|
||
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
BerxТакой дурацкий вопрос а что происходит когда maxvalue доходит до своего предела ??? забей :) уже не раз обсуждалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 13:35 |
|
||
|
Триггеры и функции
|
|||
|---|---|---|---|
|
#18+
Короче по мозговав немного пару часов допер ка к сделать. Может кому понадобиться. CREATE SEQUENCE t1_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1; create table t1 ( id int8 default nextval('t1_id_seq'), username text, bytes int8); create table t2 (id serial,name text, bytes int8); Тут береться значение и сохраняеться с увеличением значения и удаляються записи из основной таблицы чтоб не занимала место :-) create or replace function calc_size() returns "trigger" as $$ $rv = spi_exec_query("select nextval('traffic_id_seq')"); $curid = $rv->{rows}[0]->{nextval}; $sel = spi_exec_query("select oob_prefix,raw_pktlen from traffic where id=$curid"); $size = $sel->{rows}[0]->{raw_pktlen}; $name = $sel->{rows}[0]->{oob_prefix}; $tup = spi_exec_query("select bytes from user_traffic where name='$name'"); $oldsize = $tup->{rows}[0]->{bytes}; $newsize = $size + $oldsize; $upd = spi_exec_query("update user_traffic set bytes = $newsize where name='$name'"); $del = spi_exec_query("delete from traffic where id=$curid"); return undef; $$ language plperl; Создаем триггре create trigger traffic_calc after insert on traffic for each row execute procedure calc_size(); Только получаеться что значения сохраняли и накапливались нужно создать имена в сохраняемой таблице. Все. Если что не так или можно усовершенствовать, оптимозировать пишите буду рад исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2006, 23:45 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34043890&tid=2006044]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 383ms |

| 0 / 0 |
