Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PostgreSQL, problem sa RULE-om

[es] :: PostgreSQL :: PostgreSQL, problem sa RULE-om

[ Pregleda: 4189 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

range
Beograd

Član broj: 1006
Poruke: 248
*.208.eunet.yu



+1 Profil

icon PostgreSQL, problem sa RULE-om20.08.2004. u 19:47 - pre 209 meseci
Imam dve tabele. Prva je test_main a druga je result. Imam i view koji sumira
rezultate iz testa_main po id vrednosti.
Code:

CREATE TABLE test_main(id varchar(4), value int4);

CREATE TABLE result(id varchar(4), value int4);

CREATE VIEW sumiranje  AS 
 SELECT test_main.id, sum(test_main.value) AS suma
  GROUP BY test_main.id;


E sad ja bi hteo da napravim rule
koje ce mi pri unosu nove vrednosti u test_main ubacivati row u tabelu result
koja ce sadrzati id i sumu koja je bila pri tom ubacivanju.
Ovaj rule meni ubacuje u tabelu result onoliko redova koliko ih ima i u view-u
koji vrsi sumiranje
Code:

CREATE RULE tester AS
    ON INSERT TO test_main
    
DO  INSERT INTO "result" (id, value) 
VALUES (new.id, sumiranje.suma)
;


Jel zna neko gde gresim, ceo dan se patim?
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1042
*.vdial.verat.net



+3 Profil

icon Re: PostgreSQL, problem sa RULE-om20.08.2004. u 23:34 - pre 209 meseci
Nemam iskustva sa Postgre-om ali cini mi se da to sto hoces nije moguce ostvariti na nacin na koji ti mislis da moze. Kako mislis da view razlikuje redove sa starom i novom sumom kada on te redove treba da grupise po polju id (koje ce imati istu vrednost). Mogao bi eventualno ili da dodas novu tabelu old_results koja bi cuvala vrednosti redova pre INSERT-a ili da postojecu tabelu results prosiris sa novom kolonom koja bi oznacavala sumu pre INSERT-a (ovo mozda nije moguce i cini mi se da izuzetno zavisi od nacina na koji view funkcionise)
Owl
 
Odgovor na temu

range
Beograd

Član broj: 1006
Poruke: 248
*.149.eunet.yu



+1 Profil

icon Re: PostgreSQL, problem sa RULE-om21.08.2004. u 00:15 - pre 209 meseci
ne vidim zasto stvar nebi radila. Mislim da je ovo prilicno common operacija. Drugim recima imam tabelu u koju unosim podatke i view koji nesto racuna na osnovu vrednosti u toj tabeli i grupise po nekom ID-u. E ono sto ja hocu je trigger koji ce kad se unese nesto u tu tabelu da pokupi trenutnu sumu u viewu (koja odgovara datom ID-u) i upise u neku drugu tabelu. Znam sta je otprilike problem, ovim RULE-om ja nikako ne mogu da naglasim da mi treba tacno odredjena vrednost iz view-a. Znaci ako ubacim
Code:

insert into test_main values('0003', 100)

insert into test_main values('0004', 100)

dobicu u result tabeli:
0003, 100
0004, 100
0004, 100

a treba mi:

0003, 100
0004, 100

Nesto ovako mi treba samo to ne umem da napisem:
Code:

CREATE RULE tester AS
ON INSERT TO test_main
WHERE NEW.id = sumiranje.id

DO INSERT INTO "result" (id, value)
VALUES (new.id, sumiranje.suma);


Nije valjda da je ovo neresiv problem?
 
Odgovor na temu

range
Beograd

Član broj: 1006
Poruke: 248
*.214.eunet.yu



+1 Profil

icon Re: PostgreSQL, problem sa RULE-om23.08.2004. u 21:06 - pre 209 meseci
So, resih ja problem, skroz tupavo, ali sta da radim kad nema niko nista pametno da kaze :)

Code:

CREATE OR REPLACE VIEW kokos AS 
 SELECT result.id, result.value
  GROUP BY result.id, result.value;


Eto to je to, samo problem je sto u slucaju vracanja na neku postojecu vrednost on je posle ne bi prikazivao, medjutim imam kolonu koja je DATE tipa, pa ce da postaje TIMESTAMP i u nju cu da ubacim trenutni datum pa da grupisem i po njemu.
 
Odgovor na temu

[es] :: PostgreSQL :: PostgreSQL, problem sa RULE-om

[ Pregleda: 4189 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.