]> granicus.if.org Git - postgresql/blob - doc/src/FAQ/FAQ_hungarian.html
Update Hungarian FAQ, from Laszlo Hornyak
[postgresql] / doc / src / FAQ / FAQ_hungarian.html
1
2                 PostgreSQL GyIK
3    Utolsó módosítás dátuma: 2002 Okt 20.
4    Fordítás aktualizálása: 2003 január
5    
6    A GyIK karbantartója: Bruce Momjian (pgman@candle.pha.pa.us)
7    Fordító: Hornyák László (hornyakl.NOSPAM@inf.elte.hu)
8
9    A legfrissebb verzió itt érhetõ el (angol):
10    http://www.PostgreSQL.org/docs/faq-english.html.
11    
12    Legfrissebb magyar nyelvû verzió:
13    http://www.rootshell.be/~hornyakl/downloads/postgres_faq/
14    
15    Platform specifikus kérdések:
16    http://www.PostgreSQL.org/users-lounge/docs/faq.html.
17      _________________________________________________________________
18    
19                              Általános kérdések
20                                       
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?
36    
37                            Felhasználói kliens kérdések
38                                       
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?
44    
45                           Adminisztrációs kérdések
46                                       
47    3.1) Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre 
48    installálni?
49    3.2) AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core 
50    dump-ot kapok. Miért?
51    3.3) Amikor megpróbálom inditani a postmaster-t, "IpcMemoryCreate" hibákat 
52    kapok. Miért?
53    3.4) Amikor megpróbálom inditani a postmaster-t, "IpcSemaphoreCreate" hibákat
54    kapok. Miért?
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?
61    
62                            Mûködtetési kérdések
63                                       
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 
70    tárolásához?
71    4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy felhasználók
72    vannak definiálva?
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 
75    lekérdezésem?
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 
87    esetén?
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
92    AllocSetAlloc()"?
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 
95    kezelésénél?
96    4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett érétke a 
97    jelenlegi idõ?
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 
102    funkcióból?
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?
107    
108                             A PostgreSQL kiterjesztése
109                                       
110    5.1) Írtam egy felhasználói funkciót. Miért core dumpol az adatbázis amikor 
111    használom?
112    5.2) Hogyan lehet új adattípusokat és funkciókat hozzáadni a PostgreSQL 
113    disztribúcióhoz?
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 
117    újrafordítás után?
118      _________________________________________________________________
119    
120                                       
121                              Általános kérdések
122                                       
123     
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)
127    
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õ.
133    
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.
138    
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.
144    
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.
148    
149    1.2) Mik a PostgreSQL felhasználási feltételei?
150    
151    Az eredeti angol copyright szöveg: 
152    -------------------- 
153    PostgreSQL is subject to the following COPYRIGHT:
154    
155    PostgreSQL Data Base Management System
156    
157    Portions copyright (c) 1996-2002, PostgreSQL Global Development Group
158    Portions Copyright (c) 1994-6 Regents of the University of California
159    
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
164    copies.
165    
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.
171    
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.
178    
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.
182    --------------------
183    
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õ.
188    
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.
192    
193     1.3) Milyen UNIX operációs rendszereken fut PostgreSQL?
194    
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.
198     
199     1.4) Milyen nem UNIX operációs rendszerek elérhetõek?
200     
201    Kliens
202    
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.
209    
210    Szerver
211   
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.
216    
217    Natív MS Windows NT/2000/XP portok jelenleg fejlesztés alatt állnak.
218    
219     1.5) Hogyan tudok PostgreSQL-t szerezni?
220      
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.
224     
225     1.6) Hogyan kapok terméktámogatást?
226     
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:
231      subscribe
232      end
233     
234    Van egy hibákkal kapcsolatos levelezési lista is:
235    pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:
236     subscribe
237     end
238
239    A fejleszt?i levelezési lista:
240    pgsql-hackers-request@PostgreSQL.org a következõ tertalommal:
241     subscribe
242     end
243
244    Egyéb levelezési listák találhatóak a weboldalunkon:
245    
246      http://www.PostgreSQL.org
247      
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.
251    
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
254    
255     1.7) Melyik a legfrissebb kiadás?
256    
257    A legfrissebb PostgreSQL kiadás a 7.3.
258    
259    A tervek szerint minden negyedik hónapban van új kiadás. 
260    
261     1.8) Milyen dokumentáció áll rendelkezésre?
262     
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 
265    következõ címen:
266    http://www.PostgreSQL.org/users-lounge/docs/.
267    
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/.
275    
276    A psql parancs rendelkezik néhány \d utasítással, amellyekkel listázhatóak
277    az operátorok, a funkciók, stb.
278    
279    A website is tartalmaz további dokumentációkat.
280    
281     1.9) Hogyan találok információt hibákról vagy hiányzó funkcionalításról?
282     
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.
285    
286     1.10) Hogy tanuljam meg az SQL nyelvet?
287     
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.
294     
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.
297    
298    Sok felhasználónak tetszett a gyakorlati SQL könyv ("The Practical 
299    SQL Handbook"). 
300    
301     1.11) A PostgreSQL 2000. év kompatibilis?
302    
303    Igen, könnyedén kezeli a 2000 utáni és idõszámításunk elött 2000 elötti
304    dátumokat is. 
305    
306     1.12) Hogyan lehet csatlakozni a fejlesztõ csapathoz?
307    
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.
312    
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û.
317    
318     1.13) Hogyan küldjek hibajelentést?
319    
320    Látogass el a BugTool oldalra: 
321    http://www.PostgreSQL.org/bugs/bugs.php
322    Itt megtalálod követendõ utasításokat.
323    
324    Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb verzió vagy folt.
325    ftp://ftp.PostgreSQL.org/pub 
326    
327     1.14) Milyen a PostgreSQL más DBMS-ekkel összehasonlítva?
328    
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. 
331    
332    Képességek
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.
339           
340    Teljesítmény
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.
350
351    Megbízhatóság         
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.
358                 
359    Támogatás
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).
368           
369    Ár
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
372           nélkül,
373           
374     1.15) Hogyan tudom üzletileg segiteni a PostgreSQL-t?
375     
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.
379    
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. 
383    
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.
387    
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.
391    
392      _________________________________________________________________
393    
394                          Felhasználói kliens kérdések
395                                       
396     2.1) Van ODBC meghajtó PostgreSQL-hez?
397     
398     Két ODBC meghajtó érhetõ el: PsqlODBC és a OpenLink ODBC.
399     
400     A PsqlODBC a PostgreSQL kiadás része. További információ található a 
401     ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.
402    
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.
407    
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.
411    
412     Olvasd el az ODBC fejezetet is a programozók kézikönyvében!
413    
414     2.2) Milyen eszközök állnak rendelkezésre PostgreSQL Web fejlesztésekhez?
415    
416    Egy szép bemutató olvasható az adatbázissal támogatott web oldalanról
417    a http://www.webreview.com weboldalon.
418    
419    A web integrációhoz a PHP egy kiválló szoftver. Letölthetõ a 
420    http://www.php.net címrõl. 
421    
422    Komplexebb esetekre sokan használják a Perl felületet és a CGI.pm vagy a
423    mod_perl-t.
424    
425     2.3) Van a PostgreSQL-hez grafikus felhasználói felület? Riport 
426    generátor? Beágyazott lekérdezõ nyelv felület?
427     
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.
430    
431     A disztribúció tartalmazza az ecpg programot is, ami egy beágyazott SQL
432     lekérdezési felület C nyelvhez. 
433    
434     2.4) Milyen programozási nyelvekkel lehet elérni a PostgreSQL szervert?
435     
436     A következök:       
437      * C (libpq)
438      * C++ (libpq++)
439      * Embedded C (ecpg)
440      * Java (jdbc)
441      * Perl (DBD::Pg and perl5)
442      * ODBC (odbc)
443      * Python (PyGreSQL)
444      * TCL (libpgtcl)
445      * C Easy API (libpgeasy)
446      * PHP ('pg_' functions, Pear::DB)
447
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.
451
452      _________________________________________________________________
453    
454                           Adminisztrációs kérdések
455                                       
456     3.1) Hogyan tudom a PostgreSQL-t /usr/local/pgsql -tõl eltérõ helyre 
457     installálni?
458     
459     A configure script --prefix paraméterének használatával.
460    
461     3.2) AMikor elindítom a postmaster-t, egy "Bad System Call"-t vagy core 
462     dump-ot kapok.
463         Miért?
464    
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. 
468    
469     3.3) Amikor megpróbálom inditani a postmaster-t, "IpcMemoryCreate" hibákat 
470     kapok. Miért?
471    
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
478    szemaforokról.
479    
480     3.4) Amikor megpróbálom inditani a postmaster-t, "IpcSemaphoreCreate" 
481     hibákat kapok. Miért?
482    
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.
490    
491    A hibás szemaforok is adatázis lerobbanásához is vezethet nagy terhelés
492    esetén.
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.
496    
497     3.5) Hogyan tudom kontrollálni a más gépekrõl érkezõ kapcsolat kéréseket?
498     
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
503    kapcsolatok.
504     
505     3.6) Hogyan tudom nagyobb teljesítményre hangolni az adatbázisomat?
506    
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.
510    
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.
517    
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.
521    
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
526    buffer van.
527    
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
530    érték 512K.
531    
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
534    részletekért.
535    
536    
537     3.7) Milyen hibakeresõ lehetõségek érhetõek el?
538     
539    A PostgreSQL számos lehetöséggel rendelkezik ami értékes lehet a hiba-
540    keresésnél.
541    
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.
545    
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:
549    cd /usr/local/pgsql
550     ./bin/postmaster >server.log 2>&1 &
551    
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.
558
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 
566    nem jelentkeznek.
567    
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.
574       
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.
577    
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.
583    
584     3.8) Miért kapok "Sorry, too many clients" (Túl sok kliens) 
585     hibát csatlakozásnál?
586     
587    Növelned kell a postmaster egyidejûleg futtatott szerver processz szám 
588    korlátját.
589    
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.
593    
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 
603    meg túlságosan.
604    
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. 
608          
609     3.9) Mi van pgsql_tmp könyvtárban?
610    
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.
616    
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.
620       
621     3.10) Miért kell dumpolni és újratölteni PostgreSQL kiadás váltásánál?
622    
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
630    azt visszatöleni.
631    
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.
634    
635      _________________________________________________________________
636    
637                            Mûködtetési kérdések
638                                       
639     4.1) Mi a különbség a bináris és a normál kurzorok között?
640     
641    Nézd meg a DECLARE dokumentációját.
642    
643     4.2) Hogyan tudom select-elni a lekérdezés elsõ pár sorát?
644     
645    Olvasd el a FETCH dokumentációját, vagy használd a SELECT
646    LIMIT-et.
647    
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.
653       
654     4.3) Hogy tudom kilistázni a táblákat vagy más dolgokat a PostgreSQL-ben?
655    
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.
659     
660     4.4) Hogyan tudok eltávolítani egy oszlopot egy táblából?
661     
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:
664    BEGIN;
665     LOCK TABLE old_table;
666     SELECT ...  -- minden oszlopot, kivétel amit törölni szeretnél
667     INTO TABLE new_table
668     FROM old_table;
669     DROP TABLE old_table;
670     ALTER TABLE new_table RENAME TO old_table;
671    COMMIT;
672
673     4.5) Mi a maximális mérete egy sornak, egy táblának vagy egy adatbázisnak?
674     
675    A korlátok:
676     adatbázis:                                  korlátlan (1 TB az általunk ismert lagnagyobb)
677     tábla:                                              16 TB
678     rekord/sor                                  1.6TB
679     mezö                                                1 GB
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
683    
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
686    szokatlanul nagyok.
687    
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.
691       
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.
694
695     4.6) Mekkora adatbázis lemez terület szükséges egy tipikus szöveg állomány 
696     tárolásához?
697     
698    A PostgreSQL akár a szöveg állomány helyigénzének ötszörösét is elfoglalhaja.
699    
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:
705    36 byte: sor fejléc
706    24 byte: egy int mezö + egy szöveg mezö
707    4  byte: mutato
708    ---------------------------------------
709    64 byte soronkent.
710    
711    Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy
712    8192 / 64 = 128 rekord adatbázis oldalanként (lefelé kerekitve).
713    
714    100000 rekord / 128 rekord oldalanként = 782 adat oldal (felelé kerekitve).
715    
716    782 adatbázis oldal * 8192 byte olalanként = 6,406,144 byte (6.4 MB)
717    
718    Az indexek nem foglalnak túl sokat, de tartalmazzák az indexelt adatot,
719    igy ezek is lehetnek nagyok.
720    
721    A NULL értékek bittérképben vannak tárolva, igy kevés helyet foglanak.
722       
723    
724     4.7) Hogy tudhatom meg milyen táblák, indexek, adatbázisok vagy felhasználók
725    vannak definiálva?
726    
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_'
730    -vel kezdödnek.
731    
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.
734    
735    4.8) A lekérdezéseim lassúak, vagy nem használják az indexeket. Miért?
736    
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.
742    
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.
750    
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:
758     SELECT col
759     FROM tab
760     ORDER BY col [ DESC ]
761     LIMIT 1;
762    
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.
766        például:
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
772        találhatsz.
773      * Az alapértelmezett C hellyel kell futtatni az initdb-t.
774            
775     4.9) Hogy tudom ellenõrizni, hogy optimalizálta a lekérdezés optimalizáló
776     a lekérdezésem?
777     
778    Olvasd el a dokumentáció EXPLAIN-ról szóló részét.
779    
780     4.10) Mi az R-tree index?
781     
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
787     található pontok.
788     
789     Az R-tree tervezési mintát eredetileg leíró szöveg:
790        
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
793    Data, 45-57.
794     
795     Ezt olvashatod Stonebraker "Readings in Database Systems" c.
796     könyvében.
797    
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.
802
803     4.11) Mi a Genetic Query Optimizer?
804     
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.
808    
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?
811     
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
814     változata az ILIKE.
815     
816     A case-insensitive egyenlõség mûveleteket általában igy hajtjuk
817     végre:
818     SELECT *
819     FROM tab
820     WHERE lower(col) = 'abc';
821    
822     Ez nem fog indexet használni, bár létrehozhatsz egy funkció indexet:
823     CREATE INDEX tabindex ON tab (lower(col));
824
825     4.13) Hogyan tudom észlelni egy lekérdezésben, ha egy mezõ NULL?
826     
827    Használd "IS NULL"-t és az "IS NOT NULL"-t.
828    
829     4.14) Mi a különbség a különbözõ karaktertípusok között?
830     
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)
838
839    Látni fogod a belsõ elnevezésüket, ha tanulmányozod a rendszertáblákat
840    és néhány hibaüzenetet.
841    
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.
846    
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.
852    
853     4.15.1) Hogyan tudok létrehozni automatikusan növekvõ értékû mezõt?
854     
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 (
858         id   SERIAL,
859         name TEXT
860     );
861
862    ugyanezt jelenti:
863     CREATE SEQUENCE person_id_seq;
864     CREATE TABLE person (
865         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
866         name TEXT
867     );
868     CREATE UNIQUE INDEX person_id_key ON person ( id );
869    
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.
874    
875     4.15.2) Hogyan kaphatom meg egy SERIAL beszúrás értékét?
876     
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
879     egy példát:
880     new_id = execute("SELECT nextval('person_id_seq')");
881     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
882     
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')");
886
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}).
890
891     4.15.3) A currval() és a nextval() nem teremt holtpont veszélyes helyzetet 
892    a felhasználók között?
893     
894    Nem. A currval() funkció a szerver processzed által adott értéket adja 
895    vissza, nem pedig a többi szerver processz által adottat.
896    
897     4.15.4) Miért nem használódnak fel újra a sequence számok tranzakció 
898     abort esetén?
899     Miért vannak problémák a serial oszlopok számozásával?
900     
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.
905    
906     4.16) Mi a OID? Mi a TID?
907     
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.
914    
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.
919    
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';
925         DELETE FROM new;
926         COPY new WITH OIDS FROM '/tmp/pgtable';
927    
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é.
931    
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.
935       
936     4.17) Mi a PostgreSQL-ben használt kifejezések jelentése?
937     
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)
943      * retrieve, select
944      * helyettesit (replace), módosit (update)
945      * hozzáfûz (append), beszúr (insert)
946      * OID, sorozat érték (serial value)
947      * portal, cursor
948      * range variable, tábla név, tábla alias
949        
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
952    /glossary.html
953    
954     4.18) Miért kapom ezt a hibát: "ERROR: Memory exhausted in
955    AllocSetAlloc()"?
956     
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:
959     ulimit -d 262144
960     limit datasize 256m
961
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.
968
969     4.19) Hogyan tudhatom meg PostgreSQL, milyen verziót futtatok?
970     
971    A psql programban select version();
972    
973     4.20) Miért kapok "invalid large obj descriptor" hibát nagy objektumok 
974     kezelésénél?
975    
976    A nagy objektumok kezelését egy tranzakciós blokkban helyezd el.
977    (BEGIN és COMMIT között)
978    
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.
982    
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.
985    
986    
987     4.21) Hogy hozhatok létre olyan oszlopot, aminek alapértelmezett 
988     érétke a jelenlegi idõ?
989     
990    Használd a CURRENT_TIMESTAMP -ot:
991    CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
992
993     4.22) Miért olyan lassúak az al-lekérdezéseim IN-nel?
994    
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.
999     SELECT *
1000     FROM tab
1001     WHERE col IN (SELECT subcol FROM subtab);
1002
1003    EXISTS használatával:
1004     SELECT *
1005     FROM tab
1006     WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1007    
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.
1010    
1011     4.23) Hogyan tudok outer join-t végrehajtani?
1012     
1013     A PostgreSQL a szabványos SQL szintaktikát követi. Itt van két példa:
1014     SELECT *
1015     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1016
1017    vagy
1018     SELECT *
1019     FROM t1 LEFT OUTER JOIN t2 USING (col);
1020    
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.
1027    
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 
1030    összekapcsolása:
1031     SELECT tab1.col1, tab2.col2
1032     FROM tab1, tab2
1033     WHERE tab1.col1 = tab2.col1
1034     UNION ALL
1035     SELECT tab1.col1, NULL
1036     FROM tab1
1037     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1038     ORDER BY col1
1039
1040     4.24) Hogyan tudok több adatbázison végrehajtani lekérdezést?
1041    
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. 
1046    
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 
1050    eredményeket.
1051    
1052     4.25) Hogy tudok több soros vagy oszlopos eredményt visszaadni egy 
1053     funkcióból?
1054     
1055     A PL/pgSQL tárolt eljárás nyelvvel refcursor használatával. 
1056     Részletesen itt:
1057     http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html
1058    
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?
1061     
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.
1069     
1070     4.27) Milyen replikációs lehetõségek vannak?
1071     
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
1076    
1077    Egy többfelhasználós replikációs rendszer készül itt:
1078    http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
1079    
1080     4.28) Milyen kódolási lehetõségek vannak?
1081     
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
1087       bekapcsolni.
1088     - A szerveren használhatsz kódolt fájrendszert.
1089      _________________________________________________________________
1090    
1091                             A PostgreSQL kiterjesztése
1092                                       
1093    5.1) Írtam egy felhasználói funkciót. Miért core dumpol az adatbázis amikor
1094    használom?
1095    
1096    Számos probléma lehet. Elöbb probáld ki a funkciódat egy különálló
1097    alkalmazásban.
1098    
1099    5.2) Hogyan lehet új adattípusokat és funkciókat hozzáadni a PostgreSQL 
1100    disztribúcióhoz?
1101    
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.
1104    
1105    5.3) Hogyan lehet olyan C funkciót írni, ami Tuple-t ad vissza?
1106     
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.
1111         
1112    5.4) Megváltoztattam egy forrás állományt. Miért nem változik a bináris 
1113    újrafordítás után?
1114    
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.
1119    
1120