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