3 Utolso modosítás dátuma: 2005 május 9.
5 Fordítás aktualizálása: 2005 június
7 A GyIK karbantartoja: Bruce Momjian (pgman@candle.pha.pa.us)
9 Fordíto: Hornyák Lászlo
10 (laszlo.hornyak.nospam@gmail.com)
12 A legfrissebb verzio itt érhetõ el (angol):
14 http://www.PostgreSQL.org/docs/faq-english.html.
16 Legfrissebb magyar nyelvû verzio:
18 http://hackers.forgeahead.hu/space/PostgreSQL/GYIK
20 Platform specifikus kérdések:
22 http://www.PostgreSQL.org/users-lounge/docs/faq.html.
24 ----------------------------------------------------------------------
28 1.1 Mi a PostgreSQL? Hogy kell kimondani?
29 1.2 Mik a PostgreSQL felhasználási feltételei?
30 1.3 Milyen UNIX operácios rendszereken fut PostgreSQL?
31 1.4 Milyen nem UNIX operácios rendszerek elérhetõek?
32 1.5 Hogyan tudok PostgreSQL-t szerezni?
33 1.6 Hogyan kapok terméktámogatást?
34 1.7 Melyik a legfrissebb kiadás?
35 1.8 Milyen dokumentácio áll rendelkezésre?
36 1.9 Hogyan találok informáciot hibákrol vagy hiányzo funkcionalításrol?
37 1.10 Hogy tanuljam meg az SQL nyelvet?
38 1.11 A PostgreSQL 2000. év kompatibilis?
39 1.12 Hogyan lehet csatlakozni a fejlesztõ csapathoz?
40 1.13 Hogyan küldjek hibajelentést?
41 1.14 Milyen a PostgreSQL más DBMS-ekkel összehasonlítva?
42 1.15 Hogyan tudom üzletileg segiteni a PostgreSQL-t?
43 1.16 Ki irányítja a PostgreSQL-t?
45 Felhasználoi kliens kérdések
47 2.1 Van ODBC meghajto PostgreSQL-hez?
48 2.2 Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez?
49 2.3 Van a PostgreSQL-hez grafikus felhasználoi felület ? Riport generátor?
50 Beágyazott lekérdezõ nyelv felület?
51 2.4 Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert?
53 Adminisztrácios kérdések
55 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre
57 3.2 AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core
59 3.3 Amikor megprobálom inditani a postmaster-t, "IpcMemoryCreate" hibákat
61 3.4 Amikor megprobálom inditani a postmaster-t, "IpcSemaphoreCreate"
63 3.5 Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket?
64 3.6 Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat?
65 3.7 Milyen hibakeresõ lehetõségek érhetõek el?
66 3.8 Miért kapok "Sorry, too many clients" hibát csatlakozásnál?
67 3.9 Mi van pgsql_tmp könyvtárban?
68 3.10 Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál?
72 4.1 Mi a különbség a bináris és a normál kurzorok között?
73 4.2 Hogyan tudom select-elni a lekérdezés elsõ pár sorát?
74 4.3 Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben?
75 4.4 Hogyan tudok eltávolítani egy oszlopot egy táblábol?
76 4.5 Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak?
77 4.6 Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány
79 4.7 Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy
80 felhasználok vannak definiálva?
81 4.8 A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért?
82 4.9 Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizálo a
84 4.10 Mi az R-tree index?
85 4.11 Mi a Genetic Query Optimizer?
86 4.12 Hogyan tudok regexp keresést és case-insensitive regexp keresést
87 használni? Hogyan tudok indexet használni case-insensitive kereséshez?
88 4.13 Hogyan tudom észlelni egy lekérdezésban, ha egy mezõ NULL?
89 4.14 Mi a különbség a különbözõ karaktertípusok között?
90 4.15.1 Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt?
91 4.15.2 Hogyan kaphatom meg egy SERIAL beszúrás értékét?
92 4.15.3 A currval() és a nextval() nem teremt holtpont veszélyes helyzetet
93 a felhasználok között?
94 4.15.4 Miért nem használodnak fel újra a sequence számok tranzakcio abort
95 esetén? Miért vannak problémák a serial oszlopok számozásával?
96 4.16 Mi a OID? Mi a TID?
97 4.17 Mi a PostgreSQL-ben használt kifejezések jelentése?
98 4.18 Miért kapom ezt a hibát: "ERROR: Memory exhausted in
100 4.19 Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok?
101 4.20 Miért kapok "invalid large obj descriptor" hibát nagy objektumok
103 4.21 Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a
105 4.22 Miért olyan lassúak az al-lekérdezéseim IN-nel?
106 4.23 Hogyan tudok outer join-t végrehajtani?
107 4.24 Hogyan tudok több adatbázison végrehajtani lekérdezést?
108 4.25 Hogy tudok több soros vagy oszlopos eredményt visszaadni egy
110 4.26 Miért nem tudom megbizhatoan létrehozni és törölni az átmeneti
111 táblákat a PL/pgSQL funkciokban?
112 4.27 Milyen replikácios lehetõségek vannak?
113 4.28 Milyen kodolási lehetõségek vannak?
115 A PostgreSQL kiterjesztése
117 5.1) Írtam egy felhasználoi funkciot. Miért core dumpol az adatbázis
119 5.2) Hogyan lehet új adattípusokat és funkciokat hozzáadni a PostgreSQL
121 5.3) Hogyan lehet olyan C funkciot írni, ami Tuple-t ad vissza? (több
122 soros több oszlopos eredmények)
123 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris
126 ----------------------------------------------------------------------
130 1.1 Mi a PostgreSQL? Hogy kell kimondani?
132 Így ejstd ki: Post-Gres-Q-L.
134 (Vagy talán inkább töltsd le a kis mp3-at a PostgreSQL homepage-rõl)
136 A PostgreSQL a POSTGRES adatbázis management rendszer egy kiegészítése,
137 ami egy következõ generácios DBMS kutatási prototípus. Megtartja a
138 POSTGRES adatmodellét és gazdag adattípus választékát, de a PostQuel
139 lekérdezõ nyelvet az SQL egy kiterjesztett verziojával helyettesíti. A
140 PostgreSQL szabad és a teljes forráskod hozzáférhetõ.
142 A PostgreSQL fejlesztését egy csapat végzi, amelynek minden tagja
143 megtalálhato a PostgreSQL fejlesztõi levelezési listán. A jelenlegi
144 koordinátor Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat
145 felelõs minden fejlesztésért. <>A PostgreSQL 1.01 alkotoi Andrew Yu és
146 Jolly Chen voltak. Sokan járultak hozzá portolással, teszteléssel,
147 hibakereséssel és fejlesztéssel. Az eredeti Postgres kod, amibõl a
148 PostgreSQL származik Michael Stonebraker professzor irányítása alatt
149 fejlesztettek az egyetem programozoi, tanuloi és végzett tanuloi. <>
151 A szoftver eredeti neve Postgres volt. Amikor SQL funkcionalítással
152 egészítették ki 1995-ben, a nevét Postgres95-re változtatták. 1996 végén
155 1.2 Mik a PostgreSQL felhasználási feltételei?
157 Az eredeti angol copyright szöveg:
161 PostgreSQL is subject to the following COPYRIGHT:
163 PostgreSQL Data Base Management System
165 Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
167 Portions Copyright (c) 1994-6 Regents of the University of California
169 Permission to use, copy, modify, and distribute this software and its
171 documentation for any purpose, without fee, and without a written
173 agreement is hereby granted, provided that the above copyright notice
175 and this paragraph and the following two paragraphs appear in all
179 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
181 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
183 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
185 ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
187 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
189 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
191 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
193 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
195 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
197 CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
199 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
203 Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van használni a
204 szoftvert mindenféle ellenszolgáltatás (pénz, stb) nélkül, a forrás kodot
205 modosíthatod, és továbbadhatod, DE semmilyen, a szoftver használatábol
206 következõ károsodásért nem vállal garanciát a fejlesztõ. A fenti a BSD
207 licensz, egy klasszikus nyilt-forráskod licensz. Nem tartalmaz
208 megszorításokat arra, hogy a forráskodot hogyan használod fel.
210 Kedveljük ezt a licensz formát és nem áll szándékunkban megváltoztatni.
212 1.3 Milyen UNIX operácios rendszereken fut PostgreSQL?
214 Általában minden UNIX-kompatibilis operácios rendszer képes arra hogy
215 futtassa a PostgreSQL-t. Azokat a platformokat, amiken tesztelték a
216 kiadást megtalálhatod a installácios utasítások között.
218 1.4 Milyen nem UNIX operácios rendszerek elérhetõek?
222 A libpq C függvénykönyvtárat, a psql-t és más felületeket le lehet úgy
223 fordítani, hogy fussanak MS Windows operácios rendszereken. Ebben az
224 esetben a kliens MS Windows-on fut és TCP/IP segítségével kommunikál a
225 Unixon futo szerverrel. A "win32.mak" állomány a kiadás része, ennek
226 segítségével lehet Win32 platformokra lefordítani a libpq-t és a psql-t. A
227 PostgreSQL ODBC kliensekkel is képes kommunikálni.
231 <>Az adatbázis szerver Cygwin segítségével fut Windows NT és Win2k
232 rendszereken. További informácio találhato a pgsql/doc/FAQ_MSWIN
233 állományban és a MS Windows FAQ-ban a következõ helyen:
234 http://www.PostgreSQL.org/docs/faq-mswin.html. Natív MS Windows
235 NT/2000/XP portok jelenleg fejlesztés alatt állnak.
237 1.5 Hogyan tudok PostgreSQL-t szerezni?
239 Az elsõdleges anonim ftp oldal: ftp://ftp.PostgreSQL.org/pub.
241 A tükör oldalak listája megtalálhato a fõ weboldalunkon.
243 1.6 Hogyan kapok terméktámogatást?
245 Az elsõdleges lista a pgsql-general@postgresql.org. Ez használhato a
246 PostgreSQL-lel kapcsolatos párbeszédekre. Ha fel szeretnél íratkozni,
247 küldj egy levelet a következõ tartalommal (nem tárggyal) a
248 pgsql-general-request@postgresql.org címre:
254 Van egy hibákkal kapcsolatos levelezési lista is:
255 pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:
261 A fejleszto"i levelezési lista: pgsql-hackers-request@PostgreSQL.org a
262 következõ tartalommal:
268 Egyéb levelezési listák találhatoak a weboldalunkon:
269 http://www.PostgreSQL.org
271 Van egy IRC csatorna is #PostgreSQL néven ahol felteheted kérédseid. A
272 következõ unix paranccsal csatlakozhatsz:
274 irc -c '#PostgreSQL' "$USER" irc.phoenix.net.
276 A kereskedelmi terméktámogatást nyújto cégek listája elérhetö itt:
277 http://www.PostgreSQL.org/users-lounge/commercial-support.html
279 Magyar nyelvu" levelezési lista nincs, de ha tudok segiteni a fenit e-mail
280 cimemen elérheto" vagyok.
282 1.7 Melyik a legfrissebb kiadás?
284 A legfrissebb PostgreSQL kiadás a 8.0.
286 A tervek szerint minden évben lesz egy nagyobb fejlesztéseket tartalmazo
287 kiadás, míg a kisebb fejlesztéseket néhány havonta adjuk ki.
289 1.8 Milyen dokumentácio áll rendelkezésre?
291 Számos kézikönyv, man oldalak és kis teszt példák találhatoak a kiadásban
292 a doc/ könyvtár alatt. Az interneten is olvashatod a dokumentáciot a
295 http://www.PostgreSQL.org/users-lounge/docs/.
297 Két PostgreSQL könyv érhetõ el az interneten a
298 http://www.PostgreSQL.org/docs/awbook.html és a
299 http://www.commandprompt.com/ppbook/ címeken. A megvásárolhato könyvek
300 listája itt találhato: http://www.ca.PostgreSQL.org/books/. A
301 PostgreSQL-lel kapcsolatos technikai jellegû cikkek gyûjteménye:
302 http://techdocs.PostgreSQL.org/.
304 A psql parancs rendelkezik néhány \d utasítással, amellyekkel listázhatoak
305 az operátorok, a funkciok, stb.
307 A website is tartalmaz további dokumentáciokat.
309 1.9 Hogyan találok informáciot hibákrol vagy hiányzo funkcionalításrol?
311 A PostgreSQLaz SQL-92 szabvány egy kiegészítése. Nézd meg a TODO listákat
312 ha érdekelnek az ismert hibák.
314 1.10 Hogy tanuljam meg az SQL nyelvet?
316 A PostgreSQL könyv a http://www.PostgreSQL.org/docs/awbook.html címen
317 tartalmaz SQL alapokat. Elérhetõ egy másik SQL könyv is a
318 http://www.commandprompt.com/ppbook címen. Egy szép oktato anyag találhato
319 a http://www.intermedia.net/support/sql/sqltut.shtm, a
320 http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM és a
321 http://sqlcourse.com oldalakon.
323 Egy másik lehetõség a "Tanítsd magad 21 nap alatt SQL-re, második kiadás"
324 a http://members.tripod.com/er4ebus/sql/index.htm.
326 Sok felhasználonak tetszett a gyakorlati SQL könyv ("The Practical SQL
329 1.11 A PostgreSQL 2000. év kompatibilis?
331 Igen, könnyedén kezeli a 2000 utáni és idõszámításunk elött 2000 elötti
334 1.12 Hogyan lehet csatlakozni a fejlesztõ csapathoz?
336 Elösször is töltsd le a forráskodot, és olvasd el a PostgreSQL
337 fejlesztõi dokumnetáciot a web oldalunkon vagy a kiadásban. Ezután
338 íratkozz fel a pgsql-hackers és a pgsql-patches levelezési listákra.
339 Végül pedig küldj be magas szinvonalú patch-eket a pgsql-patches listára.
341 Van egy pár ember, akiknek commit privilégiumuk a PostgreSQL CVS fán.
342 Õk olyan sok magas szinvonalú patch-et küldtek be, hogy az addigi
343 csapat már nem tudta követni, és nem volt kétségünk arrol, hogy a
344 patch-ek amiket õk küldenek jo minõségû.
346 1.13 Hogyan küldjek hibajelentést?
348 Látogass el a BugTool oldalra:
349 http://www.PostgreSQL.org/bugs/bugs.php
350 Itt megtalálod követendõ utasításokat.
352 Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb verzio vagy folt.
353 ftp://ftp.PostgreSQL.org/pub
355 1.14 Milyen a PostgreSQL más DBMS-ekkel összehasonlítva?
357 Számos nézõpontbol lehet vizsgálni a szoftvert: képességek, teljesítmény
358 megbízhatoság, támogatottság és ár.
360 Képességek: A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek
361 képességeivel: tranzakciok, al-lekérdezések, triggerek, nézetek, külsõ
362 kulcsok, integrítás és kifinoult zármechanizmusok. Van néhány képessége,
363 ami a kereskedelmi adatbázisokbol hiányzik, mint például a felhasználo
364 által definiált típusok, öröklõdés, szabályok és verzio kontroll a
365 zárolási viták redukálásáért.
367 Teljesítmény: A PostgreSQL teljesítménye hasonlít a kereskedelmi és más
368 nyílt adatbázis szerverekéhez. Lehet bizonyos esetekben lassabb, másokban
369 gyorsabb. A MySQL nevû tanulo RDBMS például gyorsabban hajt végre
370 insert/update mûveleteket, mivel a tranzakciokat elsumákolja. Persze a
371 MySQL nem rendelkezik a képességek részben felsoroltak nagy részével. Mi a
372 megbízhatoságra és a képességekre építünk, bár a teljesítmény is nõ minden
373 kiadással. Van egy érdekes oldal a MySQL és a PostgreSQL
374 összehasonlításával a http://openacs.org/philosophy/why-not-mysql.html
377 Megbízhatoság: Tudjuk hogy ha egy DBMS nem megbízhato, akkor teljesen
378 haszontalan. Igyekszünk jol tesztelt, stabil kodot kiadni, amiben a lehetõ
379 legkevesebb hiba van. Minden kiadás elött eltellik legalább 1 honap béta
380 teszt, és a kiadási történet is azt mutatja, hogy stabil kodot adunk ki,
381 ami készen áll a produktív felhasználásra. Úgy gondoljuk, felülmúlunk más
382 adatbázis szoftvereket ezen a téren.
384 Támogatás: A levelezési listáink kapcsolatot teremtenek a fejlesztõk és
385 felhasználok csoportjával , akik segítenek a problémák megoldásában. Bár
386 nem tudjuk garantálni hogy ki tudjuk javítani a hibát, más, kereskedelmi
387 adatbázis cégek sem tudják. A fejlesztõ csoport közvetlen elérési
388 lehetõsége, a közösség, a dokumentácio és a forráskod gyakran támogatást
389 biztosít, mint más adatbázisoknál. Van kereskedelmi, alkalmi támogatás
390 azoknak, akiknek szüksége van rá (lásd: 1.6).
392 Ár: A PostgreSQL szabad bármilyen felhasználásra, akár kereskedelmire is.
393 A termékhez hozzáadhatod a saját forráskodjaidat korlátozás nélkül.
395 1.15 Hogyan tudom üzletileg segiteni a PostgreSQL-t?
397 A PostgreSQL elsõ osztályú infrastruktúrával rendelkezik, amit 1996-ban
398 indítottunk el. Mindent Marc Fourniernek köszönhetünk, aki létrehozta és
399 karbantartja a rendszert.
401 A minõségi infrastruktúra nagyon fontos egy nyilt forrású szoftver
402 esetében. Megvéd az olyan fennakadásoktol, amelyek komoly késéseket
403 okoznak a fejlesztésekben. Természetesen ez az infrastruktúra nem olcso.
404 Számos havi és állando kiadásunk van. Ha a cégednek van pénze, amivel
405 támogatná erõfeszítéseinket, kérlek látogass el a
406 http://store.pgsql.com/shopping/ oldalra.
408 Bár a weboldal "PostgreSQL, Inc"-ként említi, a hozzájárulások kizárolag a
409 PostgreSQL fejlesztésre értendoek, és nem egy meghatározott cégnek. Ha
410 jobban tetszik, küldhetsz csekket is a kapcsolati címek bármelyikére.
412 1.16 Ki irányítja a PostgreSQL-t?
414 Ha központi bizottságot, ellenörzo" céget keresel a PostgreSQL mögött, add
415 fel, nincs ilyesmi. Létezik egy mag és CVS commiter csoport, de ez inkáb
416 adminisztrativ mint ellenörzo" célú. A projectet fejleszto"k és
417 felhasználok közössége irányítja, amihez bárki csatlakozhat. Csupán annyit
418 kell tenned hogy felíratkozol a levelezo"listékra és részt veszel a
421 ----------------------------------------------------------------------
423 Felhasználoi kliens kérdések
425 2.1 Van ODBC meghajto PostgreSQL-hez?
427 Két ODBC meghajto érhetõ el: PsqlODBC és a OpenLink ODBC.
429 A PsqlODBC a PostgreSQL kiadás része. További informácio találhato a
430 ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.
432 Az OpenLink ODBC-t a http://www.openlinksw.com címrõl töltheted le. Ez az
433 õ szabványos ODBC kliens szoftverükkel mûködik, így minden
435 általuk támogatott platformon (Win, Mac, Unix, VMS) elérhetõ lesz a
438 Talán olyan vevõknek fogják eladni, akik kereskedelmi minõségû terméket
439 szeretnének kapni, de a freeware verzio mindig elérhetõ lesz. Kérdéseidet
440 a termékkel kapcsolatban a postgres95@openlink.co.uk címen teheted fel.
442 Olvasd el az ODBC fejezetet is a programozok kézikönyvében!
444 2.2 Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez?
446 Egy szép bemutato olvashato az adatbázissal támogatott web oldalanrol a
447 http://www.webreview.com weboldalon.
449 A web integráciohoz a PHP egy kivállo szoftver. Letölthetõ a
450 http://www.php.net címrõl.
452 Komplexebb esetekre sokan használják a Perl felületet és a CGI.pm vagy a
455 2.3 Van a PostgreSQL-hez grafikus felhasználoi felület?
457 Van egy szép PgAccess nevû grafikus felületünk, ami riport generátorként
458 is használhato. A weboldalát megtalálod a http://www.pgaccess.org/ címen.
460 A http://techdocs.postgresql.org/guides/GUITools oldalon találhatsz egy
461 pontos és részltes listát.
463 2.4 Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert?
471 * Perl (DBD::Pg and perl5)
475 * C Easy API (libpgeasy)
476 * PHP ('pg_' functions, Pear::DB)
477 További programozási felületek érhetõek el a
478 http://www.PostgreSQL.org/interfaces.html és a
479 http://gborg.PostgreSQL.org oldalakon.
481 ----------------------------------------------------------------------
483 Adminisztrácios kérdések
485 3.1 Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre
488 A configure script --prefix paraméterének használatával.
490 3.2 AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core
491 dump-ot kapok. Miért?
493 Számos probléma lehet, de legelösször ellenõrizd le, hogy a kerneled
494 System V kiegészítésekkel rendelkezik-e. A PostgreSQL használja a kernel
495 osztott memoria és szemafor API-ját.
497 3.3 Amikor megprobálom inditani a postmaster-t, "IpcMemoryCreate" hibákat
500 Vagy nincs megfelelõen konfigurálva a kerneled osztott memoria támogatása
501 vagy meg kell nagyobbítanod a maximális osztott memoria méretet.
503 A pontos méret szükséglet függ az architektúrádtol és attol hogy hány
504 buffert és processzt konfigurálsz a postmasternek. Legalább 1 MB területre
505 szükséged van. A PostgreSQL Adminisztrácio kézikönyvben olvashatsz
506 részletesebb informáciokat az osztott memoriárol és a szemaforokrol.
508 3.4) Amikor megprobálom inditani a postmaster-t, "IpcSemaphoreCreate"
509 hibákat kapok. Miért?
511 Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No space left on
512 device)", akkor a kerneled konfigurácioja nem tesz lehetõvé elegendõ
513 szemafort. A PostgreSQL szerver processzenként 1 szemafort igényel. Egy
514 átmeneti megoldás lehet az hogy a postmastert kevesebb maximális processz
515 számmal inditod el. Használd a -D paramétert. Egy sokkal megfelelõbb
516 megoldás az ha növeled a kerneled SEMMNS és SEMMNI paramétereit.
518 A hibás szemaforok is adatázis lerobbanásához is vezethet nagy terhelés
519 esetén.Ha a hibaüzenet valami más, lehet hogy nincs szemaforok támogatás
521 forditva a kerneledbe. Olvasd el a PostgreSQL adminisztrátorok
522 kézikönyvében az osztott memoriárol és a szemaforokrol szolo fejezetet.
524 3.5) Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket?
526 Alapértelmezésben a PostgreSQL a helyi kapcsolatokat Unix socketekkel
527 valosítja meg. Más gépek nem lesznek képesek csatlakozni, ha nem
528 engedélyezed azt -i opcioval a postmasternek, és nem állítod be host a
529 alapú azonosítást a pg_hba.conf állományban. Ezzel válnak lehetõvé a
532 3.6) Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat?
534 Az indexelés feltétlenül gyorsítja a lekérdezéseket. Az EXPLAIN parancs
535 lehetõvé teszi hogy lásd, hogy a PostgreSQL miként interpretálja a
536 lekérdezést és melyik indexet használja.
538 Ha sok INSERT mûveletet hajtassz végre, csináld nagy kötegekben a COPY
539 paranccsal. Ez sokkal gyorsabb mint az egyedi INSERT parancsok. Másodszor:
540 Azok a mûveletek, amelyek nincsenek tranzakcio blokkon belül, azok saját
541 tranzakciot indítanak. Sok mûveletet érdemes egy tranzakcion belül
542 végrehajtani. Ez csökkenti a tranzakcio kezelés többletidejét. Az
543 indexeket javasolt a nagy adatváltozások elött eltávolítani, majd újra
546 Számos teljesítmény javíto lehetõség van. Kikapcsolhatod az fsync()
547 mûveletet a postmaster -o -F opciokval valo indításakor. Így nem fog az
548 amugy lassú fsync() függvény meghívodni minden tranzakcio végén.
550 Használhatod a postmaster -B opcioját is az osztott memoria szegmens
551 méretének növeléséhez. Ha az értéket túl magasra állítod, lehet hogy a
552 postmaster nem indul el, mert túllépted az operácios rendszer által
553 megengedett méretet. Minden buffer 8K méretû és alapértelmezésban 64
556 A -S opcioval növelheted a szerver átmeneti rendezésekre fenntartott
557 memoria területét. Az értéket kilobyteban add meg. Az alapértelmezett
560 Használhatod a CLUSTER utasítást is, hogy a táblákat egy indexnek
561 megfelelõen csoportosítsd. Olvasd el a CLUSTER kézikönyv oldalt további
564 Hardver kiválasztásában segíthet:
565 http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html és
566 http://www.powerpostgresql.com/PerfList/.
568 A postgresql.conf beállitásaival kapcsolatos tudnivalok:
569 http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
570 és http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
572 3.7) Milyen hibakeresõ lehetõségek érhetõek el?
574 A PostgreSQL számos lehetöséggel rendelkezik ami értékes lehet a
577 Elösször is, futtathatod a configure scriptet --enable-cassert opcioval,
578 sok assert() funkciohivás ellenörzi a program futását és megállitja ha
579 valami vératlan hiba történik.
581 Mind a postmaster és a postgres számos hibakeresö lehetüséggel
582 rendelkezik. Mindig amikor elinditod a postmastert, gyözödj meg rola, hogy
583 a kimenetet log állományba küldöd. Igy:
587 ./bin/postmaster >server.log 2>&1 &
589 Ez egy server.log állományt hoz létre a felsö PostgreSQL könyvtárban. Ez
590 az állomány tartlamaz majd számos hasznos informáciot a szerverrel
591 kapcsolatos problémákrol és hibákrol. A postmaster -d opciojával lehet
592 részletesebb hibakeresö informáciot kapni. A -d opciohoz meg kell
593 határozni egy hiba szintet. Vigyázz, a magas hibakeresö szint nagy log
596 Ha a postmaster nem fut, akkor futtathatod a postgres szervert
597 parancssorbol is, és az SQL kifejezést közvetlenül ennek adhatod át. Ez
598 csak hibakeresés esetében javasolt. Az új sor a kifejezés végét jelenti,
599 nem a pontosvesszö. Ha hibakeresö opciokkal forditottad a szervert,
600 használhatsz egy debuggert is hogy lásd hogy mi történik. Mivel igy a
601 szervert nem a postmaster inditotta, nem többfelhasználos környezetként
602 fut, igy a zárolási és a szerverek közötti kommunikácios hiba jelenségek
605 Ha már fut a postmaster, indits egy psql-t, és nézd meg a szerver processz
606 PID-jét! Egy debuggert használhatsz a processzhez csatlakozáshoz.
607 Beállithatsz töréspontokat és elindithatsz lekérdezéseket. Ha a postgres
608 inditásban keresel hibát, a PGOPTIONS környezeti változot állitsd be "-W
609 n" értékre. Ez n másodperc várakozást idéz elö, igy tudsz csatlakozni a
610 processzhez, el tdsz hejezni töréspontokat, majd folytathatod a indítást.
612 A postgres program -s, -A és -t opcioi is nagyon hasznosak lehetnek
613 hibakeresésnél és teljesítmény mérésnél.
615 Profiling lehtöséggel is fordithatod a szervert, hogy lásd melyik funkciok
616 foglalják el a futási idõt. A szerver profile állományai a
617 pgsql/data/base/dbname könzvtárba kerülnek, a kliens profile állományok az
618 aktuális könyvtárba. Linuxon ehhez szükséges a -DLINUX_PROFILE fordítási
621 3.8) Miért kapok "Sorry, too many clients" (Túl sok kliens)
622 hibát csatlakozásnál?
624 Növelned kell a postmaster egyidejûleg futtatott szerver processz szám
627 Az alapértelmezett korlát 32 processz. Ezt növelhetjed úgy, hogy
628 újrainditod a postmastert és -N opcioval meghatárotod az új értéket, vagy
629 modositod a postgresql.conf-ot.
631 Ne felejtsd el, hogy ha növeled a szerver processzek maximális számát,
632 akkor bufferek számát is növelned kell, legalább a processzek számának
633 kétszeresére. Nagy processz számokesetében valoszinüleg a Unix
634 konfigurácios paramétereken is növelni kell. Ellenörizd a SHMMAX (az
635 osztott memoria szegmensek maximális mérete), a SEMMNS és a SEMMNI (a
636 szemaforok maximális száma), az NPROC (a processzek maximális száma), a
637 MAXUPRC (felhasználonkénti maximális processz szám) és a NFILE és NINODE
638 (a megnzitott állománzok maximális száma) paramétereket. A PostgreSQL
639 azért korlátozza külön a processz számot, hogy a rendszeredet ne
640 terhelhesse meg túlságosan.
642 A PostgreSQL 6.5 verzioban a maximális szerver processz szám 64 volt és a
643 modositáshoz bele kellett irni a include/storage/sinvaladt.h állományba és
644 újra kellett forditani a servert.
646 3.9) Mi van pgsql_tmp könyvtárban?
648 Ez a könyvtár a lekérdezés végrehajto által létrehezott átmeneti
649 állományokat tartalmazza. Például ha egy rendezést kell végrehajtani egy
650 ORDER BY kifejezés miatt és a m?velet több memoriát vesz igénybe, mint
651 amennyit a -S paraméter megenged, akkor az átmeneti könyvtárban hoz létre
652 egy állományt a fennmarado adat tárolására.
654 Az átmeneti állományok többnyire törl?dnek, de meg is maradhat ha például
655 váratlan hibával leáll a szerver egy rendezés közben. Inditáskor és
656 leállitáskor ezeket az állományokat törli a postmaster.
658 3.10) Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál?
660 A PostgreSQL csapat csak aprobb változtatásokat hajt végre a kisebb
661 kiadások között, igy ha 7.2 verziorol állsz át 7.2.1 verziora, akkor nem
662 szükséges kidumplonod az adatbázist. A nagy kiadások esetében (például
663 verziorol 7.3-ra áttérésnél) változik a belsiõ adatstruktúrák és
664 adatállományok formátuma. Ezek a változások gyakran nagyon összetettek,
665 ezért inkáb nem tartunk fenn visszafelé kompatibilitást. A dump az adatot
666 általános formátumban irja ki, majd az új formátumban lehet azt
669 Azokban a kiadásokban, amelyek között az adat formátum nem változik, a
670 pg_upgrade program használhato dumpolás és helyreállitás nélkül.
672 ----------------------------------------------------------------------
676 4.1) Mi a különbség a bináris és a normál kurzorok között?
678 Nézd meg a DECLARE dokumentácioját.
680 4.2) Hogyan tudom select-elni a lekérdezés elsõ pár sorát?
682 Olvasd el a FETCH dokumentácioját, vagy használd a SELECT LIMIT-et.
684 Az egész lekérdezést végre kell hajtani, még akkor is, ha csak az elsõ pár
685 sort akarod megkapni. Gondolj arra, hogy a lekérdezésben lehet ORDER BY
686 is. Ha van olyan index, ami megfelel az ORDER BY kifejezésednek, a
687 PostgreSQL képes lehet az elsö néhány rekord visszaadására, vagy a teljes
688 lekérdezésnek le kell futnia, amig a kért rekordok le nem generálodnak.
690 4.3) Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben?
692 Elolvashatod a psql forrás kodjában a pgsql/src/bin/psql/describe.c
693 állományban. Ez SQL parancsokat tartalmaz, amelyek azokat a kimeneteket
694 állitják elö, amiket a per jellel kezdödö parancsok adnak vissza.
696 4.4) Hogyan tudok eltávolítani egy oszlopot egy táblábol?
698 Ez a funkcionalitás a 7.3 verziotül kezdve érhetö el az ALTER TABLE DROP
699 COLUMN -nal. A régebbi vertiokban igy lehet végrehajtani:
703 LOCK TABLE old_table;
705 SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél
711 DROP TABLE old_table;
713 ALTER TABLE new_table RENAME TO old_table;
717 4.5) Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak?
721 * adatbázis: korlátlan (1 TB az általunk ismert lagnagyobb)
729 * a tábla sorainak száma: korlátlan
731 * a tábla oszlopainak száma: 250-1600 az oszlop nevektõl függöen
733 * A tábla indexeinek száma: korlátlan
735 Természetesen nem igazán korlátlan, de a tárterület, memoria és egyéb
736 külsö tényezök korlátozzák. A teljesitmény romolhat, ha ezek az értékek
739 A 16 TB-os legnagyobb tábla méret nem igényel nagy állomány támogatást. A
740 nagy táblák több 1 GB méretü állományba kerölnek, igy az állomány rendszer
741 korlátai nem lényegesek.
743 A maximális tábla méret és az oszlopok maximális oszlop szám növelhetö, ha
744 az alapértelmezett blokkméretet 32k-ra növeled.
746 4.6) Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány
749 A PostgreSQL akár a szöveg állomány helyigényének ötszörösét is
752 Képzelj el például, egy 100.000 soros szöveget, aminek minde sora egy
753 számbol és egy szövegbõl áll. Tegyük el, hogy átlagosan 20 byte hosszú
754 szövegek. Ez a szövegállomány körülbelül 2.8 MB helyet foglalna el. A
755 tábla ami a fenti adatszerkezetet eltárolná, körülbelül 6.4 MB-os lenne.
756 Ezt a következöképpen számolhatjuk ki:
760 24 byte: egy int mezö + egy szöveg mezö
764 ---------------------------------------
768 Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy 8192 / 64 = 128
769 rekord adatbázis oldalanként (lefelé kerekitve).
771 100000 rekord / 128 rekord oldalanként = 782 adat oldal
774 782 adatbázis oldal * 8192 byte olalanként = 6,406,144
777 Az indexek nem foglalnak túl sokat, de tartalmazzák az indexelt adatot,
778 igy ezek is lehetnek nagyok.
780 A NULL értékek bittérképben vannak tárolva, igy kevés helyet foglanak.
782 4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy
787 A psql-ben találsz számos '\' karakterrel kezdödö utasítást az ilyen
788 informáciok listázására. A '\?' segitségével tudot kilistázni ezeketa
789 parancsokat. Ezen kivül vannak rendszer táblák, amelyek nevei 'pg_'-vel
792 Probáld ki a pgsql/src/tutorial/syscat.source állományt is. Ez sok példát
793 tartalmaz az rendszertáblákon végrehajtott SELECT-ekröl.
795 4.8) A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért?
797 Az indexeket nem használja a szerver minden lekérdezésnél automatikusan.
798 Csak akkor használ indexet, ha a tábla mérete egy megadott also határ
799 felett van, és a lekérdezés csak a sorok egy kis részét érinti. Ez azért
800 van, mert a véletlen hozzáférés még mindig lassabb lehet mint az tábla
801 szekvenciális olvasása.
803 Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet használni,
804 léteznie kell egy statisztikának a táblárol. Ez a statisztikai adatok a
805 VAACUM ANALYZE vagy az egyszerû ANALYZE mûveletek során jönnek létre. A
806 statisztikai adatok felhasználásával az optimalizálo meg tudja határozni,
807 hogy hány sor van a táblában, és el tudja dönteni, hogy használjon-e
808 indexet. A statisztiaki adatgyüjtést idõnként végre kell hajtani, ahogy a
809 tábla adatai változnak.
811 Az indexeket normális esetben nem használja az ORDER BY vagy az OUTER
812 JOIN. A szekvenciális olvasás általában gyorsabb, mint az index keresés
813 egy nagy táblában. Bár a LIMIT az ORDER BY-val kombinálva használhat
814 indexet, mert a tábla csak kis része érintett. Bár a MIN és MAX SQL
815 funkciok sem használják az indexeket, ezeket az értékeket egy ORDER BY +
816 LIMIT lekérdezéssel is le lehet kérdezni:
822 ORDER BY col [ DESC ]
826 Amikor helyettesítõ jel operátorokat használsz, mint a LIKE kulcsszo vagy
827 a ~, az indexeket csak bizonyos körülmények között lehet használni:
829 A keresõ string kezdete a keresési minta elején kell hogy legyen. Például:
831 * A LIKE minták nem kezdõdhetnek % jellel.
832 * ~ (regexp) kifejezések nem kezdõdhetnek ^ jellel.
833 * A keresési kifejezés nem kezdõdhet karakter osztállyal.
834 * A case-insensitive keresés (ILIKE, ~*) nem használnak indexet ehelyett
835 funkcionális indexet használnak, amit a 4.12 pontban találhatsz.
836 * Az alapértelmezett C hellyel kell futtatni az initdb-t.
837 4.9) Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizálo
840 Olvasd el a dokumentácio EXPLAIN-rol szolo részét.
842 4.10) Mi az R-tree index?
844 Az R-tree index a térbeli adat indexelésére alkalmas. Egy hash index nem
845 képes tartomány keresésekre. A B-tree index csak egy dimenzion kezeli a
846 tartomány kereséseket. Például ha az indexet egy pont (point adattípus)
847 típusú mez.re építjük, gyorsabban kezeli az olyan jellegü lekérdezéseket,
848 mint egy adott körben
852 Az R-tree tervezési mintát eredetileg leíro szöveg: Guttman, A. "R-trees:
853 A Dynamic Index Structure for Spatial Searching." Proceedings of the 1984
854 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
856 Ezt olvashatod Stonebraker "Readings in Database Systems" c. könyvében.
858 A beépített R-tree kezelni tudják a sokszögeket (polygon adattípus) és a
859 dobozokat (box). Elméletileg, az R-tree kiterjeszthetõ további dimenziokra
860 is. Gyakorlatilag ezen dolgoznod kell egy kicsit, és még nincs
861 dokumentácionk arrol hogy az hogyan mûködik.
863 4.11) Mi a Genetic Query Optimizer?
865 A GEQO modul a lekérdezés optimalizácio sebességét növeli nagy mennyiségû
866 tábla összekapcsolása esetén. Lehetõvé teszi a nagy lekérdezések
867 végrehajtását nem teljes kereséssel.
869 4.12) Hogyan tudok regexp keresést és case-insensitive regexp keresést
870 használni? Hogyan tudok indexet használni case-insensitive kereséshez?
872 A ~ operátor hajt végre reguláris kifejezés (regexp) értelmezést, a ~*
873 ennek case-insensitive változata. A LIKE case-insensitive változata az
876 A case-insensitive egyenlõség mûveleteket általában igy hajtjuk végre:
882 WHERE lower(col) = 'abc';
884 Ez nem fog indexet használni, bár létrehozhatsz egy funkcio indexet:
886 CREATE INDEX tabindex ON tab (lower(col));
888 4.13) Hogyan tudom észlelni egy lekérdezésben, ha egy mezõ NULL?
890 Használd "IS NULL"-t és az "IS NOT NULL"-t.
892 4.14) Mi a különbség a különbözõ karaktertípusok között?
894 * "char" egy karakter hosszú string
895 * CHAR(n) bpchar üres hellyel a megadott n hosszúságig
896 * VARCHAR(n) varchar méret maximális hossz meghatározásával, a lefogllat
897 terület is változo hosszú lesz
898 * TEXT nincs meghatározott felso" korlát
899 * BYTEA változo hosszúságú byte-tömb
901 Látni fogod a belsõ elnevezésüket, ha tanulmányozod a rendszertáblákatés
904 Az utobbi négy a "varlena" típusok, ami a tárolásuk modjára utal: az elsõ
905 4 byte a lemezen a hosszúság, a többi az adat. A valodi méret tehát
906 nagyobb mint a deklarált hosszúság.Ezek azadatok tömöritve tárolodnak el,
907 igy kevesebb helyet foglalnek el az elöre számitottnál.
909 A CHAR(n) a legjobb megoldás, ha stabil hosszúságú stringet tárolsz. A
910 VARCHAR(n) jo arra az esetekre, ha a hosszúság változik, de van felsõ
911 korlátja. A TEXT típus korlátlan hosszúságú (1 GB-ig) szövegek tárolására
912 alklamas. A BYTEA bináris adatok tárolására van. A teljesitmény mutatoi
913 hasonloak ezenek a típusoknak.
915 4.15.1) Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt?
917 A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy szekvenciát és
918 egy indexet hoz létre az oszlopon. Például ez:
920 CREATE TABLE person (
930 CREATE SEQUENCE person_id_seq;
932 CREATE TABLE person (
934 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
940 CREATE UNIQUE INDEX person_id_key ON person ( id );
942 A szekvenciákkal kapcsolatban olvasd el a create_sequence man oldalt. A
943 sor OID-jét is használhatod egyedi azonositoként, bár ebben az esetben
944 figyelj a pg_gump használatánál a -o opciora (COPY WITH OIDS, másolás
945 OID-dal), hogy meg?rizd az értékeket.
947 4.15.2) Hogyan kaphatom meg egy SERIAL beszúrás értékét?
949 Egy megoldás erre az, ha a nextval() funkcioval megszerzed az értéket még
950 mielött beszúrnád az adatot a táblába. Erre itt láthatsz egy példát:
952 new_id = execute("SELECT nextval('person_id_seq')");
954 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise
957 Esetleg lekérdezheted a szekvencia állapotát a sor beszúrása után.
959 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
961 new_id = execute("SELECT currval('person_id_seq')");
963 Végül pedig, használhatod a visszaadott OID értéket is, bár ez a lehetõ
964 legkevésbé portolhato. Perl DBI-ben, Edmund Mergl DBD::Pg moduljában az
965 OID érték használhato a $sth->execute() után ($sth->{pg_oid_status}).
967 4.15.3) A currval() és a nextval() nem teremt holtpont veszélyes helyzetet
968 a felhasználok között?
970 Nem. A currval() funkcio a szerver processzed által adott értéket adja
971 vissza, nem pedig a többi szerver processz által adottat.
973 4.15.4) Miért nem használodnak fel újra a sequence számok tranzakcio abort
976 Miért vannak problémák a serial oszlopok számozásával?
978 A párhuzamosság fejlesztése érdekében a sorozat számokat kérésre adja ki a
979 szerver futo tranzakcioknak, és azokat nem zárja, amig a tranzakcio véget
980 nem ér. Ez jukakat okoz a számozásokban a visszaforditott tranzakciok
983 4.16) Mi a OID? Mi a TID?
985 Az OID a PostgreSQL egyedi sor azonositoja. Minden sor, ami létrejön a
986 szerveren, kap egy OID-t. Minden OID, amit az initdb alatt jön létre 16384
987 alatt van (lásd include/access/transam.h). Minden, felhasználo által
988 létrehozott OID legalább ennyi. Alapértelmezésben, az OID nem csak a
989 táblában vagy az adatbázisban egyedi, hanem a teljes PostgreSQL adatbázis
992 A PostgreSQL az OID-okat a belsö tábláiban használja a sorok táblák között
993 összekapcsolásához. Ezek az OID-k használhatoak a rekordok azonositására
994 is amikor táblákat csatol össze a szerver (JOIN). Az OID-ot használhatod
995 mezö típusként is, és indexelheted is.
997 Az OID érték egy központi területröl származik, amit minden szerver
998 processz használ. Ha az OID-ot valami másra szeretnéd cserélni:
1000 CREATE TABLE new_table(old_oid oid, mycol int);
1002 SELECT old_oid, mycol INTO new FROM old;
1004 COPY new TO '/tmp/pgtable';
1008 COPY new WITH OIDS FROM '/tmp/pgtable';
1010 Az OID 4 byte-os integer értékként tárolodik, igy 4 milliárdnál
1011 túlcsordul. Még soha senki nem jelezte hogy ez történt volna, és ezt a
1012 korlátot igyekszünk eltávolitani, még mielött bárki észrevenné.
1014 A TID a fizikai sorok blokk és offszet címmel valo azonositására szolgál.
1015 A TID változik minden rekord modositás és törlés alkalmával. Ezeket az
1016 indexek használják hogy a fizikai sort gyorsan megtalálják.
1018 4.17) Mi a PostgreSQL-ben használt kifejezések jelentése?
1020 Néhol a forrás kodban és a dokumnetácioban találhatoak kifejezések,
1021 amelyek általánosabb jelentéssel bírnak. Itt van néhány:
1023 * tábla (table), relácio (relation), osztály (class)
1024 * sor (row), rekord (record), tuple (nincs magyar jelentés)
1025 * oszlop (column), mezö (field), attributum (attribute)
1027 * helyettesit (replace), modosit (update)
1028 * hozzáfûz (append), beszúr (insert)
1029 * OID, sorozat érték (serial value)
1031 * range variable, tábla név, tábla alias
1032 Az általános adatbázis kifejezések összefoglaloját itt olvashato:
1034 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html
1036 4.18) Miért kapom ezt a hibát: "ERROR: Memory exhausted in
1039 Lehet hogy elfogyott a virtuális memoriád, vagy a kerneled erõforrás
1040 korlátai alacsonyak. Probáld ki ezt mielött elinditanád a postmastert:
1046 A shelltõl függõen ezek közül csak az egyik fut majd le, de a processzek
1047 adatszegmensét sokkal magasabbra állitja, ami talán elég lesz a lekérdezés
1048 végrehajtásához. Ez az utasítás a jelenlegi processzre (a shelled)
1049 érvényes, és minden általa létrehozott processzre. Ha problémád van az SQL
1050 klienssel, mert a szerver túl nagy adatot küld vissza, probáld meg e
1051 klienssel is ugyanezt.
1053 4.19) Hogyan tudhatom meg PostgreSQL, milyen verziot futtatok?
1055 A psql programban select version();
1057 4.20) Miért kapok "invalid large obj descriptor" hibát nagy objektumok
1060 A nagy objektumok kezelését egy tranzakcios blokkban helyezd el. (BEGIN és
1063 Jelenleg a PostgreSQL ezt a szabályt azzal teszi kötelezõvé, hogy a
1064 tranzakcio végén a nagy objektumokat lezárja, igy a tranzakcio után az
1065 elsõ mûvelet amit az objektumon végrahajtanál hibás lesz.
1067 Ha olyan programozási felületet használsz mint az ODBC vagy a JDBC akkor
1068 valoszinûleg ki kell kapcsolnod az auto-commit-ot.
1070 4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a
1073 Használd a CURRENT_TIMESTAMP -ot:
1075 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1077 4.22) Miért olyan lassúak az al-lekérdezéseim IN-nel?
1079 Jelenleg az al-lekérdezéseket a külsõ lekérdezéshez csatoljuk. Ha az
1080 allekérdezés csak kevés sort eredményez és a külsõ lekérdezés sokat, akkor
1081 az IN is gyors. Az EXISTS kulcsszo használatával gyorsithatod a
1088 WHERE col IN (SELECT subcol FROM subtab);
1090 EXISTS használatával:
1096 WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1098 Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell hogy
1099 legyen. Reméljük ezt a korlátot sikerül hamarosan legyõznünk.
1101 4.23) Hogyan tudok outer join-t végrehajtani?
1103 A PostgreSQL a szabványos SQL szintaktikát követi. Itt van két példa:
1107 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1113 FROM t1 LEFT OUTER JOIN t2 USING (col);
1115 Ezek az identikus lekérdezések összekapcsolják a t1.col és a t2.col
1116 mezõket, és a t1 bármelyik kapcsolatlan sorát is visszadják. A RIGHT JOIN
1117 a t2 kapcsolatlan sorait adta volna vissza, a FULL JOIN pedig a kapcsolt,
1118 és mindkét tábla kapcsolatlan sorait adja. Az OUTER kulcsszo opcionális, a
1119 LEFT, RIGHT és FULL JOIN szintaktikailag helyes. Az átlagos
1120 összekapcsolásokat INNER JOIN-nak nevezzük.
1122 Az elõzõ kiadásokban a OUTER JOIN lekérdezéseket UNION és NOT IN
1123 kulcsszavakkal lehetett szimulálni. Például a tab1 és a tab2
1126 SELECT tab1.col1, tab2.col2
1130 WHERE tab1.col1 = tab2.col1
1134 SELECT tab1.col1, NULL
1138 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1142 4.24) Hogyan tudok több adatbázison végrehajtani lekérdezést?
1144 Arra nincs lehetõség, hogy más adatbázisbol kérdezz le adatot.Mivel a
1145 PostgreSQL adatbázis specifikus rendszer táblákat töltbe, bizonytalan hogy
1146 egy adatbázisok közötti lekérdezésnek hogyankellene viselkednie.
1148 A contrib/dblink könyvtárban találsz egy megoldást erre, ami funkcio
1149 hivások segitségével mûködik. Persze, a kliens hozhat létreszimultán
1150 kapcsolatot több adatbázissal, és összefésülheti az eredményeket.
1152 4.25) Hogy tudok több soros vagy oszlopos eredményt visszaadni egy
1155 A PL/pgSQL tárolt eljárás nyelvvel refcursor használatával. Részletesen
1158 http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html
1160 4.26) Miért nem tudom megbizhatoan létrehozni és törölni az átmeneti
1161 táblákat a PL/pgSQL funkciokban?
1163 A PL/pgSQL cacheli a funkciok tartalmát, aminek az a szerencsétlen
1164 mellékhatása, hogy ha egy PL/pgSQL funkcio használ egy átmeneti táblát,
1165 ami késo"bb törlõdik majd ujra létrejön, akkor az újra lefuto funkcio nem
1166 fogja megtalálni a táblát, mert a cache változat a régi táblára tartalmaz
1167 mutatot. A megoldás erre az EXECUTE használata az átmeneti táblák
1168 kezelésére PL/pgSQL-ben. Ez a lekérdezés újrafordítását fogja elõidézni
1171 4.27) Milyen replikácios lehetõségek vannak?
1173 Bár a replikácio egyetlen terület, több technologia létezik replikáciora,
1174 természetesen mindnek meg vannak a maga elo"nyei és hátrányai.
1176 A master/slave replikácios megoldással a master adatbázison hajthatunk
1177 végre modosításokat, míg a slave adatbázisokon csak lekérdezéseket. A
1178 PostgreSQL legnépszeru"bb master/slave replikácios megoldása a Solny-I.
1180 Számos más master/slave replikácios lehetõség létezik.Egy Listát
1181 olvashatsz ezekrõl itt:
1183 http://gborg.PostgreSQL.org/genpage?replication_research
1185 A multi-master replikácio leheto"vé teszi több master adatbázis
1186 használatát, bár ez a technologia drasztikusan csökkenti az adatbázis
1187 teljesítményét a sok szinkornizácio miatt. A PGCluster a legelterjedtebb
1190 Egy többfelhasználos replikácios rendszer készül itt:
1192 http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
1194 4.28) Milyen kodolási lehetõségek vannak?
1196 * A contrib/pgcrypto tartlamaz számos SQL lekérdezésben használhato
1198 * A kliens-szerver kommunikácio rejtjelezésére a hostssl használhato.
1199 Ezt a pg_hba.conf-ben engedélyeztheted.
1200 * Az adatbázis felhsználok jelszavait tároláskor kodolja a rendszer.
1201 * Régebbi verziokban a PASSWORD_ENCRYPTION opcioval lehetett
1203 * A szerveren használhatsz kodolt fájrendszert.
1205 ----------------------------------------------------------------------
1207 A PostgreSQL kiterjesztése
1209 5.1) Írtam egy felhasználoi funkciot. Miért core dumpol az adatbázis
1212 Számos probléma lehet. Elöbb probáld ki a funkciodat egy különállo
1215 5.2) Hogyan lehet új adattípusokat és funkciokat hozzáadni a PostgreSQL
1218 Küldd el a kiegészítéseid a pgsql-hackers levelezési listára és a
1219 forráskodjaid végül a contrib-ban kötnek ki.
1221 5.3) Hogyan lehet olyan C funkciot írni, ami Tuple-t ad vissza?
1223 A 7.3 verziotol kezdve a PostgreSQL támogatja a táblázatokat viszzaado
1224 funkciokat C, PL/pgSQL és SQL nyelveken. Bõvebb dokumentáciot a Programozo
1225 kézikönyvben találsz. Egy C példa funkcio találhato a contrib/tablefunc
1228 5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris
1231 A Makefile-ok nem ismerik a include állományok megfelelõ függõségeit.
1232 Végre kell hajtanod egy make clean-t, majd újra egy make-t. Ha GCC-t
1233 használsz felhasználhatod a configure script --enable-depend opcioját, így
1234 a compiler maga fogja ellenõrizni a függõségeket.