[ karas @ 17.12.2006. 10:37 ] @
Neka je data tabela Code: CREATE TABLE parent(id serial, message text); i dve koje je nasledjuju Code: CREATE TABLE child1(CHECK(id >= 1 AND id <= 20)) INHERITS(parent); CREATE TABLE child2(CHECK(id >= 21 AND id <= 40)) INHERITS(parent); ALTER TABLE child1 ALTER id DROP DEFAULT; ALTER TABLE child2 ALTER id DROP DEFAULT; Sa ALTER je onemogucceno da kolona id u nasledjenim tabelama child1 i child2 dobija automatsku vrednost preko sekvence. Dalje, Code: CREATE OR REPLACE RULE r1 AS ON INSERT TO parent WHERE id >= 1 AND id <= 20 DO INSTEAD INSERT INTO child1 values(new.id, new.message); CREATE OR REPLACE RULE r2 AS ON INSERT TO parent WHERE id >= 21 AND id <= 40 DO INSTEAD INSERT INTO child2 values(new.id, new.message); Ovim pravilima se za id izmedju 1 i 20 vrednosti ubacuju u child1 a za id izmedju 21 i 40 ubacuju u child2. Dakle, sekvenca parent_id_seq je podrazumevana vrednost samo za id u parent tabeli i pochinje od vrednosti 1. Medjutim, ako se uradi Code: INSERT INTO parent(message) VALUES('hello'); u tabelu parent ubachena je vrednost sa id = 5. Daljim ubacivanjem je id = 11 pa id = 17, itd. tj. sekvenca parent_id_seq se ne uveccava za po 1. Zashto, ako se ona koristi samo u tabeli parent? |