historie a jedinecnost [Re: Platnost zaznamu v ciselniku jeste jednou]

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Červenec 24 16:44:47 CEST 2003


On Thu, Jul 24, 2003 at 02:12:18PM +0200, Honza Pazdziora wrote:
> On Thu, Jul 24, 2003 at 01:23:19PM +0200, Radek Kanovsky wrote:
> > 
> > Myslenkovy pochod byl takovy, ze v triggeru to bude jednodussi, protoze
> > databaze pri INSERTu sama zamyka tabulku. Ale v postgresu je tento
> > lock nedostatecny na to, aby zamezil dalsim insertum mezi triggerem
> > a vlastnim insertem.
> > 
> > Naopak se mne ted po obede jevi jednoduchy trigger jako nevyhovujici,
> > protoze pravdepodobne bude potreba zamknout tabulku BEFORE a odemknout
> > AFTER. Takovy cirkus uz je docela velka komplikace a lepsi bude to resit
> > v aplikaci.

 Ty same moznosti co ma aplikace ma i libovolna funkce uvnitr DB
 serveru...

> Poslete prosim definice tech tabulek a triggeru, ktere se snazite nad
> tim mit. At uz resime ukol jak zamezit vlozeni prekryvajicich se
> intervalu nebo jak nastavit ten konec tak, aby se neprekryvaly, jsem
> presvedcen, ze odpovidajici reseni v PostreSQL najdeme.

 Souhlas:-)

 On by sel problem zjednodusit: mam tabulku 'tab' s textovym sloupcem
 a chci zajistit, aby data v tomto sloupci byla unitatni a to bez
 pouziti 'UNIQUE' v definici sloupce v prostredi s vice transakcemi. 
 Ciste jen za pouziti SQL prikazu (ktere bude nasledne treba mozne 
 zapsat do aplikace nebo triggeru). Predelat reseni toho problemu 
 na ty casove intervaly bude snadne.

 CREATE TABLE tab (data text);

 trans1: INSERT INTO tab VALUES ('aaa');
 trans2: INSERT INTO tab VALUES ('aaa');

 nemelo by dojit k tomu, ze obe transakce uspesne zapisi stejna 
 data do tabulky. IMHO to zase tak jednoduche jak se zdalo nebude :-(

 Mozna by preci jen stalo za to premystet nad tim neslo-li by udelat s
 tech intervalu jeden unique index.

> Rekl bych, ze nejvetsi kus, ktery bude potreba zamknout, jsou ty
> ovlivnene zaznamy. Ty budou zamceny budto implicitne nebo explicitne
> pomoci select for update. Nic dalsiho by treba byt nemelo.

 Ono ovlivnene radky by to slo snadno pomoci FOR UPDATE. Ale nove
 vlozeny radek uz FOR UPDATE nepozna. 

    Karel

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


Další informace o konferenci Test