PostgreSQL és az általános iskolai matek

Na ezt így hogy?

C:\Program Files\PostgreSQL\8.3\bin>psql -d foobar
Password for user [...]:
Welcome to psql 8.3.6 (server 8.3.3), the PostgreSQL interactive terminal.

[...]

foobar=# begin;
BEGIN
foobar=# select objid, sorrend from valami_tablafele where katid = 147 order by sorrend;
 objid | sorrend
-------+---------
  1813 |       1
  5135 |       2
  1811 |       3
  1388 |       4
  1844 |       5
  1253 |       6
  5126 |       7
  1835 |       8
  5152 |       9
  1203 |      10
  1845 |      11
(11 rows)

foobar=# select objid, sorrend from valami_tablafele where katid = 147 and sorrend > 5 order by sorrend;
 objid | sorrend
-------+---------
  1253 |       6
  5126 |       7
  1835 |       8
  5152 |       9
  1203 |      10
  1845 |      11
(6 rows)

foobar=# update valami_tablafele set sorrend = sorrend - 1 where katid = 147 and sorrend > 5 returning objid, sorrend;
 objid | sorrend
-------+---------
  1203 |       9
  1253 |       5
  5126 |       6
  1835 |       7
  5152 |       8
(5 rows)

UPDATE 5

foobar=# select objid, sorrend from valami_tablafele where katid = 147 order by sorrend;
 objid | sorrend
-------+---------
  1813 |       1
  5135 |       2
  1811 |       3
  1388 |       4
  1844 |       5
  1253 |       5
  5126 |       6
  1835 |       7
  5152 |       8
  1203 |       9
  1845 |      11
(11 rows)

Oké, hogy nem mai Postgres, de a legutolsó 8.3-n is ezt csinálja és ekkora hibát nem követhetnek már el...

Hozzászólások

Újabb vicc: ha hozzáadunk egy egy 12-st is a lista végére, akkor azt csökkenti, de a 11-st nem.

----------------
Lvl86 Troll

most nem azer mondom de szerintem ez az update nem koser

" update valami_tablafele set sorrend = sorrend - 1 where katid = 147 and sorrend > 5 returning objid, sorrend; "

Az update olyan mezoket update el amelyekre az update ben szereplő where vonatkozik, ez ha mukodik is akkor is randa sztem vagy az adatbazis struktura vagy a programterv ha ilyen update kell.

De ha mindenkeppen ilyen ocsmanysag kell akkor en ugy probalnam meg hogy 1 temp tablaba kigyujtenem a where feltetelnek megfelelo adatokat az update elott, aztan abbol updatelnem a tablat... proba cseresznye

Ez egy teljesen szabalyos lekerdezes, ugyanis a where _mindig_ elobb kell lefusson, mint maga az update. Es nem hibas a struktura vagy programterv, barmikor szukseg lehet ilyen modositasra (gondoljunk egy termeklista savos aremelesere).
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.