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

Dodeljivanje istih primary key kod upisa u tabelu

[es] :: Firebird/Interbase :: Dodeljivanje istih primary key kod upisa u tabelu

[ Pregleda: 4902 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Enan

Član broj: 256278
Poruke: 22
*.dynamic.isp.telekom.rs.



Profil

icon Dodeljivanje istih primary key kod upisa u tabelu01.09.2013. u 21:30 - pre 128 meseci
Imam glavnu tabelu DNEVNIK u centralnoj bazi, u nju upisujem podatke o prodaji iz maloprodajnih objekata,
podaci se izvezu u xml, zatim se svaki od tih udaljenih objekata zakaci na glavni server i u glavnu bazu uveze
svoj xml, ovom prilikom, kao sto pomenuh punim tabelu DNEVNIK.

Problem se desava kada se vise xml-ova izvrsava sa razlicitih radnih stanica i javlja mi se greska UNIQUE PRIMARY KEY ERROR,
mislim da se ovde desava sudar kod dodeljivanja ID vrednosti, jer firebird pokusava da upise ID koji je vec upisan u tom trenutku,
ovako mi izgleda PRIMARY KEY constraint

Constraint name: PK_DNEVNIK
On field: ID
Index name: PK_DNEVNIK
Index sorting: Ascending

Kako je moguce da firebird pravi ovakvu gresku?
 
Odgovor na temu

Branko
Branko Petrović
Čačak

Član broj: 4123
Poruke: 89
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu02.09.2013. u 09:36 - pre 128 meseci
Firebird ne pravi grešku, baza samo javlja da si ti pokušao da upišeš vrednost koja nije jedinstvena. Preispitaj kako određuješ primarni ključ, ili pusti Bazi da to sama uradi.
 
Odgovor na temu

Enan

Član broj: 256278
Poruke: 22
*.adsl.verat.net.



Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu02.09.2013. u 11:24 - pre 128 meseci
Pustam baza da sama to uradi, ne upisujem ja nikada PK, autoincrement je polje ID na kome je PK.
U pitanju je 7,8, do 10 inserta u istu tabelu, sa razlicitih radnih stanica u isto vreme.
 
Odgovor na temu

Branko
Branko Petrović
Čačak

Član broj: 4123
Poruke: 89
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu02.09.2013. u 12:42 - pre 128 meseci
Generatori "žive" van transakcija, znači da transakcije nisu problem. Okači triger koji koristiš, koja je verzija servera. Ja koristim firebird već godinama na dosta instalacija, i problem sa generatorima do sada nisam imao, bez obzira koliko konkurentnih konecija imao i koliko upisa istovremeno imao.
 
Odgovor na temu

Enan

Član broj: 256278
Poruke: 22
*.adsl.verat.net.



Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu02.09.2013. u 13:41 - pre 128 meseci
Code:

SET TERM ^ ;



CREATE OR ALTER TRIGGER RM_DNEVNIK_BI FOR RM_DNEVNIK
ACTIVE BEFORE INSERT POSITION 0
as
declare variable tmp_ID INTEGER;
declare variable tmp_carinska_stopa_id INTEGER;
begin
  if (new.id is null) then
    new.id = gen_id(gen_RM_DNEVNIK_id,1);
  execute procedure p_pronadji_id_tarife(new.zaglavlje_id,new.artikal_id,1)
     returning_values :tmp_ID;
  new.tarifa_id = :tmp_ID;
  new.tarifa_ulaz_id = :tmp_ID;

  tmp_carinska_stopa_id = 0;
  execute procedure p_pronadji_id_carinske_stope(new.zaglavlje_id,new.artikal_id,1)
    returning_values :tmp_carinska_stopa_id;
  new.carinska_stopa_id = :tmp_carinska_stopa_id;
end
^


SET TERM ; ^



Server Version: WI-V2.5.0.26074 Firebird 2.5
 
Odgovor na temu

Branko
Branko Petrović
Čačak

Član broj: 4123
Poruke: 89
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu03.09.2013. u 09:49 - pre 128 meseci
Da probaš da razdvojiš triger koji upisuje ključ, a ove "preračune" izoluješ u drugi triger "AFTER INSERT"? Znam da ovo zvuči kao mahanje mrtvom kokoškom (vudu), ali će bar izolovati problem.
Mogao bi sebi da postaviš i neka prizemnija pitanja:
- Da li u nekim slučajevima ipak proslediš id, jer u tom slučaju generator ne bi odbrojio ?
- Da li imaš upise u bazu koji već imaju taj id (recimo da su to podaci iz prethodnog perioda) ?
- Da li si nekom prilikom resetovao generator? Uporedi stanje generatora i najvećeg id-a u bazi.
 
Odgovor na temu

Enan

Član broj: 256278
Poruke: 22
*.adsl.verat.net.



Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu03.09.2013. u 13:48 - pre 128 meseci
Resetujem generatore pre bilo kakvog masovnog upisa,
sada sam postavio redosled upisa, tacnije, prvo spremim u jednom direktorijumu podatke,
odredim prioritete xml-ova za upis, a onda pustim da se izvrsava to sve po upisanom redosledu,
nema konkurentskih upisa u isto vreme.

Preuredio sam triger na nacin da imam samo ovaj deo

if (new.id is null) then
new.id = gen_id(gen_RM_DNEVNIK_id,1);

ali opet isto,

provere koje si opisao cu probati da uradim, pa javljam :D
 
Odgovor na temu

Branko
Branko Petrović
Čačak

Član broj: 4123
Poruke: 89
*.223.230.0



+1 Profil

icon Re: Dodeljivanje istih primary key kod upisa u tabelu04.09.2013. u 08:37 - pre 128 meseci
Resetovanje generatora koji simuliraju autoinkrement polje ne dolazi u obzir (osim ,možda, kada se obrišu svi slogovi u tabeli). Postavi vrednost generatora na max(id) za tabelu, i više ga ne diraj. Izvinjavam se ako ti sve ovo znaš, a problem se nalazi negde drugo. Na forumu nikada ne znaš koliko iskustvo stoji iza nekog nika.
 
Odgovor na temu

[es] :: Firebird/Interbase :: Dodeljivanje istih primary key kod upisa u tabelu

[ Pregleda: 4902 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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