zobrazeni a aktualizace tabulky PostgreSQL

Martin Sittek martin.sittek na infoprojekt.cz
Pondělí Červen 10 14:19:15 CEST 2002


On Mon, Jun 10, 2002 at 12:06:01PM +0200, Karel Zak wrote:
> > Vím o LIMIT a OFFSET, ovšem není mi jasné jak tyto hodoty 
> > "ukočírovat" když okno aktuálně zobrazuje někde prostředek tabulky
> > a já nemán žádný pevný bod od kterého bych se odpíchl (teď mě napadá,
> > že tenhle problém už také někdo řešil ovšem ten chtěl myslím hýbat
> > úplně něčím jiným :-).
> 
>  Jak to, ze nemate pevny bod? Co jsou ty LIMIT a OFFSET posledne
>  polozeneho dotazu? Neco takoveho mam u jedne web aplikace a moc v tom
>  nenachazim nejaky problem.
> 
>  Proste az v tom listu v GTK dojede user na posledni dostupnou radku
>  tak provedete update toho listu z dotazu s LIMIT a OFFSET kde offset
>  bude vetsi prave o hodnotu limitu naposledy polozeneho dotazu. Pro
>  vas programek by asi nemel byt problem si nekde tuto hodnotu
>  uchovavat.

No to mě také napadlo ale co se stane, když mi tam nějaká jiná 
stanice mezitím vloží X dalších vět a Y jiých vymaže. Když bude 
X > pocet_radek_v_okne, tak mi také aktuální věta může "usřelit"
úplně mimo okno - a z toho bude uživatel asi trošku zmaten.

> 
>  A nebo poradne reseni tohoto zadani zni pouzivat cursor, tedy
>  pro dany list si deklarovat select 
> 
>     DECLARE cursorname SELECT id, data FROM neco;
> 
>  A pak postupne zadat o data:
> 
>     FETCH FORWARD 10 FROM cursorname;
> 
>  Vrati deset radek z toho selectu, muzete pouzivat i BACKWARD. Vice
>  viz docs.

Také jsem se tím už zabýval ale když jsem četl manuál PostgreSQL tak
tam je v kapitolce DECLARE cursor mimi jiné:

INSENSITIVE

  SQL92 keyword indicating that data retrieved from the cursor
  should be unaffected by updates from other processes or cursors.
  Since cursor operations occur within transactions in Postgres this
  is always the case. This keyword has no effect. 


Takže jestli jsem to pochopil správně, tak když jedou nadeklaruji 
cursor tak mi nebude brát v potaz přidávaní a mazání vět z jiné
stanice, takže by mi ezbylo než vždy zrušit cursor a pak jej znova
vytvořit ale to bych se zase dostal na stejný problém jako u 
LIMIT a OFFSET (viz. výše).


Jak jsem už dříve psal, nemám s programováním s SQL servery moc
zkušeostí, možná že jsou mé předpoklady nesprávné, nebo na to
existují nějaké grify?


Martin Sittek


>  
>     Karel
> 
> -- 
>  Karel Zak  <zakkr na zf.jcu.cz>
>  http://home.zf.jcu.cz/~zakkr/
>  
>  C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz


Další informace o konferenci Databases