jeste k ciselnikum se since/until

Karel Zak zakkr na zf.jcu.cz
Pondělí Červenec 28 08:12:37 CEST 2003


 Zdar,

 mam si reseni toho problemu s ciselniky kde mela byt hlidana
 unikatnost v ramci nejakeho casoveho intervalu. Jak psal puvodni
 tazatel vypada to, ze asi jedinym resenim je pouzit LOCK na kontrolu
 te unikatnosti a nasledny insert. Myslim, ze je to spravne reseni a
 nemusi znamenat uzke hrdlo. On neni lock jako lock :-) Doporucuji
 precist manual a hlavne se podivat na:
    
        LOCK <tab> IN ROW SHARE MODE;

 Nevim proc mne to napadlo az ted, ale toto reseni je napriklad
 pouzivane v triggerech starajicich se o referencni intefritu (FK) kde
 se resi naprosto podobny problem. Tedy je treba prekontrolovat
 tabulku s primarnim klicem a nasledne provest insert/update v tabulce 
 s FK - zaroven je nutne zajistit, aby PK nebyl odstranen dokud vse
 nebude commitnute. Je to tedy dostatecne vyzkousene reseni :-) Takze:

 BEGIN;
 LOCK ciselnik IN ROW SHARE MODE;
 SELECT 1 FROM ciselnik WHERE ..kotrola since/until.. FOR UPDATE;
 INSERT INTO ciselnik ....;
 COMMIT;

 Ten INSERT pochopitelne pokud select nic nevrati.
 
 Je treba pouzit jak FOR UPDATE tak ROW SHARE MODE, vice viz. docs.
 
    Karel
 

-- 
 Karel Zak  <zakkr na zf.jcu.cz>
 http://home.zf.jcu.cz/~zakkr/


Další informace o konferenci Test