3 Utolsó módosítás dátuma: 2002 Okt 20.
4 Fordítás aktualizálása: 2003 január
6 A GyIK karbantartója: Bruce Momjian (pgman@candle.pha.pa.us)
7 Fordító: Hornyák László (hornyakl.NOSPAM@inf.elte.hu)
9 A legfrissebb verzió itt érhetõ el (angol):
10 http://www.PostgreSQL.org/docs/faq-english.html.
12 Legfrissebb magyar nyelvû verzió:
13 http://www.rootshell.be/~hornyakl/downloads/postgres_faq/
15 Platform specifikus kérdések:
16 http://www.PostgreSQL.org/users-lounge/docs/faq.html.
17 _________________________________________________________________
21 1.1) Mi a PostgreSQL? Hogy kell kimondani?
22 1.2) Mik a PostgreSQL felhasználási feltételei?
23 1.3) Milyen UNIX operációs rendszereken fut PostgreSQL?
24 1.4) Milyen nem UNIX operációs rendszerek elérhetõek?
25 1.5) Hogyan tudok PostgreSQL-t szerezni?
26 1.6) Hogyan kapok terméktámogatást?
27 1.7) Melyik a legfrissebb kiadás?
28 1.8) Milyen dokumentáció áll rendelkezésre?
29 1.9) Hogyan találok információt hibákról vagy hiányzó funkcionalításról?
30 1.10) Hogy tanuljam meg az SQL nyelvet?
31 1.11) A PostgreSQL 2000. év kompatibilis?
32 1.12) Hogyan lehet csatlakozni a fejlesztõ csapathoz?
33 1.13) Hogyan küldjek hibajelentést?
34 1.14) Milyen a PostgreSQL más DBMS-ekkel összehasonlítva?
35 1.15) Hogyan tudom üzletileg segiteni a PostgreSQL-t?
37 Felhasználói kliens kérdések
39 2.1) Van ODBC meghajtó PostgreSQL-hez?
40 2.2) Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez?
41 2.3) Van a PostgreSQL-hez grafikus felhasználói felület ? Riport
42 generátor? Beágyazott lekérdezõ nyelv felület?
43 2.4) Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert?
45 Adminisztrációs kérdések
47 3.1) Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre
49 3.2) AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core
51 3.3) Amikor megpróbálom inditani a postmaster-t, "IpcMemoryCreate" hibákat
53 3.4) Amikor megpróbálom inditani a postmaster-t, "IpcSemaphoreCreate" hibákat
55 3.5) Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket?
56 3.6) Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat?
57 3.7) Milyen hibakeresõ lehetõségek érhetõek el?
58 3.8) Miért kapok "Sorry, too many clients" hibát csatlakozásnál?
59 3.9) Mi van pgsql_tmp könyvtárban?
60 3.10) Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál?
64 4.1) Mi a különbség a bináris és a normál kurzorok között?
65 4.2) Hogyan tudom select-elni a lekérdezés elsõ pár sorát?
66 4.3) Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben?
67 4.4) Hogyan tudok eltávolítani egy oszlopot egy táblából?
68 4.5) Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak?
69 4.6) Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány
71 4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy felhasználók
73 4.8) A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért?
74 4.9) Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizáló a
76 4.10) Mi az R-tree index?
77 4.11) Mi a Genetic Query Optimizer?
78 4.12) Hogyan tudok regexp keresést és case-insensitive regexp keresést
79 használni? Hogyan tudok indexet használni case-insensitive kereséshez?
80 4.13) Hogyan tudom észlelni egy lekérdezésban, ha egy mezõ NULL?
81 4.14) Mi a különbség a különbözõ karaktertípusok között?
82 4.15.1) Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt?
83 4.15.2) Hogyan kaphatom meg egy SERIAL beszúrás értékét?
84 4.15.3) A currval() és a nextval() nem teremt holtpont veszélyes helyzetet
85 a felhasználók között?
86 4.15.4) Miért nem használódnak fel újra a sequence számok tranzakció abort
88 Miért vannak problémák a serial oszlopok számozásával?
89 4.16) Mi a OID? Mi a TID?
90 4.17) Mi a PostgreSQL-ben használt kifejezések jelentése?
91 4.18) Miért kapom ezt a hibát: "ERROR: Memory exhausted in
93 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziót futtatok?
94 4.20) Miért kapok "invalid large obj descriptor" hibát nagy objektumok
96 4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a
98 4.22) Miért olyan lassúak az al-lekérdezéseim IN-nel?
99 4.23) Hogyan tudok outer join-t végrehajtani?
100 4.24) Hogyan tudok több adatbázison végrehajtani lekérdezést?
101 4.25) Hogy tudok több soros vagy oszlopos eredményt visszaadni egy
103 4.26) Miért nem tudom megbizhatóan létrehozni és törölni az átmeneti
104 táblákat a PL/pgSQL funkciókban?
105 4.27) Milyen replikációs lehetõségek vannak?
106 4.28) Milyen kódolási lehetõségek vannak?
108 A PostgreSQL kiterjesztése
110 5.1) Írtam egy felhasználói funkciót. Miért core dumpol az adatbázis amikor
112 5.2) Hogyan lehet új adattípusokat és funkciókat hozzáadni a PostgreSQL
114 5.3) Hogyan lehet olyan C funkciót írni, ami Tuple-t ad vissza?
115 (több soros több oszlopos eredmények)
116 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris
118 _________________________________________________________________
124 1.1) Mi a PostgreSQL? Hogy kell kimondani?
125 Így ejstd ki: Post-Gres-Q-L.
126 (Vagy talán inkább töltsd le a kis mp3-at a PostgreSQL homepage-rõl)
128 A PostgreSQL a POSTGRES adatbázis management rendszer egy kiegészítése,
129 ami egy következõ generációs DBMS kutatási prototípus. Megtartja a
130 POSTGRES adatmodellét és gazdag adattípus választékát, de a PostQuel
131 lekérdezõ nyelvet az SQL egy kiterjesztett verziójával helyettesíti.
132 A PostgreSQL szabad és a teljes forráskód hozzáférhetõ.
134 A PostgreSQL fejlesztését egy csapat végzi, amelynek minden tagja
135 megtalálható a PostgreSQL fejlesztõi levelezési listán. A jelenlegi
136 koordinátor Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat
137 felelõs minden fejlesztésért.
139 A PostgreSQL 1.01 alkotói Andrew Yu és Jolly Chen voltak. Sokan
140 járultak hozzá portolással, teszteléssel, hibakereséssel és
141 fejlesztéssel. Az eredeti Postgres kód, amibõl a PostgreSQL származik
142 Michael Stonebraker professzor irányítása alatt fejlesztettek az
143 egyetem programozói, tanulói és végzett tanulói.
145 A szoftver ereeti neve Postgres volt. Amikor SQL funkcionalítással
146 egészítették ki 1995-ben, a nevét Postgres95-re változtatták. 1996
147 végén kapta mai nevét.
149 1.2) Mik a PostgreSQL felhasználási feltételei?
151 Az eredeti angol copyright szöveg:
153 PostgreSQL is subject to the following COPYRIGHT:
155 PostgreSQL Data Base Management System
157 Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
158 Portions Copyright (c) 1994-6 Regents of the University of California
160 Permission to use, copy, modify, and distribute this software and its
161 documentation for any purpose, without fee, and without a written
162 agreement is hereby granted, provided that the above copyright notice
163 and this paragraph and the following two paragraphs appear in all
166 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
167 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
168 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
169 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
170 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
172 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
173 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
174 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
175 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
176 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
177 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
179 The above is the BSD license, the classic open-source license. It has
180 no restrictions on how the source code may be used. We like it and
181 have no intention of changing it.
184 Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van használni a
185 szoftvert mindenféle ellenszolgáltatás (pénz, stb) nélkül, a forrás
186 kódot módosíthatod, és továbbadhatod, DE semmilyen, a szoftver használatából
187 következõ károsodásért nem vállal garanciát a fejlesztõ.
189 A fenti a BSD licensz, egy klasszikus nyilt-forráskód licensz. Nem
190 tartalmaz megszorításokat arra, hogy a forráskódot hogyan használod fel.
191 Kedveljük ezt a licensz formát és nem áll szándékunkban megváltoztatni.
193 1.3) Milyen UNIX operációs rendszereken fut PostgreSQL?
195 Általában minden UNIX-kompatibilis operációs rendszer képes arra hogy
196 futtassa a PostgreSQL-t. Azokat a platformokat, amiken tesztelték a
197 kiadást megtalálhatod a installációs utasítások között.
199 1.4) Milyen nem UNIX operációs rendszerek elérhetõek?
203 A libpq C függvénykönyvtárat, a psql-t és más felületeket le lehet úgy
204 fordítani, hogy fussanak MS Windows operációs rendszereken. Ebben az esetben
205 a kliens MS Windows-on fut és TCP/IP segítségével kommunikál a Unixon
206 futó szerverrel. A "win32.mak" állomány a kiadás része, ennek segítségével
207 lehet Win32 platformokra lefordítani a libpq-t és a psql-t. A PostgreSQL
208 ODBC kliensekkel is képes kommunikálni.
212 Az adatbázis szerver Cygwin segítségével fut Windows NT és Win2k
213 rendszereken. További információ található a pgsql/doc/FAQ_MSWIN
214 állományban és a MS Windows FAQ-ban a következõ helyen:
215 http://www.PostgreSQL.org/docs/faq-mswin.html.
217 Natív MS Windows NT/2000/XP portok jelenleg fejlesztés alatt állnak.
219 1.5) Hogyan tudok PostgreSQL-t szerezni?
221 Az elsõdleges anonim ftp oldal:
222 ftp://ftp.PostgreSQL.org/pub.
223 A tükör oldalak listája megtalálható a fõ weboldalunkon.
225 1.6) Hogyan kapok terméktámogatást?
227 Az elsõdleges lista a pgsql-general@postgresql.org. Ez használható
228 a PostgreSQL-lel kapcsolatos párbeszédekre. Ha fel szeretnél íratkozni,
229 küldj egy levelet a következõ tartalommal (nem tárggyal) a
230 pgsql-general-request@postgresql.org címre:
234 Van egy hibákkal kapcsolatos levelezési lista is:
235 pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:
239 A fejleszt?i levelezési lista:
240 pgsql-hackers-request@PostgreSQL.org a következõ tertalommal:
244 Egyéb levelezési listák találhatóak a weboldalunkon:
246 http://www.PostgreSQL.org
248 Van egy IRC csatorna is #PostgreSQL néven ahol felteheted kérédseid.
249 A következõ unix paranccsal csatlakozhatsz:
250 irc -c '#PostgreSQL' "$USER" irc.phoenix.net.
252 A kereskedelmi terméktámogatást nyújtó cégek listája elérhetö itt:
253 http://www.PostgreSQL.org/users-lounge/commercial-support.html
255 1.7) Melyik a legfrissebb kiadás?
257 A legfrissebb PostgreSQL kiadás a 7.3.
259 A tervek szerint minden negyedik hónapban van új kiadás.
261 1.8) Milyen dokumentáció áll rendelkezésre?
263 Számos kézikönyv, man oldalak és kis teszt példák találhatóak a kiadásban
264 a doc/ könyvtár alatt. Az interneten is olvashatod a dokumentációt a
266 http://www.PostgreSQL.org/users-lounge/docs/.
268 Két PostgreSQL könyv érhetõ el az interneten a
269 http://www.PostgreSQL.org/docs/awbook.html és a
270 http://www.commandprompt.com/ppbook/ címeken.
271 A megvásárolható könyvek listája itt található:
272 http://www.ca.PostgreSQL.org/books/.
273 A PostgreSQL-lel kapcsolatos technikai jellegû cikkek gyûjteménye:
274 http://techdocs.PostgreSQL.org/.
276 A psql parancs rendelkezik néhány \d utasítással, amellyekkel listázhatóak
277 az operátorok, a funkciók, stb.
279 A website is tartalmaz további dokumentációkat.
281 1.9) Hogyan találok információt hibákról vagy hiányzó funkcionalításról?
283 A PostgreSQLaz SQL-92 szabvány egy kiegészítése. Nézd meg a TODO listákat
284 ha érdekelnek az ismert hibák.
286 1.10) Hogy tanuljam meg az SQL nyelvet?
288 A PostgreSQL könyv a http://www.PostgreSQL.org/docs/awbook.html
289 címen tartalmaz SQL alapokat. Elérhetõ egy másik SQL könyv is a
290 http://www.commandprompt.com/ppbook címen. Egy szép oktató anyag
291 található a http://www.intermedia.net/support/sql/sqltut.shtm,
292 a http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
293 és a http://sqlcourse.com oldalakon.
295 Egy másik lehetõség a "Tanítsd magad 21 nap alatt SQL-re, második
296 kiadás" a http://members.tripod.com/er4ebus/sql/index.htm.
298 Sok felhasználónak tetszett a gyakorlati SQL könyv ("The Practical
301 1.11) A PostgreSQL 2000. év kompatibilis?
303 Igen, könnyedén kezeli a 2000 utáni és idõszámításunk elött 2000 elötti
306 1.12) Hogyan lehet csatlakozni a fejlesztõ csapathoz?
308 Elösször is töltsd le a forráskódot, és olvasd el a PostgreSQL
309 fejlesztõi dokumnetációt a web oldalunkon vagy a kiadásban. Ezután
310 íratkozz fel a pgsql-hackers és a pgsql-patches levelezési listákra.
311 Végül pedig küldj be magas szinvonalú patch-eket a pgsql-patches listára.
313 Van egy pár ember, akiknek commit privilégiumuk a PostgreSQL CVS fán.
314 Õk olyan sok magas szinvonalú patch-et küldtek be, hogy az addigi
315 csapat már nem tudta követni, és nem volt kétségünk arról, hogy a
316 patch-ek amiket õk küldenek jó minõségû.
318 1.13) Hogyan küldjek hibajelentést?
320 Látogass el a BugTool oldalra:
321 http://www.PostgreSQL.org/bugs/bugs.php
322 Itt megtalálod követendõ utasításokat.
324 Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb verzió vagy folt.
325 ftp://ftp.PostgreSQL.org/pub
327 1.14) Milyen a PostgreSQL más DBMS-ekkel összehasonlítva?
329 Számos nézõpontból lehet vizsgálni a szoftvert: képességek, teljesítmény
330 megbízhatóság, támogatottság és ár.
333 A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek képességeivel:
334 tranzakciók, al-lekérdezések, triggerek, nézetek, külsõ kulcsok,
335 integrítás és kifinoult zármechanizmusok. Van néhány képessége,
336 ami a kereskedelmi adatbázisokból hiányzik, mint például a
337 felhasználó által definiált típusok, öröklõdés, szabályok és
338 verzió kontroll a zárolási viták redukálásáért.
341 A PostgreSQL teljesítménye hasonlít a kereskedelmi és más nyílt
342 adatbázis szerverekéhez. Lehet bizonyos esetekben lassabb, másokban
343 gyorsabb. A MySQL nevû tanuló RDBMS például gyorsabban hajt végre
344 insert/update mûveleteket, mivel a tranzakciókat elsumákolja.
345 Persze a MySQL nem rendelkezik a képességek részben felsoroltak
346 nagy részével. Mi a megbízhatóságra és a képességekre építünk, bár
347 a teljesítmény is nõ minden kiadással. Van egy érdekes oldal a
348 MySQL és a PostgreSQL összehasonlításával a
349 http://openacs.org/philosophy/why-not-mysql.html címen.
352 Tudjuk hogy ha egy DBMS nem megbízható, akkor teljesen haszontalan.
353 Igyekszünk jól tesztelt, stabil kódot kiadni, amiben a lehetõ
354 legkevesebb hiba van. Minden kiadás elött eltellik legalább 1
355 hónap béta teszt, és a kiadási történet is azt mutatja, hogy
356 stabil kódot adunk ki, ami készen áll a produktív felhasználásra.
357 Úgy gondoljuk, felülmúlunk más adatbázis szoftvereket ezen a téren.
360 A levelezési listáink kapcsolatot teremtenek a fejlesztõk
361 és felhasználók csoportjával , akik segítenek a problémák
362 megoldásában. Bár nem tudjuk garantálni hogy ki tudjuk
363 javítani a hibát, más, kereskedelmi adatbázis cégek sem tudják.
364 A fejlesztõ csoport közvetlen elérési lehetõsége, a közösség,
365 a dokumentáció és a forráskód gyakran támogatást biztosít,
366 mint más adatbázisoknál. Van kereskedelmi, alkalmi támogatás
367 azoknak, akiknek szüksége van rá (lásd: 1.6).
370 A PostgreSQL szabad bármilyen felhasználásra, akár kereskedelmire
371 is. A termékhez hozzáadhatod a saját forráskódjaidat korlátozás
374 1.15) Hogyan tudom üzletileg segiteni a PostgreSQL-t?
376 A PostgreSQL elsõ osztályú infrastruktúrával rendelkezik, amit 1996-ban
377 indítottunk el. Mindent Marc Fourniernek köszönhetünk, aki létrehozta
378 és karbantartja a rendszert.
380 A minõségi infrastruktúra nagyon fontos egy nyilt forrású szoftver
381 esetében. Megvéd az olyan fennakadásoktól, amelyek komoly késéseket
382 okoznak a fejlesztésekben.
384 Természetesen ez az infrastruktúra nem olcsó. Számos havi és állandó
385 kiadásunk van. Ha a cégednek van pénze, amivel támogatná erõfeszítéseinket,
386 kérlek látogass el a http://store.pgsql.com/shopping/ oldalra.
388 Bár a weboldal "PostgreSQL, Inc"-ként említi, a hozzájárulások kizárólag
389 a PostgreSQL fejlesztésre értendóek, és nem egy meghatározott cégnek. Ha
390 jobban tetszik, küldhetsz csekket is a kapcsolati címek bármelyikére.
392 _________________________________________________________________
394 Felhasználói kliens kérdések
396 2.1) Van ODBC meghajtó PostgreSQL-hez?
398 Két ODBC meghajtó érhetõ el: PsqlODBC és a OpenLink ODBC.
400 A PsqlODBC a PostgreSQL kiadás része. További információ található a
401 ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.
403 Az OpenLink ODBC-t a http://www.openlinksw.com címrõl töltheted le.
404 Ez az õ szabványos ODBC kliens szoftverükkel mûködik, így minden
405 általuk támogatott platformon (Win, Mac, Unix, VMS) elérhetõ lesz
406 a PostgreSQL szerver.
408 Talán olyan vevõknek fogják eladni, akik kereskedelmi minõségû terméket
409 szeretnének kapni, de a freeware verzió mindig elérhetõ lesz. Kérdéseidet
410 a termékkel kapcsolatban a postgres95@openlink.co.uk címen teheted fel.
412 Olvasd el az ODBC fejezetet is a programozók kézikönyvében!
414 2.2) Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez?
416 Egy szép bemutató olvasható az adatbázissal támogatott web oldalanról
417 a http://www.webreview.com weboldalon.
419 A web integrációhoz a PHP egy kiválló szoftver. Letölthetõ a
420 http://www.php.net címrõl.
422 Komplexebb esetekre sokan használják a Perl felületet és a CGI.pm vagy a
425 2.3) Van a PostgreSQL-hez grafikus felhasználói felület? Riport
426 generátor? Beágyazott lekérdezõ nyelv felület?
428 Van egy szép PgAccess nevû grafikus felületünk, ami riport generátorként
429 is használható. A weboldalát megtalálod a http://www.pgaccess.org/ címen.
431 A disztribúció tartalmazza az ecpg programot is, ami egy beágyazott SQL
432 lekérdezési felület C nyelvhez.
434 2.4) Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert?
441 * Perl (DBD::Pg and perl5)
445 * C Easy API (libpgeasy)
446 * PHP ('pg_' functions, Pear::DB)
448 További programozási felületek érhetõek el a
449 http://www.PostgreSQL.org/interfaces.html és a
450 http://gborg.PostgreSQL.org oldalakon.
452 _________________________________________________________________
454 Adminisztrációs kérdések
456 3.1) Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre
459 A configure script --prefix paraméterének használatával.
461 3.2) AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core
465 Számos probléma lehet, de legelösször ellenõrizd le, hogy a kerneled
466 System V kiegészítésekkel rendelkezik-e. A PostgreSQL használja a
467 kernel osztott memória és szemafor API-ját.
469 3.3) Amikor megpróbálom inditani a postmaster-t, "IpcMemoryCreate" hibákat
472 Vagy nincs megfelelõen konfigurálva a kerneled osztott memória támogatása
473 vagy meg kell nagyobbítanod a maximális osztott memória méretet.
474 A pontos méret szükséglet függ az architektúrádtól és attól hogy hány
475 buffert és processzt konfigurálsz a postmasternek. Legalább 1 MB
476 területre szükséged van. A PostgreSQL Adminisztráció kézikönyvben
477 olvashatsz részletesebb információkat az osztott memóriáról és a
480 3.4) Amikor megpróbálom inditani a postmaster-t, "IpcSemaphoreCreate"
481 hibákat kapok. Miért?
483 Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No space
484 left on device)", akkor a kerneled konfigurációja nem tesz lehetõvé
485 elegendõ szemafort. A PostgreSQL szerver processzenként 1 szemafort
486 igényel. Egy átmeneti megoldás lehet az hogy a postmastert kevesebb
487 maximális processz számmal inditod el. Használd a -D paramétert.
488 Egy sokkal megfelelõbb megoldás az ha növeled a kerneled SEMMNS
489 és SEMMNI paramétereit.
491 A hibás szemaforok is adatázis lerobbanásához is vezethet nagy terhelés
493 Ha a hibaüzenet valami más, lehet hogy nincs szemaforok támogatás
494 forditva a kerneledbe. Olvasd el a PostgreSQL adminisztrátorok
495 kézikönyvében az osztott memóriáról és a szemaforokról szóló fejezetet.
497 3.5) Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket?
499 Alapértelmezésben a PostgreSQL a helyi kapcsolatokat Unix socketekkel
500 valósítja meg. Más gépek nem lesznek képesek csatlakozni, ha nem
501 engedélyezed azt -i opcióval a postmasternek, és nem állítod be host a
502 alapú azonosítást a pg_hba.conf állományban. Ezzel válnak lehetõvé a TCP/IP
505 3.6) Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat?
507 Az indexelés feltétlenül gyorsítja a lekérdezéseket. Az EXPLAIN
508 parancs lehetõvé teszi hogy lásd, hogy a PostgreSQL miként interpretálja
509 a lekérdezést és melyik indexet használja.
511 Ha sok INSERT mûveletet hajtassz végre, csináld nagy kötegekben a COPY
512 paranccsal. Ez sokkal gyorsabb mint az egyedi INSERT parancsok. Másodszor:
513 Azok a mûveletek, amelyek nincsenek tranzakció blokkon belül, azok saját
514 tranzakciót indítanak. Sok mûveletet érdemes egy tranzakción belül
515 végrehajtani. Ez csökkenti a tranzakció kezelés többletidejét. Az indexeket
516 javasolt a nagy adatváltozások elött eltávolítani, majd újra létrehizni.
518 Számos teljesítmény javító lehetõség van. Kikapcsolhatod az fsync()
519 mûveletet a postmaster -o -F opciókval való indításakor. Így nem fog
520 az amugy lassú fsync() függvény meghívódni minden tranzakció végén.
522 Használhatod a postmaster -B opcióját is az osztott memória szegmens
523 méretének növeléséhez. Ha az értéket túl magasra állítod, lehet hogy
524 a postmaster nem indul el, mert túllépted az operációs rendszer által
525 megengedett méretet. Minden buffer 8K méretû és alapértelmezésban 64
528 A -S opcióval növelheted a szerver átmeneti rendezésekre fenntartott
529 memória területét. Az értéket kilobyteban add meg. Az alapértelmezett
532 Használhatod a CLUSTER utasítást is, hogy a táblákat egy indexnek
533 megfelelõen csoportosítsd. Olvasd el a CLUSTER kézikönyv oldalt további
537 3.7) Milyen hibakeresõ lehetõségek érhetõek el?
539 A PostgreSQL számos lehetöséggel rendelkezik ami értékes lehet a hiba-
542 Elösször is, futtathatod a configure scriptet --enable-cassert
543 opcióval, sok assert() funkcióhivás ellenörzi a program futását és
544 megállitja ha valami vératlan hiba történik.
546 Mind a postmaster és a postgres számos hibakeresö lehetüséggel rendelkezik.
547 Mindig amikor elinditod a postmastert, gyözödj meg róla, hogy a kimenetet
548 log állományba küldöd. Igy:
550 ./bin/postmaster >server.log 2>&1 &
552 Ez egy server.log állományt hoz létre a felsö PostgreSQL könyvtárban.
553 Ez az állomány tartlamaz majd számos hasznos információt a szerverrel
554 kapcsolatos problémákról és hibákról. A postmaster -d opciójával lehet
555 részletesebb hibakeresö információt kapni. A -d opcióhoz meg kell
556 határozni egy hiba szintet. Vigyázz, a magas hibakeresö szint nagy
557 log állományt okozhat.
559 Ha a postmaster nem fut, akkor futtathatod a postgres szervert
560 parancssorból is, és az SQL kifejezést közvetlenül ennek adhatod át.
561 Ez csak hibakeresés esetében javasolt. Az új sor a kifejezés végét jelenti,
562 nem a pontosvesszö. Ha hibakeresö opciókkal forditottad a szervert,
563 használhatsz egy debuggert is hogy lásd hogy mi történik. Mivel igy a
564 szervert nem a postmaster inditotta, nem többfelhasználós környezetként
565 fut, igy a zárolási és a szerverek közötti kommunikációs hiba jelenségek
568 Ha már fut a postmaster, indits egy psql-t, és nézd meg a szerver processz
569 PID-jét! Egy debuggert használhatsz a processzhez csatlakozáshoz.
570 Beállithatsz töréspontokat és elindithatsz lekérdezéseket. Ha a postgres
571 inditásban keresel hibát, a PGOPTIONS környezeti változót állitsd be "-W n"
572 értékre. Ez n másodperc várakozást idéz elö, igy tudsz csatlakozni a
573 processzhez, el tdsz hejezni töréspontokat, majd folytathatod a indítást.
575 A postgres program -s, -A és -t opciói is nagyon hasznosak lehetnek
576 hibakeresésnél és teljesítmény mérésnél.
578 Profiling lehtöséggel is fordithatod a szervert, hogy lásd melyik
579 funkciók foglalják el a futási idõt. A szerver profile állományai
580 a pgsql/data/base/dbname könzvtárba kerülnek, a kliens profile
581 állományok az aktuális könyvtárba. Linuxon ehhez szükséges a
582 -DLINUX_PROFILE fordítási direktiva.
584 3.8) Miért kapok "Sorry, too many clients" (Túl sok kliens)
585 hibát csatlakozásnál?
587 Növelned kell a postmaster egyidejûleg futtatott szerver processz szám
590 Az alapértelmezett korlát 32 processz. Ezt növelhetjed úgy, hogy
591 újrainditod a postmastert és -N opcióval meghatárotod az új értéket,
592 vagy módositod a postgresql.conf-ot.
594 Ne felejtsd el, hogy ha növeled a szerver processzek maximális számát,
595 akkor bufferek számát is növelned kell, legalább a processzek számának
596 kétszeresére. Nagy processz számokesetében valószinüleg a Unix
597 konfigurációs paramétereken is növelni kell. Ellenörizd a SHMMAX
598 (az osztott memória szegmensek maximális mérete), a SEMMNS és a SEMMNI
599 (a szemaforok maximális száma), az NPROC (a processzek maximális száma),
600 a MAXUPRC (felhasználónkénti maximális processz szám) és a NFILE és NINODE
601 (a megnzitott állománzok maximális száma) paramétereket. A PostgreSQL
602 azért korlátozza külön a processz számot, hogy a rendszeredet ne terhelhesse
605 A PostgreSQL 6.5 verzióban a maximális szerver processz szám 64 volt és
606 a módositáshoz bele kellett irni a include/storage/sinvaladt.h állományba
607 és újra kellett forditani a servert.
609 3.9) Mi van pgsql_tmp könyvtárban?
611 Ez a könyvtár a lekérdezés végrehajtó által létrehezott átmeneti
612 állományokat tartalmazza. Például ha egy rendezést kell végrehajtani
613 egy ORDER BY kifejezés miatt és a m?velet több memóriát vesz
614 igénybe, mint amennyit a -S paraméter megenged, akkor az átmeneti
615 könyvtárban hoz létre egy állományt a fennmaradó adat tárolására.
617 Az átmeneti állományok többnyire törl?dnek, de meg is maradhat ha
618 például váratlan hibával leáll a szerver egy rendezés közben. Inditáskor
619 és leállitáskor ezeket az állományokat törli a postmaster.
621 3.10) Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál?
623 A PostgreSQL csapat csak apróbb változtatásokat hajt végre a kisebb
624 kiadások között, igy ha 7.2 verzióról állsz át 7.2.1 verzióra, akkor nem
625 szükséges kidumplonod az adatbázist. A nagy kiadások esetében (például
626 verzióról 7.3-ra áttérésnél) változik a belsiõ adatstruktúrák és
627 adatállományok formátuma. Ezek a változások gyakran nagyon összetettek,
628 ezért inkáb nem tartunk fenn visszafelé kompatibilitást. A dump
629 az adatot általános formátumban irja ki, majd az új formátumban lehet
632 Azokban a kiadásokban, amelyek között az adat formátum nem változik,
633 a pg_upgrade program használható dumpolás és helzreállitás nélkül.
635 _________________________________________________________________
639 4.1) Mi a különbség a bináris és a normál kurzorok között?
641 Nézd meg a DECLARE dokumentációját.
643 4.2) Hogyan tudom select-elni a lekérdezés elsõ pár sorát?
645 Olvasd el a FETCH dokumentációját, vagy használd a SELECT
648 Az egész lekérdezést végre kell hajtani, még akkor is, ha csak az elsõ
649 pár sort akarod megkapni. Gondolj arra, hogy a lekérdezésben lehet ORDER BY
650 is. Ha van olyan index, ami megfelel az ORDER BY kifejezésednek, a
651 PostgreSQL képes lehet az elsö néhány rekord visszaadására, vagy a teljes
652 lekérdezésnek le kell futnia, amig a kért rekordok le nem generálódnak.
654 4.3) Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben?
656 Elolvashatod a psql forrás kódjában a pgsql/src/bin/psql/describe.c
657 állományban. Ez SQL parancsokat tartalmaz, amelyek azokat a kimeneteket
658 állitják elö, amiket a per jellel kezdödö parancsok adnak vissza.
660 4.4) Hogyan tudok eltávolítani egy oszlopot egy táblából?
662 Ez a funkcionalitás a 7.3 verziótül kezdve érhetö el az ALTER TABLE
663 DROP COLUMN -nal. A régebbi vertiókban igy lehet végrehajtani:
665 LOCK TABLE old_table;
666 SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél
669 DROP TABLE old_table;
670 ALTER TABLE new_table RENAME TO old_table;
673 4.5) Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak?
676 adatbázis: korlátlan (1 TB az általunk ismert lagnagyobb)
680 a tábla sorainak száma: korlátlan
681 a tábla oszlopainak száma: 250-1600 az oszlop nevektõl függöen
682 A tábla indexeinek száma: korlátlan
684 Természetesen nem igazán korlátlan, de a tárterület, memória és egyéb
685 külsö tényezök korlátozzák. A teljesitmény romolhat, ha ezek az értékek
688 A 16 TB-os legnagyobb tábla méret nem igényel nagy állomány támogatást.
689 A nagy táblák több 1 GB méretü állományba kerölnek, igy az állomány
690 rendszer korlátai nem lényegesek.
692 A maximális tábla méret és az oszlopok maximális oszlop szám növelhetö,
693 ha az alapértelmezett blokkméretet 32k-ra növeled.
695 4.6) Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány
698 A PostgreSQL akár a szöveg állomány helyigénzének ötszörösét is elfoglalhaja.
700 Képzelj el például, egy 100.000 soros szöveget, aminek minde sora
701 egy számból és egy szövegbõl áll. Tegyük el, hogy átlagosan 20 byte hosszú
702 szövegek. Ez a szövegállomány körülbelül 2.8 MB helyet foglalna el.
703 A tábla ami a fenti adatszerkezetet eltárolná, körülbelül 6.4 MB-os lenne.
704 Ezt a következöképpen számolhatjuk ki:
706 24 byte: egy int mezö + egy szöveg mezö
708 ---------------------------------------
711 Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy
712 8192 / 64 = 128 rekord adatbázis oldalanként (lefelé kerekitve).
714 100000 rekord / 128 rekord oldalanként = 782 adat oldal (felelé kerekitve).
716 782 adatbázis oldal * 8192 byte olalanként = 6,406,144 byte (6.4 MB)
718 Az indexek nem foglalnak túl sokat, de tartalmazzák az indexelt adatot,
719 igy ezek is lehetnek nagyok.
721 A NULL értékek bittérképben vannak tárolva, igy kevés helyet foglanak.
724 4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy felhasználók
727 A psql-ben találsz számos '\' karakterrel kezdödö utasítást az ilyen
728 információk listázására. A '\?' segitségével tudot kilistázni ezeket
729 a parancsokat. Ezen kivül vannak rendszer táblák, amelyek nevei 'pg_'
732 Próbáld ki a pgsql/src/tutorial/syscat.source állományt is. Ez sok
733 példát tartalmaz az rendszertáblákon végrehajtott SELECT-ekröl.
735 4.8) A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért?
737 Az indexeket nem használja a szerver minden lekérdezésnél automatikusan.
738 Csak akkor használ indexet, ha a tábla mérete egy megadott alsó határ
739 felett van, és a lekérdezés csak a sorok egy kis részét érinti. Ez azért
740 van, mert a véletlen hozzáférés még mindig lassabb lehet mint az tábla
741 szekvenciális olvasása.
743 Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet használni,
744 léteznie kell egy statisztikának a tábláról. Ez a statisztikai adatok a
745 VAACUM ANALYZE vagy az egyszerû ANALYZE mûveletek során
746 jönnek létre. A statisztikai adatok felhasználásával az optimalizáló
747 meg tudja határozni, hogy hány sor van a táblában, és el tudja dönteni,
748 hogy használjon-e indexet. A statisztiaki adatgyüjtést idõnként végre
749 kell hajtani, ahogy a tábla adatai változnak.
751 Az indexeket normális esetben nem használja az ORDER BY vagy
752 az OUTER JOIN. A szekvenciális olvasás általában gyorsabb, mint az
753 index keresés egy nagy táblában.
754 Bár a LIMIT az ORDER BY-val kombinálva használhat indexet, mert
755 a tábla csak kis része érintett. Bár a MIN és MAX SQL funkciók sem
756 használják az indexeket, ezeket az értékeket egy ORDER BY + LIMIT
757 lekérdezéssel is le lehet kérdezni:
760 ORDER BY col [ DESC ]
763 Amikor helyettesítõ jel operátorokat használsz, mint a LIKE kulcsszó
764 vagy a ~, az indexeket csak bizonyos körülmények között lehet használni:
765 * A keresõ string kezdete a keresési minta elején kell hogy legyen.
767 + A LIKE minták nem kezdõdhetnek % jellel.
768 + ~ (regexp) kifejezések nem kezdõdhetnek ^ jellel.
769 * A keresési kifejezés nem kezdõdhet karakter osztállyal.
770 * A case-insensitive keresés (ILIKE, ~*) nem használnak indexet
771 ehelyett funkcionális indexet használnak, amit a 4.12 pontban
773 * Az alapértelmezett C hellyel kell futtatni az initdb-t.
775 4.9) Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizáló
778 Olvasd el a dokumentáció EXPLAIN-ról szóló részét.
780 4.10) Mi az R-tree index?
782 Az R-tree index a térbeli adat indexelésére alkalmas. Egy hash
783 index nem képes tartomány keresésekre. A B-tree index csak egy
784 dimenzión kezeli a tartomány kereséseket. Például ha az indexet
785 egy pont (point adattípus) típusú mez.re építjük, gyorsabban
786 kezeli az olyan jellegü lekérdezéseket, mint egy adott körben
789 Az R-tree tervezési mintát eredetileg leíró szöveg:
791 Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
792 Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
795 Ezt olvashatod Stonebraker "Readings in Database Systems" c.
798 A beépített R-tree kezelni tudják a sokszögeket (polygon adattípus)
799 és a dobozokat (box). Elméletileg, az R-tree kiterjeszthetõ további
800 dimenziókra is. Gyakorlatilag ezen dolgoznod kell egy kicsit, és
801 még nincs dokumentációnk arról hogy az hogyan mûködik.
803 4.11) Mi a Genetic Query Optimizer?
805 A GEQO modul a lekérdezés optimalizáció sebességét növeli nagy
806 mennyiségû tábla összekapcsolása esetén. Lehetõvé teszi a nagy
807 lekérdezések végrehajtását nem teljes kereséssel.
809 4.12) Hogyan tudok regexp keresést és case-insensitive regexp keresést
810 használni? Hogyan tudok indexet használni case-insensitive kereséshez?
812 A ~ operátor hajt végre reguláris kifejezés (regexp) értelmezést,
813 a ~* ennek case-insensitive változata. A LIKE case-insensitive
816 A case-insensitive egyenlõség mûveleteket általában igy hajtjuk
820 WHERE lower(col) = 'abc';
822 Ez nem fog indexet használni, bár létrehozhatsz egy funkció indexet:
823 CREATE INDEX tabindex ON tab (lower(col));
825 4.13) Hogyan tudom észlelni egy lekérdezésben, ha egy mezõ NULL?
827 Használd "IS NULL"-t és az "IS NOT NULL"-t.
829 4.14) Mi a különbség a különbözõ karaktertípusok között?
831 Type Internal Name Notes
832 --------------------------------------------------
833 "char" char 1 character
834 CHAR(n) bpchar blank padded to the specified fixed length
835 VARCHAR(n) varchar size specifies maximum length, no padding
836 TEXT text no specific upper limit on length
837 BYTEA bytea variable-length byte array (null-byte safe)
839 Látni fogod a belsõ elnevezésüket, ha tanulmányozod a rendszertáblákat
840 és néhány hibaüzenetet.
842 Az utóbbi négy a "varlena" típusok, ami a tárolásuk módjára utal:
843 az elsõ 4 byte a lemezen a hosszúság, a többi az adat. A valódi méret
844 tehát nagyobb mint a deklarált hosszúság.Ezek azadatok tömöritve
845 tárolódnak el, igy kevesebb helyet foglalnek el az elöre számitottnál.
847 A CHAR(n) a legjobb megoldás, ha stabil hosszúságú stringet tárolsz.
848 A VARCHAR(n) jó arra az esetekre, ha a hosszúság változik, de van
849 felsõ korlátja. A TEXT típus korlátlan hosszúságú (1 GB-ig) szövegek
850 tárolására alklamas. A BYTEA bináris adatok tárolására van. A
851 teljesitmény mutatói hasonlóak ezenek a típusoknak.
853 4.15.1) Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt?
855 A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy szekvenciát
856 és egy indexet hoz létre az oszlopon. Például ez:
857 CREATE TABLE person (
863 CREATE SEQUENCE person_id_seq;
864 CREATE TABLE person (
865 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
868 CREATE UNIQUE INDEX person_id_key ON person ( id );
870 A szekvenciákkal kapcsolatban olvasd el a create_sequence man
871 oldalt. A sor OID-jét is használhatod egyedi azonositóként, bár
872 ebben az esetben figyelj a pg_gump használatánál a -o opcióra
873 (COPY WITH OIDS, másolás OID-dal), hogy meg?rizd az értékeket.
875 4.15.2) Hogyan kaphatom meg egy SERIAL beszúrás értékét?
877 Egy megoldás erre az, ha a nextval() funkcióval megszerzed az
878 értéket még mielött beszúrnád az adatot a táblába. Erre itt láthatsz
880 new_id = execute("SELECT nextval('person_id_seq')");
881 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
883 Esetleg lekérdezheted a szekvencia állapotát a sor beszúrása után.
884 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
885 new_id = execute("SELECT currval('person_id_seq')");
887 Végül pedig, használhatod a visszaadott OID értéket is, bár ez a lehetõ
888 legkevésbé portolható. Perl DBI-ben, Edmund Mergl DBD::Pg moduljában
889 az OID érték használható a $sth->execute() után ($sth->{pg_oid_status}).
891 4.15.3) A currval() és a nextval() nem teremt holtpont veszélyes helyzetet
892 a felhasználók között?
894 Nem. A currval() funkció a szerver processzed által adott értéket adja
895 vissza, nem pedig a többi szerver processz által adottat.
897 4.15.4) Miért nem használódnak fel újra a sequence számok tranzakció
899 Miért vannak problémák a serial oszlopok számozásával?
901 A párhuzamosság fejlesztése érdekében a sorozat számokat kérésre
902 adja ki a szerver futó tranzakcióknak, és azokat nem zárja, amig
903 a tranzakció véget nem ér. Ez jukakat okoz a számozásokban a
904 visszaforditott tranzakciók miatt.
906 4.16) Mi a OID? Mi a TID?
908 Az OID a PostgreSQL egyedi sor azonositója. Minden sor, ami létrejön
909 a szerveren, kap egy OID-t. Minden OID, amit az initdb alatt jön létre
910 16384 alatt van (lásd include/access/transam.h). Minden, felhasználó
911 által létrehozott OID legalább ennyi. Alapértelmezésben, az OID
912 nem csak a táblában vagy az adatbázisban egyedi, hanem a teljes
913 PostgreSQL adatbázis rendszerben.
915 A PostgreSQL az OID-okat a belsö tábláiban használja a sorok táblák
916 között összekapcsolásához. Ezek az OID-k használhatóak a rekordok
917 azonositására is amikor táblákat csatol össze a szerver (JOIN).
918 Az OID-ot használhatod mezö típusként is, és indexelheted is.
920 Az OID érték egy központi területröl származik, amit minden szerver
921 processz használ. Ha az OID-ot valami másra szeretnéd cserélni:
922 CREATE TABLE new_table(old_oid oid, mycol int);
923 SELECT old_oid, mycol INTO new FROM old;
924 COPY new TO '/tmp/pgtable';
926 COPY new WITH OIDS FROM '/tmp/pgtable';
928 Az OID 4 byte-os integer értékként tárolódik, igy 4 milliárdnál túlcsordul.
929 Még soha senki nem jelezte hogy ez történt volna, és ezt a korlátot
930 igyekszünk eltávolitani, még mielött bárki észrevenné.
932 A TID a fizikai sorok blokk és offszet címmel való azonositására szolgál.
933 A TID változik minden rekord módositás és törlés alkalmával. Ezeket az
934 indexek használják hogy a fizikai sort gyorsan megtalálják.
936 4.17) Mi a PostgreSQL-ben használt kifejezések jelentése?
938 Néhol a forrás kódban és a dokumnetációban találhatóak kifejezések,
939 amelyek általánosabb jelentéssel bírnak. Itt van néhány:
940 * tábla (table), reláció (relation), osztály (class)
941 * sor (row), rekord (record), tuple (nincs magyar jelentés)
942 * oszlop (column), mezö (field), attributum (attribute)
944 * helyettesit (replace), módosit (update)
945 * hozzáfûz (append), beszúr (insert)
946 * OID, sorozat érték (serial value)
948 * range variable, tábla név, tábla alias
950 Az általános adatbázis kifejezések összefoglalóját itt olvasható:
951 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
954 4.18) Miért kapom ezt a hibát: "ERROR: Memory exhausted in
957 Lehet hogy elfogyott a virtuális memóriád, vagy a kerneled erõforrás
958 korlátai alacsonyak. Próbáld ki ezt mielött elinditanád a postmastert:
962 A shelltõl függõen ezek közül csak az egyik fut majd le, de a
963 processzek adatszegmensét sokkal magasabbra állitja, ami talán
964 elég lesz a lekérdezés végrehajtásához. Ez az utasítás a jelenlegi
965 processzre (a shelled) érvényes, és minden általa létrehozott
966 processzre. Ha problémád van az SQL klienssel, mert a szerver
967 túl nagy adatot küld vissza, próbáld meg e klienssel is ugyanezt.
969 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziót futtatok?
971 A psql programban select version();
973 4.20) Miért kapok "invalid large obj descriptor" hibát nagy objektumok
976 A nagy objektumok kezelését egy tranzakciós blokkban helyezd el.
977 (BEGIN és COMMIT között)
979 Jelenleg a PostgreSQL ezt a szabályt azzal teszi kötelezõvé, hogy a
980 tranzakció végén a nagy objektumokat lezárja, igy a tranzakció után
981 az elsõ mûvelet amit az objektumon végrahajtanál hibás lesz.
983 Ha olyan programozási felületet használsz mint az ODBC vagy a JDBC
984 akkor valószinûleg ki kell kapcsolnod az auto-commit-ot.
987 4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett
988 érétke a jelenlegi idõ?
990 Használd a CURRENT_TIMESTAMP -ot:
991 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
993 4.22) Miért olyan lassúak az al-lekérdezéseim IN-nel?
995 Jelenleg az al-lekérdezéseket a külsõ lekérdezéshez csatoljuk. Ha
996 az allekérdezés csak kevés sort eredményez és a külsõ lekérdezés
997 sokat, akkor az IN is gyors. Az EXISTS kulcsszó használatával
998 gyorsithatod a lekérdezéseket.
1001 WHERE col IN (SELECT subcol FROM subtab);
1003 EXISTS használatával:
1006 WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1008 Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell
1009 hogy legyen. Reméljük ezt a korlátot sikerül hamarosan legyõznünk.
1011 4.23) Hogyan tudok outer join-t végrehajtani?
1013 A PostgreSQL a szabványos SQL szintaktikát követi. Itt van két példa:
1015 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1019 FROM t1 LEFT OUTER JOIN t2 USING (col);
1021 Ezek az identikus lekérdezések összekapcsolják a t1.col és a t2.col
1022 mezõket, és a t1 bármelyik kapcsolatlan sorát is visszadják. A RIGHT
1023 JOIN a t2 kapcsolatlan sorait adta volna vissza, a FULL JOIN pedig
1024 a kapcsolt, és mindkét tábla kapcsolatlan sorait adja. Az OUTER
1025 kulcsszó opcionális, a LEFT, RIGHT és FULL JOIN szintaktikailag
1026 helyes. Az átlagos összekapcsolásokat INNER JOIN-nak nevezzük.
1028 Az elõzõ kiadásokban a OUTER JOIN lekérdezéseket UNION és NOT IN
1029 kulcsszavakkal lehetett szimulálni. Például a tab1 és a tab2
1031 SELECT tab1.col1, tab2.col2
1033 WHERE tab1.col1 = tab2.col1
1035 SELECT tab1.col1, NULL
1037 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1040 4.24) Hogyan tudok több adatbázison végrehajtani lekérdezést?
1042 Arra nincs lehetõség, hogy más adatbázisból kérdezz le adatot.
1043 Mivel a PostgreSQL adatbázis specifikus rendszer táblákat tölt
1044 be, bizonytalan hogy egy adatbázisok közötti lekérdezésnek hogyan
1045 kellene viselkednie.
1047 A contrib/dblink könyvtárban találsz egy megoldást erre, ami
1048 funkció hivások segitségével mûködik. Persze, a kliens hozhat létre
1049 szimultán kapcsolatot több adatbázissal, és összefésülheti az
1052 4.25) Hogy tudok több soros vagy oszlopos eredményt visszaadni egy
1055 A PL/pgSQL tárolt eljárás nyelvvel refcursor használatával.
1057 http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html
1059 4.26) Miért nem tudom megbizhatóan létrehozni és törölni az átmeneti
1060 táblákat a PL/pgSQL funkciókban?
1062 A PL/pgSQL cacheli a funkciók tartalmát, aminek az a szerencsétlen
1063 mellékhatása, hogy ha egy PL/pgSQL funkció használ egy átmeneti
1064 táblát, ami kés?bb törlõdik majd ujra létrejön, akkor az újra lefutó
1065 funkció nem fogja megtalálni a táblát, mert a cache változat a régi
1066 táblára tartalmaz mutatót. A megoldás erre az EXECUTE utasítás
1067 használata az átmeneti táblák kezelésére PL/pgSQL-ben. Ez a
1068 lekérdezés újrafordítását fogja elõidézni minden alkalommal.
1070 4.27) Milyen replikációs lehetõségek vannak?
1072 Számos master/slave replikációs lehetõség létezik. Ez csak a master
1073 adatbázis számára teszi lehetõvé, hogy az adatokat változtassa. Egy
1074 Listát olvashatsz ezekrõl itt:
1075 http://gborg.PostgreSQL.org/genpage?replication_research
1077 Egy többfelhasználós replikációs rendszer készül itt:
1078 http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
1080 4.28) Milyen kódolási lehetõségek vannak?
1082 - A contrib/pgcrypto tartlamaz számos SQL lekérdezésben használható kódolást.
1083 - A kliens-szerver kommunikáció rejtjelezésére a hostssl használható.
1084 Ezt a pg_hba.conf-ben engedélyeztheted.
1085 - Az adatbázis felhsználók jelszavait tároláskor kódolja a rendszer.
1086 Régebbi verziókban a PASSWORD_ENCRYPTION opcióval lehetett
1088 - A szerveren használhatsz kódolt fájrendszert.
1089 _________________________________________________________________
1091 A PostgreSQL kiterjesztése
1093 5.1) Írtam egy felhasználói funkciót. Miért core dumpol az adatbázis amikor
1096 Számos probléma lehet. Elöbb probáld ki a funkciódat egy különálló
1099 5.2) Hogyan lehet új adattípusokat és funkciókat hozzáadni a PostgreSQL
1102 Küldd el a kiegészítéseid a pgsql-hackers levelezési listára és a
1103 forráskodjaid végül a contrib-ban kötnek ki.
1105 5.3) Hogyan lehet olyan C funkciót írni, ami Tuple-t ad vissza?
1107 A 7.3 verziótól kezdve a PostgreSQL támogatja a táblázatokat
1108 viszzaadó funkciókat C, PL/pgSQL és SQL nyelveken. Bõvebb
1109 dokumentációt a Programozó kézikönyvben találsz. Egy C példa
1110 funkció található a contrib/tablefunc könyvtárban.
1112 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris
1115 A Makefile-ok nem ismerik a include állományok megfelelõ függõségeit.
1116 Végre kell hajtanod egy make clean-t, majd újra egy make-t. Ha GCC-t
1117 használsz felhasználhatod a configure script --enable-depend opcióját,
1118 így a compiler maga fogja ellenõrizni a függõségeket.