mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
1669 lines
78 KiB
HTML
1669 lines
78 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta content="text/html; charset=ISO-8859-1"
|
|
http-equiv="content-type">
|
|
<title>PostgreSQL GYIK</title>
|
|
</head>
|
|
<body>
|
|
<br>
|
|
<div style="text-align: center;">
|
|
<h1>PostgreSQL GyIK</h1>
|
|
<br>
|
|
</div>
|
|
<br>
|
|
<pre>Utolsó módosítás dátuma: 2005 május 9.</pre>
|
|
<pre>Fordítás aktualizálása: 2005 június</pre>
|
|
<pre><br>
|
|
A GyIK karbantartója: Bruce Momjian (<a
|
|
href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)</pre>
|
|
<pre>Fordító: Hornyák László<br>(<a
|
|
href="mailto:laszlo.hornyak.nospam@gmail.com">laszlo.hornyak.nospam@gmail.com</a>)</pre>
|
|
<pre><br>
|
|
A legfrissebb verzió itt érhetõ el (angol):</pre>
|
|
<pre><a href="http://www.PostgreSQL.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</a>.</pre>
|
|
<pre><br>
|
|
Legfrissebb magyar nyelvû verzió:</pre>
|
|
<pre><a href="http://hackers.forgeahead.hu/space/PostgreSQL/GYIK">http://hackers.forgeahead.hu/space/PostgreSQL/GYIK</a></pre>
|
|
<pre><br>
|
|
Platform specifikus kérdések:</pre>
|
|
<pre><a href="http://www.PostgreSQL.org/users-lounge/docs/faq.htm">http://www.PostgreSQL.org/users-lounge/docs/faq.htm</a>l.</pre>
|
|
<hr style="width: 100%; height: 2px;">
|
|
<div style="text-align: center;">
|
|
<h2>Általános kérdések</h2>
|
|
</div>
|
|
<a href="#1.1">1.1</a> Mi a PostgreSQL? Hogy kell kimondani?<br>
|
|
<a href="#1.2">1.2</a> Mik a PostgreSQL felhasználási
|
|
feltételei?<br>
|
|
<a href="#1.3">1.3</a> Milyen UNIX operációs
|
|
rendszereken fut PostgreSQL?<br>
|
|
<a href="#1.4">1.4</a> Milyen nem UNIX operációs
|
|
rendszerek elérhetõek?<br>
|
|
<a href="#1.5">1.5</a> Hogyan tudok PostgreSQL-t szerezni?<br>
|
|
<a href="#1.6">1.6</a> Hogyan kapok
|
|
terméktámogatást?<br>
|
|
<a href="#1.7">1.7</a> Melyik a legfrissebb kiadás?<br>
|
|
<a href="#1.8">1.8</a> Milyen dokumentáció áll
|
|
rendelkezésre?<br>
|
|
<a href="#1.9">1.9</a> Hogyan találok információt
|
|
hibákról vagy hiányzó
|
|
funkcionalításról?<br>
|
|
<a href="#1.10">1.10</a> Hogy tanuljam meg az SQL nyelvet?<br>
|
|
<a href="#1.11">1.11</a> A PostgreSQL 2000. év kompatibilis?<br>
|
|
<a href="#1.12">1.12</a> Hogyan lehet csatlakozni a fejlesztõ
|
|
csapathoz?<br>
|
|
<a href="#1.13">1.13</a> Hogyan küldjek hibajelentést?<br>
|
|
<a href="#1.14">1.14</a> Milyen a PostgreSQL más DBMS-ekkel
|
|
összehasonlítva?<br>
|
|
<a href="#1.15">1.15</a> Hogyan tudom üzletileg segiteni a
|
|
PostgreSQL-t?<br>
|
|
<a href="#1.16">1.16</a> Ki irányítja a PostgreSQL-t?<br>
|
|
<br>
|
|
<div style="text-align: center;">
|
|
<h2>Felhasználói kliens kérdések</h2>
|
|
</div>
|
|
<br>
|
|
<a href="#2.1">2.1</a> Van ODBC meghajtó PostgreSQL-hez?<br>
|
|
<a href="#2.2">2.2</a> Milyen eszközök állnak
|
|
rendelkezésre PostgreSQL Web fejlesztésekhez?<br>
|
|
<a href="#2.3">2.3</a> Van a PostgreSQL-hez grafikus
|
|
felhasználói felület ? Riport generátor?
|
|
Beágyazott lekérdezõ nyelv felület?<br>
|
|
<a href="#2.4">2.4</a> Milyen programozási nyelvekkel lehet
|
|
elérni a PostgreSQL szervert?<br>
|
|
<br>
|
|
<div style="text-align: center;">
|
|
<h2>Adminisztrációs kérdések</h2>
|
|
</div>
|
|
<br>
|
|
<a href="#3.1">3.1</a> Hogyan tudom a PostgreSQL-t /usr/local/pgsql
|
|
-tõl eltérõ helyre installálni?<br>
|
|
<a href="#3.2">3.2</a> AMikor elindítom a postmaster-t, egy
|
|
"Bad System Call"-t vagy core dump-ot kapok. Miért?<br>
|
|
<a href="#3.3">3.3</a> Amikor megpróbálom inditani a
|
|
postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?<br>
|
|
<a href="#3.4">3.4</a> Amikor megpróbálom inditani a
|
|
postmaster-t, "IpcSemaphoreCreate" hibákat kapok. Miért?<br>
|
|
<a href="#3.5">3.5</a> Hogyan tudom kontrollálni a más
|
|
gépekrõl érkezõ kapcsolat
|
|
kéréseket?<br>
|
|
<a href="#3.6">3.6</a> Hogyan tudom nagyobb
|
|
teljesítményre hangolni az
|
|
adatbázisomat?<br>
|
|
<a href="#3.7">3.7</a> Milyen hibakeresõ
|
|
lehetõségek
|
|
érhetõek el?<br>
|
|
<a href="#3.8">3.8</a> Miért kapok "Sorry, too many clients"
|
|
hibát
|
|
csatlakozásnál?<br>
|
|
<a href="#3.9">3.9</a> Mi van pgsql_tmp könyvtárban?<br>
|
|
<a href="#3.10">3.10</a> Miért kell dumpolni és
|
|
újratölteni
|
|
PostgreSQL kiadás váltásánál?<br>
|
|
<br>
|
|
<div style="text-align: center;">
|
|
<h2>Mûködtetési kérdések</h2>
|
|
</div>
|
|
<br>
|
|
<a href="#4.1">4.1</a> Mi a különbség a bináris
|
|
és a
|
|
normál kurzorok között?<br>
|
|
<a href="#4.2">4.2</a> Hogyan tudom select-elni a
|
|
lekérdezés elsõ
|
|
pár sorát?<br>
|
|
<a href="#4.3">4.3</a> Hogy tudom kilistázni a
|
|
táblákat vagy
|
|
más dolgokat a PostgreSQL-ben?<br>
|
|
<a href="#4.4">4.4</a> Hogyan tudok eltávolítani egy
|
|
oszlopot egy
|
|
táblából?<br>
|
|
<a href="#4.5">4.5</a> Mi a maximális mérete egy sornak,
|
|
egy
|
|
táblának vagy egy adatbázisnak?<br>
|
|
<a href="#4.6">4.6</a> Mekkora adatbázis lemez terület
|
|
szükséges
|
|
egy tipikus szöveg állomány
|
|
tárolásához?<br>
|
|
<a href="#4.7">4.7</a> Hogy tudhatom meg milyen táblák,
|
|
indexek,
|
|
adatbázisok vagy felhasználók vannak
|
|
definiálva?<br>
|
|
<a href="#4.8">4.8</a> A lekérdezéseim lassúak,
|
|
vagy nem
|
|
használják az indexeket. Miért?<br>
|
|
<a href="#4.9">4.9</a> Hogy tudom ellenõrizni, hogy
|
|
optimalizálta a
|
|
lekérdezés optimalizáló a
|
|
lekérdezésem?<br>
|
|
<a href="#4.10">4.10</a> Mi az R-tree index?<br>
|
|
<a href="#4.11">4.11</a> Mi a Genetic Query Optimizer?<br>
|
|
<a href="4.12">4.12</a> Hogyan tudok regexp keresést és
|
|
case-insensitive
|
|
regexp keresést használni? Hogyan tudok indexet
|
|
használni case-insensitive kereséshez?<br>
|
|
<a href="4.13">4.13</a> Hogyan tudom észlelni egy
|
|
lekérdezésban, ha
|
|
egy mezõ NULL?<br>
|
|
<a href="#4.14">4.14</a> Mi a különbség a
|
|
különbözõ
|
|
karaktertípusok között?<br>
|
|
<a href="#4.15.1">4.15.1</a> Hogyan tudok létrehozni
|
|
automatikusan
|
|
növekvõ értékû mezõt?<br>
|
|
<a href="#4.15.2">4.15.2</a> Hogyan kaphatom meg egy SERIAL
|
|
beszúrás
|
|
értékét?<br>
|
|
<a href="#4.15.3">4.15.3</a> A currval() és a nextval() nem
|
|
teremt holtpont
|
|
veszélyes helyzetet a felhasználók
|
|
között?<br>
|
|
<a href="#4.15.4">4.15.4</a> Miért nem
|
|
használódnak fel újra a
|
|
sequence számok tranzakció abort esetén?
|
|
Miért vannak problémák a serial oszlopok
|
|
számozásával?<br>
|
|
<a href="#4.16">4.16</a> Mi a OID? Mi a TID?<br>
|
|
<a href="#4.17">4.17</a> Mi a PostgreSQL-ben használt
|
|
kifejezések
|
|
jelentése?<br>
|
|
<a href="#4.18">4.18</a> Miért kapom ezt a hibát: "ERROR:
|
|
Memory exhausted
|
|
in AllocSetAlloc()"?<br>
|
|
<a href="#4.19">4.19</a> Hogyan tudhatom meg PostgreSQL, milyen
|
|
verziót futtatok?<br>
|
|
<a href="#4.20">4.20</a> Miért kapok "invalid large obj
|
|
descriptor" hibát
|
|
nagy objektumok kezelésénél?<br>
|
|
<a href="#4.21">4.21</a> Hogy hozhatok létre olyan oszlopot,
|
|
aminek
|
|
alapértelmezett érétke a jelenlegi idõ?<br>
|
|
<a href="#4.22">4.22</a> Miért olyan lassúak az
|
|
al-lekérdezéseim IN-nel?<br>
|
|
<a href="#4.23">4.23</a> Hogyan tudok outer join-t végrehajtani?<br>
|
|
<a href="#4.24">4.24</a> Hogyan tudok több adatbázison
|
|
végrehajtani
|
|
lekérdezést?<br>
|
|
<a href="#4.25">4.25</a> Hogy tudok több soros vagy oszlopos
|
|
eredményt
|
|
visszaadni egy funkcióból?<br>
|
|
<a href="#4.26">4.26</a> Miért nem tudom megbizhatóan
|
|
létrehozni
|
|
és törölni az átmeneti táblákat a
|
|
PL/pgSQL funkciókban?<br>
|
|
<a href="#4.27">4.27</a> Milyen replikációs
|
|
lehetõségek vannak?<br>
|
|
<a href="#4.28">4.28</a> Milyen kódolási
|
|
lehetõségek vannak?<br>
|
|
<br>
|
|
<div style="text-align: center;">
|
|
<h2>A PostgreSQL kiterjesztése</h2>
|
|
</div>
|
|
<br>
|
|
<a href="#5.1">5.1</a>) Írtam egy felhasználói
|
|
funkciót.
|
|
Miért core dumpol az adatbázis amikor használom?<br>
|
|
<a href="#5.1">5.2</a>) Hogyan lehet új adattípusokat
|
|
és
|
|
funkciókat hozzáadni a PostgreSQL
|
|
disztribúcióhoz?<br>
|
|
<a href="#5.3">5.3</a>) Hogyan lehet olyan C funkciót
|
|
írni, ami Tuple-t ad
|
|
vissza? (több soros több oszlopos eredmények)<br>
|
|
<a href="#5.4">5.4</a>) Megváltoztattam egy forrás
|
|
állományt.
|
|
Miért nem változik a bináris
|
|
újrafordítás után?<br>
|
|
<hr style="width: 100%; height: 2px;">
|
|
<h2 style="text-align: center;"> Általános
|
|
kérdések</h2>
|
|
<br>
|
|
<a name="1.1"></a><big style="text-decoration: underline;">1.1 Mi a
|
|
PostgreSQL? Hogy kell kimondani?</big><br>
|
|
<p>Így ejstd ki: Post-Gres-Q-L.</p>
|
|
<p>(Vagy talán inkább töltsd le a kis mp3-at a
|
|
PostgreSQL homepage-rõl)</p>
|
|
<p>A PostgreSQL a POSTGRES adatbázis management rendszer egy
|
|
kiegészítése, ami egy következõ
|
|
generációs DBMS kutatási prototípus.
|
|
Megtartja a POSTGRES adatmodellét és gazdag
|
|
adattípus választékát, de a PostQuel
|
|
lekérdezõ nyelvet az SQL egy kiterjesztett
|
|
verziójával helyettesíti. A PostgreSQL szabad
|
|
és a teljes forráskód
|
|
hozzáférhetõ.</p>
|
|
<p>A PostgreSQL fejlesztését egy csapat végzi,
|
|
amelynek minden tagja megtalálható a PostgreSQL
|
|
fejlesztõi levelezési listán. A jelenlegi
|
|
koordinátor
|
|
Marc G. Fournier (scrappyp@PostgreSQL.org). Ez a csapat felelõs
|
|
minden fejlesztésért. <>A PostgreSQL 1.01
|
|
alkotói
|
|
Andrew Yu és Jolly Chen voltak. Sokan járultak
|
|
hozzá portolással, teszteléssel,
|
|
hibakereséssel és fejlesztéssel. Az eredeti
|
|
Postgres kód, amibõl a PostgreSQL származik
|
|
Michael Stonebraker professzor irányítása alatt
|
|
fejlesztettek az egyetem programozói, tanulói és
|
|
végzett tanulói. <></p>
|
|
<p>A szoftver eredeti neve Postgres volt. Amikor SQL
|
|
funkcionalítással egészítették ki
|
|
1995-ben, a nevét Postgres95-re változtatták. 1996
|
|
végén kapta mai nevét. </p>
|
|
<br>
|
|
<a name="1.2"></a> <big style="text-decoration: underline;">1.2 Mik a
|
|
PostgreSQL felhasználási
|
|
feltételei?</big><br>
|
|
<br>
|
|
<pre> Az eredeti angol copyright szöveg: </pre>
|
|
<pre> -------------------- </pre>
|
|
<pre> PostgreSQL is subject to the following COPYRIGHT:</pre>
|
|
<pre><br> PostgreSQL Data Base Management System</pre>
|
|
<pre><br> Portions copyright (c) 1996-2002, PostgreSQL Global Development Group</pre>
|
|
<pre> Portions Copyright (c) 1994-6 Regents of the University of California</pre>
|
|
<pre><br> Permission to use, copy, modify, and distribute this software and its</pre>
|
|
<pre> documentation for any purpose, without fee, and without a written</pre>
|
|
<pre> agreement is hereby granted, provided that the above copyright notice</pre>
|
|
<pre> and this paragraph and the following two paragraphs appear in all</pre>
|
|
<pre> copies.</pre>
|
|
<pre><br> IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY</pre>
|
|
<pre> FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,</pre>
|
|
<pre> INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND</pre>
|
|
<pre> ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN</pre>
|
|
<pre> ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</pre>
|
|
<pre><br> THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,</pre>
|
|
<pre> INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF</pre>
|
|
<pre> MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE</pre>
|
|
<pre> PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF</pre>
|
|
<pre> CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,</pre>
|
|
<pre> UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</pre>
|
|
<pre> --------------------</pre>
|
|
<p><br>
|
|
</p>
|
|
Ami nagyon leegyszerûsítve azt jelenti, hogy jogod van
|
|
használni a szoftvert mindenféle
|
|
ellenszolgáltatás (pénz, stb) nélkül,
|
|
a forrás kódot módosíthatod, és
|
|
továbbadhatod, DE semmilyen, a szoftver
|
|
használatából következõ
|
|
károsodásért nem vállal garanciát a
|
|
fejlesztõ. A fenti a BSD licensz, egy klasszikus
|
|
nyilt-forráskód licensz. Nem tartalmaz
|
|
megszorításokat arra, hogy a forráskódot
|
|
hogyan használod fel.
|
|
<p> Kedveljük ezt a licensz formát és nem áll
|
|
szándékunkban megváltoztatni.</p>
|
|
<a name="1.3"></a> <big><span style="text-decoration: underline;">1.3
|
|
Milyen UNIX operációs
|
|
rendszereken fut PostgreSQL?</span></big><br>
|
|
<p>Általában minden UNIX-kompatibilis
|
|
operációs rendszer képes arra hogy futtassa a
|
|
PostgreSQL-t. Azokat a platformokat, amiken tesztelték a
|
|
kiadást
|
|
megtalálhatod a installációs
|
|
utasítások között. </p>
|
|
<a name="1.4"></a> <big><span style="text-decoration: underline;">1.4
|
|
Milyen nem UNIX operációs
|
|
rendszerek elérhetõek?</span></big><br>
|
|
<br>
|
|
<p>Kliens<br>
|
|
</p>
|
|
<p>A libpq C függvénykönyvtárat, a psql-t
|
|
és más felületeket le lehet úgy
|
|
fordítani, hogy fussanak MS Windows operációs
|
|
rendszereken. Ebben az esetben a kliens MS Windows-on fut és
|
|
TCP/IP segítségével kommunikál a Unixon
|
|
futó szerverrel. A "win32.mak" állomány a
|
|
kiadás része, ennek segítségével
|
|
lehet Win32 platformokra lefordítani a libpq-t és a
|
|
psql-t. A PostgreSQL ODBC kliensekkel is képes
|
|
kommunikálni.</p>
|
|
<p>
|
|
Szerver</p>
|
|
<>Az adatbázis szerver Cygwin
|
|
segítségével
|
|
fut Windows NT és Win2k rendszereken. További
|
|
információ
|
|
található a pgsql/doc/FAQ_MSWIN állományban
|
|
és a MS Windows FAQ-ban a következõ helyen: <a
|
|
href="http://www.PostgreSQL.org/docs/faq-mswin.html">http://www.PostgreSQL.org/docs/faq-mswin.html</a>.
|
|
Natív MS Windows NT/2000/XP portok jelenleg fejlesztés
|
|
alatt állnak.<br>
|
|
<br>
|
|
<a name="1.5"></a> <big style="text-decoration: underline;">1.5 Hogyan
|
|
tudok PostgreSQL-t szerezni?</big><br>
|
|
<p>Az elsõdleges anonim ftp oldal: <a
|
|
href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a>. </p>
|
|
<p>A tükör oldalak listája megtalálható
|
|
a
|
|
fõ weboldalunkon.</p>
|
|
<a name="1.6"></a> <big style="text-decoration: underline;">1.6 Hogyan
|
|
kapok
|
|
terméktámogatást?</big><br>
|
|
<br>
|
|
<p>Az elsõdleges lista a <a
|
|
href="mailto:pgsql-general@postgresql.org">pgsql-general@postgresql.org</a>.
|
|
Ez
|
|
használható a PostgreSQL-lel kapcsolatos
|
|
párbeszédekre. Ha fel
|
|
szeretnél íratkozni, küldj egy levelet a
|
|
következõ tartalommal (nem
|
|
tárggyal) a<a
|
|
href="mailto:%20pgsql-general-request@postgresql.org">
|
|
pgsql-general-request@postgresql.org</a> címre:</p>
|
|
<pre>
|
|
subscribe</pre>
|
|
<pre>
|
|
end </pre>
|
|
<br>
|
|
Van egy hibákkal kapcsolatos levelezési lista is:
|
|
pgsql-bugs-request@PostgreSQL.org a következõ tartalommal:<br>
|
|
<br>
|
|
<pre>
|
|
subscribe</pre>
|
|
<pre>
|
|
end
|
|
</pre>
|
|
<p>A fejlesztői levelezési lista:<a
|
|
href="mailto:pgsql-hackers-request@PostgreSQL.org">
|
|
pgsql-hackers-request@PostgreSQL.org</a> a következõ
|
|
tartalommal:</p>
|
|
<pre>
|
|
subscribe</pre>
|
|
<pre>
|
|
end</pre>
|
|
<br>
|
|
Egyéb levelezési listák
|
|
találhatóak
|
|
a weboldalunkon: <a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a>
|
|
<p>Van egy IRC csatorna is <a href="irc://irc.freenode.net/#postgresql">#PostgreSQL</a>
|
|
néven ahol felteheted
|
|
kérédseid. A következõ unix paranccsal
|
|
csatlakozhatsz:
|
|
</p>
|
|
<p>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</p>
|
|
<p>
|
|
A kereskedelmi terméktámogatást
|
|
nyújtó cégek listája elérhetö
|
|
itt:<a
|
|
href="http://www.PostgreSQL.org/users-lounge/commercial-support.html">
|
|
http://www.PostgreSQL.org/users-lounge/commercial-support.html</a><br>
|
|
</p>
|
|
<p>Magyar nyelvű levelezési lista nincs, de ha tudok segiteni a
|
|
fenit e-mail cimemen elérhető vagyok.</p>
|
|
<a name="1.7"></a> <big style="text-decoration: underline;">1.7 Melyik
|
|
a legfrissebb kiadás?</big><br>
|
|
<p>A legfrissebb PostgreSQL kiadás a 8.0.</p>
|
|
<p>A tervek szerint minden évben lesz egy nagyobb
|
|
fejlesztéseket tartalmazó kiadás, míg a
|
|
kisebb fejlesztéseket néhány havonta adjuk ki.<br>
|
|
</p>
|
|
<a name="1.8"></a> <big style="text-decoration: underline;">1.8 Milyen
|
|
dokumentáció áll
|
|
rendelkezésre?</big><br>
|
|
<p>Számos kézikönyv, man oldalak és kis teszt
|
|
példák találhatóak a kiadásban a
|
|
doc/ könyvtár alatt. Az interneten is olvashatod a
|
|
dokumentációt a következõ címen:</p>
|
|
<p><a href="http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</a>.</p>
|
|
<p>Két PostgreSQL könyv érhetõ el az
|
|
interneten
|
|
a <a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a>
|
|
és a <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>
|
|
címeken. A megvásárolható könyvek
|
|
listája itt
|
|
található: <a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a>.
|
|
A PostgreSQL-lel kapcsolatos technikai jellegû cikkek
|
|
gyûjteménye: <a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a>.</p>
|
|
<p>A psql parancs rendelkezik néhány \d
|
|
utasítással, amellyekkel listázhatóak az
|
|
operátorok, a funkciók, stb.</p>
|
|
<p>A website is tartalmaz további dokumentációkat.</p>
|
|
<a name="1.9"></a> <big style="text-decoration: underline;">1.9 Hogyan
|
|
találok információt
|
|
hibákról vagy hiányzó
|
|
funkcionalításról?</big><br>
|
|
<p>A PostgreSQLaz SQL-92 szabvány egy
|
|
kiegészítése. Nézd meg a TODO
|
|
listákat ha érdekelnek az ismert hibák.</p>
|
|
<a name="1.10"></a> <big style="text-decoration: underline;">1.10 Hogy
|
|
tanuljam meg az SQL nyelvet?</big><br>
|
|
<br>
|
|
<p>A PostgreSQL könyv a
|
|
<a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a>
|
|
címen tartalmaz SQL
|
|
alapokat. Elérhetõ egy
|
|
másik SQL könyv is a <a
|
|
href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a>
|
|
címen. Egy szép
|
|
oktató anyag található a
|
|
<a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a>,
|
|
a
|
|
<a
|
|
href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</a>
|
|
és a <a href="http://sqlcourse.com">http://sqlcourse.com</a>
|
|
oldalakon.
|
|
</p>
|
|
<p>Egy másik lehetõség a "Tanítsd magad 21
|
|
nap
|
|
alatt SQL-re, második kiadás" a
|
|
<a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>.</p>
|
|
<p>
|
|
Sok felhasználónak tetszett a gyakorlati SQL könyv
|
|
("The Practical SQL Handbook"). </p>
|
|
<br>
|
|
<a name="1.11"></a> <big style="text-decoration: underline;">1.11 A
|
|
PostgreSQL 2000. év kompatibilis?</big><br>
|
|
<br>
|
|
<p>Igen, könnyedén kezeli a 2000 utáni és
|
|
idõszámításunk elött 2000 elötti
|
|
dátumokat is. </p>
|
|
<br>
|
|
<a name="1.12"></a> <big style="text-decoration: underline;">1.12
|
|
Hogyan lehet csatlakozni a fejlesztõ
|
|
csapathoz?</big><br>
|
|
<br>
|
|
Elösször is töltsd le a forráskódot,
|
|
és olvasd el a PostgreSQL<br>
|
|
fejlesztõi dokumnetációt a web oldalunkon vagy a
|
|
kiadásban. Ezután<br>
|
|
íratkozz fel a pgsql-hackers és a pgsql-patches
|
|
levelezési listákra.<br>
|
|
Végül pedig küldj be magas szinvonalú
|
|
patch-eket a pgsql-patches listára.<br>
|
|
<br>
|
|
Van egy pár ember, akiknek commit privilégiumuk a
|
|
PostgreSQL CVS fán.<br>
|
|
Õk olyan sok magas szinvonalú patch-et küldtek be,
|
|
hogy az addigi <br>
|
|
csapat már nem tudta követni, és nem volt
|
|
kétségünk arról, hogy a<br>
|
|
patch-ek amiket õk küldenek jó
|
|
minõségû.<br>
|
|
<br>
|
|
<a name="1.13"></a> <big style="text-decoration: underline;">1.13
|
|
Hogyan küldjek hibajelentést?</big><br>
|
|
<br>
|
|
Látogass el a BugTool oldalra: <br>
|
|
<a href="http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</a><br>
|
|
Itt megtalálod követendõ utasításokat.<br>
|
|
<br>
|
|
Ellenõrizd az ftp oldalunkon is, hogy nincs-e újabb
|
|
verzió vagy folt.<br>
|
|
<a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub </a><br>
|
|
<br>
|
|
<a name="1.14"></a><big style="text-decoration: underline;">1.14 Milyen
|
|
a PostgreSQL más DBMS-ekkel
|
|
összehasonlítva?</big><br>
|
|
<p>Számos nézõpontból lehet
|
|
vizsgálni
|
|
a
|
|
szoftvert: képességek, teljesítmény
|
|
megbízhatóság, támogatottság
|
|
és ár.</p>
|
|
<span style="text-decoration: underline;">Képességek:</span>
|
|
A PostgreSQL rendelkezik a nagy, kereskedelmi DBMS-ek
|
|
képességeivel: tranzakciók,
|
|
al-lekérdezések, triggerek,
|
|
nézetek, külsõ kulcsok, integrítás
|
|
és kifinoult zármechanizmusok.
|
|
Van néhány képessége, ami a kereskedelmi
|
|
adatbázisokból hiányzik, mint
|
|
például a felhasználó által
|
|
definiált típusok,
|
|
öröklõdés, szabályok és
|
|
verzió kontroll a zárolási viták
|
|
redukálásáért.
|
|
<p><span style="text-decoration: underline;">Teljesítmény:</span>
|
|
A PostgreSQL teljesítménye hasonlít a
|
|
kereskedelmi
|
|
és más nyílt adatbázis
|
|
szerverekéhez. Lehet bizonyos esetekben
|
|
lassabb, másokban gyorsabb. A MySQL nevû tanuló
|
|
RDBMS például gyorsabban hajt végre insert/update
|
|
mûveleteket, mivel a tranzakciókat
|
|
elsumákolja. Persze a MySQL nem rendelkezik a
|
|
képességek
|
|
részben felsoroltak nagy részével. Mi a
|
|
megbízhatóságra
|
|
és a képességekre építünk,
|
|
bár a teljesítmény is nõ minden
|
|
kiadással. Van
|
|
egy érdekes oldal a MySQL és a PostgreSQL
|
|
összehasonlításával a
|
|
<a href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html
|
|
</a>címen.
|
|
</p>
|
|
<p><span style="text-decoration: underline;">Megbízhatóság:</span>
|
|
Tudjuk hogy ha egy DBMS nem megbízható, akkor
|
|
teljesen
|
|
haszontalan. Igyekszünk jól tesztelt, stabil kódot
|
|
kiadni, amiben
|
|
a lehetõ legkevesebb hiba van. Minden kiadás
|
|
elött eltellik
|
|
legalább 1 hónap béta teszt, és a
|
|
kiadási
|
|
történet is azt mutatja, hogy stabil kódot adunk ki,
|
|
ami készen áll a
|
|
produktív felhasználásra. Úgy gondoljuk,
|
|
felülmúlunk más
|
|
adatbázis szoftvereket ezen a téren.
|
|
</p>
|
|
<p></p>
|
|
<p><span style="text-decoration: underline;">Támogatás:</span>
|
|
A levelezési listáink kapcsolatot teremtenek a
|
|
fejlesztõk és felhasználók
|
|
csoportjával , akik
|
|
segítenek a problémák megoldásában.
|
|
Bár nem tudjuk garantálni
|
|
hogy ki tudjuk javítani a hibát, más, kereskedelmi
|
|
adatbázis cégek sem tudják. A fejlesztõ
|
|
csoport közvetlen elérési
|
|
lehetõsége, a közösség, a
|
|
dokumentáció és a forráskód
|
|
gyakran támogatást biztosít, mint más
|
|
adatbázisoknál. Van kereskedelmi, alkalmi
|
|
támogatás azoknak, akiknek szüksége van
|
|
rá (lásd: 1.6).
|
|
</p>
|
|
<p></p>
|
|
<p><span style="text-decoration: underline;">Ár:</span> A
|
|
PostgreSQL szabad bármilyen
|
|
felhasználásra,
|
|
akár kereskedelmire is. A termékhez hozzáadhatod a
|
|
saját
|
|
forráskódjaidat korlátozás
|
|
nélkül.</p>
|
|
<a name="1.15"></a> <big style="text-decoration: underline;">1.15
|
|
Hogyan tudom üzletileg segiteni a
|
|
PostgreSQL-t?</big><br>
|
|
<p>A PostgreSQL elsõ osztályú
|
|
infrastruktúrával rendelkezik, amit 1996-ban
|
|
indítottunk el. Mindent Marc Fourniernek
|
|
köszönhetünk, aki létrehozta és
|
|
karbantartja a rendszert.
|
|
</p>
|
|
<p>A minõségi infrastruktúra nagyon fontos egy
|
|
nyilt
|
|
forrású szoftver esetében. Megvéd az olyan
|
|
fennakadásoktól,
|
|
amelyek komoly késéseket okoznak a
|
|
fejlesztésekben. Természetesen ez az
|
|
infrastruktúra nem olcsó.
|
|
Számos havi és állandó kiadásunk
|
|
van. Ha a cégednek van pénze, amivel
|
|
támogatná erõfeszítéseinket,
|
|
kérlek látogass el a <a
|
|
href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</a>
|
|
oldalra.</p>
|
|
<p>
|
|
Bár a weboldal "PostgreSQL, Inc"-ként
|
|
említi, a
|
|
hozzájárulások kizárólag a
|
|
PostgreSQL fejlesztésre értendóek, és nem
|
|
egy meghatározott cégnek. Ha jobban tetszik,
|
|
küldhetsz csekket is a kapcsolati címek
|
|
bármelyikére.</p>
|
|
<p><big style="text-decoration: underline;"><a name="1.16"></a>1.16 Ki
|
|
irányítja a PostgreSQL-t?<br>
|
|
</big></p>
|
|
<p><big style="text-decoration: underline;"><small><span
|
|
style="text-decoration: underline;"></span></small></big><big><small>Ha
|
|
központi bizottságot, ellenörző céget keresel a
|
|
PostgreSQL mögött, add fel, nincs ilyesmi. Létezik egy
|
|
mag és CVS commiter csoport, de ez inkáb adminisztrativ
|
|
mint ellenörző célú. A projectet fejlesztők
|
|
és felhasználók közössége
|
|
irányítja, amihez bárki csatlakozhat.
|
|
Csupán annyit kell tenned hogy felíratkozol a
|
|
levelezőlistékra és részt veszel a
|
|
beszélgetésekben.</small></big><big
|
|
style="text-decoration: underline;"><small><span
|
|
style="text-decoration: underline;"></span></small></big></p>
|
|
<p></p>
|
|
<hr style="width: 100%; height: 2px;">
|
|
<h2 style="text-align: center;">Felhasználói kliens
|
|
kérdések</h2>
|
|
<br>
|
|
<a name="2.1"></a> <big style="text-decoration: underline;">2.1 Van
|
|
ODBC meghajtó PostgreSQL-hez?</big><br>
|
|
<p>Két ODBC meghajtó érhetõ el: PsqlODBC
|
|
és a OpenLink ODBC.</p>
|
|
<p>A PsqlODBC a PostgreSQL kiadás része. További
|
|
információ található a
|
|
ftp://ftp.PostgreSQL.org/pub/odbc/ oldalon.</p>
|
|
<p>Az OpenLink ODBC-t a <a href="http://www.openlinksw.com">http://www.openlinksw.com</a>
|
|
címrõl
|
|
töltheted le. Ez az õ szabványos ODBC kliens
|
|
szoftverükkel
|
|
mûködik, így minden</p>
|
|
<p>általuk támogatott platformon (Win, Mac, Unix, VMS)
|
|
elérhetõ lesz a PostgreSQL szerver.</p>
|
|
<p>Talán olyan vevõknek fogják eladni, akik
|
|
kereskedelmi minõségû terméket
|
|
szeretnének kapni, de a freeware verzió mindig
|
|
elérhetõ lesz. Kérdéseidet a
|
|
termékkel kapcsolatban a postgres95@openlink.co.uk
|
|
címen teheted fel.</p>
|
|
<p>Olvasd el az ODBC fejezetet is a programozók
|
|
kézikönyvében!</p>
|
|
<p><a name="2.2"></a><big style="text-decoration: underline;">2.2
|
|
Milyen
|
|
eszközök állnak
|
|
rendelkezésre PostgreSQL Web fejlesztésekhez?</big></p>
|
|
<p>Egy szép bemutató olvasható az
|
|
adatbázissal
|
|
támogatott web oldalanról a http://www.webreview.com
|
|
weboldalon.</p>
|
|
<p>A web integrációhoz a PHP egy kiválló
|
|
szoftver. Letölthetõ a <a href="http://www.php.net">http://www.php.net</a>
|
|
címrõl. </p>
|
|
<p>Komplexebb esetekre sokan használják a Perl
|
|
felületet és a CGI.pm vagy a mod_perl-t.</p>
|
|
<p><a name="2.3"></a><big style="text-decoration: underline;">2.3 Van a
|
|
PostgreSQL-hez grafikus
|
|
felhasználói felület?</big></p>
|
|
<p>Van egy szép PgAccess nevû grafikus
|
|
felületünk,
|
|
ami riport generátorként is használható. A
|
|
weboldalát megtalálod a
|
|
<a href="http://www.pgaccess.org/">http://www.pgaccess.org/</a>
|
|
címen.</p>
|
|
<p>A <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a>
|
|
oldalon találhatsz egy pontos és részltes
|
|
listát.<br>
|
|
</p>
|
|
<p><a name="2.4"></a><big style="text-decoration: underline;">2.4
|
|
Milyen
|
|
programozási nyelvekkel lehet
|
|
elérni a PostgreSQL szervert?</big></p>
|
|
<p>A következök: </p>
|
|
<ul>
|
|
<li>C (libpq)</li>
|
|
<li>C++ (libpq++)</li>
|
|
<li>Embedded C (ecpg)</li>
|
|
<li>Java (jdbc)</li>
|
|
<li>Perl (DBD::Pg and perl5)</li>
|
|
<li>ODBC (odbc)</li>
|
|
<li>Python (PyGreSQL)</li>
|
|
<li>TCL (libpgtcl)</li>
|
|
<li>C Easy API (libpgeasy)</li>
|
|
<li>PHP ('pg_' functions, Pear::DB)</li>
|
|
</ul>
|
|
<br>
|
|
További programozási felületek
|
|
érhetõek el a <br>
|
|
<a href="http://www.PostgreSQL.org/interfaces.html">
|
|
http://www.PostgreSQL.org/interfaces.html</a> és a<br>
|
|
<a href="http://gborg.PostgreSQL.org"> http://gborg.PostgreSQL.org</a>
|
|
oldalakon.<br>
|
|
<br>
|
|
<hr style="width: 100%; height: 2px;">
|
|
<h2 style="text-align: center;">Adminisztrációs
|
|
kérdések</h2>
|
|
<br>
|
|
<a name="3.1"></a> <big><span style="text-decoration: underline;">3.1
|
|
Hogyan tudom a PostgreSQL-t /usr/local/pgsql
|
|
-tõl eltérõ helyre installálni?</span></big><br>
|
|
<p>A configure script --prefix paraméterének
|
|
használatával.</p>
|
|
<a name="3.2"></a> <big style="text-decoration: underline;">3.2 AMikor
|
|
elindítom a postmaster-t, egy
|
|
"Bad System Call"-t vagy core dump-ot kapok. Miért?</big><br>
|
|
<p>Számos probléma lehet, de legelösször
|
|
ellenõrizd le, hogy a kerneled System V
|
|
kiegészítésekkel rendelkezik-e. A
|
|
PostgreSQL használja a kernel osztott memória és
|
|
szemafor API-ját. </p>
|
|
<p><a name="3.3"></a><big style="text-decoration: underline;">3.3
|
|
Amikor
|
|
megpróbálom inditani a
|
|
postmaster-t, "IpcMemoryCreate" hibákat kapok. Miért?</big></p>
|
|
<p>
|
|
Vagy nincs megfelelõen konfigurálva a kerneled osztott
|
|
memória támogatása vagy meg kell
|
|
nagyobbítanod a maximális osztott
|
|
memória méretet.</p>
|
|
<p>A pontos méret szükséglet függ az
|
|
architektúrádtól és attól hogy
|
|
hány buffert és processzt konfigurálsz a
|
|
postmasternek.
|
|
Legalább 1 MB területre szükséged van. A
|
|
PostgreSQL
|
|
Adminisztráció kézikönyvben olvashatsz
|
|
részletesebb információkat az osztott
|
|
memóriáról és a szemaforokról.</p>
|
|
<a name="3.4"></a><big style="text-decoration: underline;">3.4) Amikor
|
|
megpróbálom inditani a
|
|
postmaster-t, "IpcSemaphoreCreate" <br>
|
|
hibákat kapok. Miért?</big><br>
|
|
<p>Ha a hibaüzenet ez: " IpcSemaphoreCreate: semget failed (No
|
|
space left on device)", akkor a kerneled konfigurációja
|
|
nem
|
|
tesz lehetõvé elegendõ szemafort. A PostgreSQL
|
|
szerver processzenként 1
|
|
szemafort igényel. Egy átmeneti megoldás lehet az
|
|
hogy a
|
|
postmastert kevesebb maximális processz számmal inditod
|
|
el. Használd a
|
|
-D paramétert. Egy sokkal megfelelõbb megoldás az
|
|
ha növeled a
|
|
kerneled SEMMNS és SEMMNI paramétereit.</p>
|
|
<p>A hibás szemaforok is adatázis
|
|
lerobbanásához is vezethet nagy terhelés
|
|
esetén.Ha a hibaüzenet valami más, lehet hogy nincs
|
|
szemaforok
|
|
támogatás</p>
|
|
<p>forditva a kerneledbe. Olvasd el a PostgreSQL
|
|
adminisztrátorok kézikönyvében az osztott
|
|
memóriáról és a szemaforokról
|
|
szóló fejezetet.</p>
|
|
<p><a name="3.5"></a><big style="text-decoration: underline;">3.5)
|
|
Hogyan tudom kontrollálni a más
|
|
gépekrõl érkezõ kapcsolat
|
|
kéréseket?</big></p>
|
|
<p>Alapértelmezésben a PostgreSQL a helyi kapcsolatokat
|
|
Unix
|
|
socketekkel valósítja meg. Más gépek nem
|
|
lesznek
|
|
képesek csatlakozni, ha nem engedélyezed azt -i
|
|
opcióval a postmasternek, és
|
|
nem állítod be host a alapú
|
|
azonosítást a pg_hba.conf
|
|
állományban. Ezzel válnak lehetõvé a
|
|
TCP/IP kapcsolatok.</p>
|
|
<p><a name="3.6"></a><big style="text-decoration: underline;">3.6)
|
|
Hogyan tudom nagyobb
|
|
teljesítményre hangolni az adatbázisomat?</big></p>
|
|
<p>Az indexelés feltétlenül gyorsítja a
|
|
lekérdezéseket. Az EXPLAIN parancs lehetõvé
|
|
teszi hogy lásd, hogy a
|
|
PostgreSQL miként interpretálja a
|
|
lekérdezést és melyik indexet használja.</p>
|
|
<p>Ha sok INSERT mûveletet hajtassz végre, csináld
|
|
nagy kötegekben a COPY paranccsal. Ez sokkal gyorsabb mint az
|
|
egyedi INSERT parancsok.
|
|
Másodszor: Azok a mûveletek, amelyek nincsenek
|
|
tranzakció blokkon
|
|
belül, azok saját tranzakciót indítanak. Sok
|
|
mûveletet érdemes
|
|
egy tranzakción belül végrehajtani. Ez
|
|
csökkenti a tranzakció
|
|
kezelés többletidejét. Az indexeket javasolt a nagy
|
|
adatváltozások elött
|
|
eltávolítani, majd újra létrehozni.</p>
|
|
<p>Számos teljesítmény javító
|
|
lehetõség van. Kikapcsolhatod az fsync() mûveletet
|
|
a postmaster -o -F opciókval való
|
|
indításakor. Így nem fog az amugy lassú
|
|
fsync() függvény
|
|
meghívódni minden tranzakció végén.</p>
|
|
<p>Használhatod a postmaster -B opcióját is az
|
|
osztott memória szegmens méretének
|
|
növeléséhez. Ha az
|
|
értéket túl magasra állítod, lehet
|
|
hogy a postmaster nem indul el, mert túllépted az
|
|
operációs rendszer által megengedett
|
|
méretet. Minden buffer 8K méretû
|
|
és alapértelmezésban 64 buffer van.</p>
|
|
<p>A -S opcióval növelheted a szerver átmeneti
|
|
rendezésekre fenntartott memória területét.
|
|
Az értéket
|
|
kilobyteban add meg. Az alapértelmezett érték
|
|
512K. </p>
|
|
<p>Használhatod a CLUSTER utasítást is, hogy a
|
|
táblákat egy indexnek megfelelõen
|
|
csoportosítsd. Olvasd el a CLUSTER
|
|
kézikönyv oldalt további részletekért.<br>
|
|
</p>
|
|
<p>Hardver kiválasztásában segíthet: <a
|
|
href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a>
|
|
és <a href="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>.<br>
|
|
</p>
|
|
<p>A postgresql.conf beállitásaival kapcsolatos
|
|
tudnivalók: <a
|
|
href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a>
|
|
és <a
|
|
href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.</p>
|
|
<p></p>
|
|
<p><a name="3.7"></a> <big style="text-decoration: underline;">3.7)
|
|
Milyen hibakeresõ
|
|
lehetõségek érhetõek el?</big></p>
|
|
<p>A PostgreSQL számos lehetöséggel rendelkezik ami
|
|
értékes lehet a hibakeresésnél.</p>
|
|
Elösször is, futtathatod a configure scriptet
|
|
--enable-cassert opcióval, sok assert()
|
|
funkcióhivás ellenörzi
|
|
a program futását és megállitja ha valami
|
|
vératlan hiba történik.<br>
|
|
<p>Mind a postmaster és a postgres számos hibakeresö
|
|
lehetüséggel rendelkezik. Mindig amikor elinditod a
|
|
postmastert, gyözödj meg
|
|
róla, hogy a kimenetet log állományba
|
|
küldöd. Igy:</p>
|
|
<p>cd /usr/local/pgsql</p>
|
|
<p>./bin/postmaster >server.log 2>&1 &</p>
|
|
<p>Ez egy server.log állományt hoz létre a
|
|
felsö
|
|
PostgreSQL könyvtárban. Ez az állomány
|
|
tartlamaz majd számos hasznos
|
|
információt a szerverrel kapcsolatos
|
|
problémákról és
|
|
hibákról. A postmaster -d opciójával lehet
|
|
részletesebb hibakeresö információt kapni. A
|
|
-d opcióhoz meg kell határozni egy hiba szintet.
|
|
Vigyázz, a magas
|
|
hibakeresö szint nagy log állományt okozhat.</p>
|
|
<p>Ha a postmaster nem fut, akkor futtathatod a postgres szervert
|
|
parancssorból is, és az SQL kifejezést
|
|
közvetlenül ennek adhatod át. Ez csak
|
|
hibakeresés esetében javasolt. Az új sor a
|
|
kifejezés végét jelenti, nem a pontosvesszö.
|
|
Ha hibakeresö opciókkal
|
|
forditottad a szervert, használhatsz egy debuggert is hogy
|
|
lásd hogy mi
|
|
történik. Mivel igy a szervert nem a postmaster inditotta,
|
|
nem
|
|
többfelhasználós környezetként fut, igy
|
|
a zárolási és a szerverek
|
|
közötti kommunikációs hiba jelenségek
|
|
nem jelentkeznek.</p>
|
|
<p>Ha már fut a postmaster, indits egy psql-t, és
|
|
nézd meg a szerver processz PID-jét! Egy debuggert
|
|
használhatsz a processzhez
|
|
csatlakozáshoz. Beállithatsz töréspontokat
|
|
és elindithatsz
|
|
lekérdezéseket. Ha a postgres inditásban keresel
|
|
hibát, a PGOPTIONS környezeti
|
|
változót állitsd be "-W n" értékre.
|
|
Ez n másodperc várakozást
|
|
idéz elö, igy tudsz csatlakozni a processzhez, el tdsz
|
|
hejezni töréspontokat, majd
|
|
folytathatod a indítást.</p>
|
|
<p>A postgres program -s, -A és -t opciói is nagyon
|
|
hasznosak lehetnek hibakeresésnél és
|
|
teljesítmény
|
|
mérésnél.</p>
|
|
<p>Profiling lehtöséggel is fordithatod a szervert, hogy
|
|
lásd melyik funkciók foglalják el a futási
|
|
idõt. A
|
|
szerver profile állományai a pgsql/data/base/dbname
|
|
könzvtárba kerülnek, a kliens
|
|
profile állományok az aktuális
|
|
könyvtárba.
|
|
Linuxon ehhez szükséges a -DLINUX_PROFILE
|
|
fordítási direktiva.</p>
|
|
<a name="3.8"></a> <big style="text-decoration: underline;">3.8)
|
|
Miért kapok "Sorry, too many clients"
|
|
(Túl sok kliens) <br>
|
|
hibát csatlakozásnál?</big><br>
|
|
<p>Növelned kell a postmaster egyidejûleg futtatott szerver
|
|
processz szám korlátját.</p>
|
|
<p>Az alapértelmezett korlát 32 processz. Ezt
|
|
növelhetjed úgy, hogy újrainditod a postmastert
|
|
és -N opcióval
|
|
meghatárotod az új értéket, vagy
|
|
módositod a postgresql.conf-ot.</p>
|
|
<p>Ne felejtsd el, hogy ha növeled a szerver processzek
|
|
maximális számát, akkor bufferek
|
|
számát is növelned kell,
|
|
legalább a processzek számának
|
|
kétszeresére. Nagy processz számokesetében
|
|
valószinüleg a Unix konfigurációs
|
|
paramétereken is növelni kell.
|
|
Ellenörizd a SHMMAX (az osztott memória szegmensek
|
|
maximális mérete),
|
|
a SEMMNS és a SEMMNI (a szemaforok maximális
|
|
száma), az NPROC (a processzek
|
|
maximális száma), a MAXUPRC
|
|
(felhasználónkénti maximális
|
|
processz szám) és a NFILE és NINODE (a megnzitott
|
|
állománzok maximális száma)
|
|
paramétereket. A PostgreSQL azért korlátozza
|
|
külön a processz
|
|
számot, hogy a rendszeredet ne terhelhesse meg
|
|
túlságosan.</p>
|
|
<p>A PostgreSQL 6.5 verzióban a maximális szerver
|
|
processz
|
|
szám 64 volt és a módositáshoz bele kellett
|
|
irni a
|
|
include/storage/sinvaladt.h állományba és
|
|
újra kellett forditani a servert. <a name="3.9"></a></p>
|
|
<big style="text-decoration: underline;">3.9) Mi van pgsql_tmp
|
|
könyvtárban?</big><br>
|
|
<p>Ez a könyvtár a lekérdezés
|
|
végrehajtó által létrehezott
|
|
átmeneti állományokat tartalmazza.
|
|
Például ha egy
|
|
rendezést kell végrehajtani egy ORDER BY kifejezés
|
|
miatt és a m?velet több
|
|
memóriát vesz igénybe, mint amennyit a -S
|
|
paraméter megenged, akkor az
|
|
átmeneti könyvtárban hoz létre egy
|
|
állományt a
|
|
fennmaradó adat tárolására.</p>
|
|
<p>Az átmeneti állományok többnyire
|
|
törl?dnek, de meg is maradhat ha például
|
|
váratlan hibával leáll a
|
|
szerver egy rendezés közben. Inditáskor és
|
|
leállitáskor ezeket az
|
|
állományokat törli a postmaster.</p>
|
|
<a name="3.10"></a> <big style="text-decoration: underline;">3.10)
|
|
Miért kell dumpolni és
|
|
újratölteni PostgreSQL kiadás
|
|
váltásánál?</big><br>
|
|
<p>A PostgreSQL csapat csak apróbb
|
|
változtatásokat
|
|
hajt végre a kisebb kiadások között, igy ha 7.2
|
|
verzióról
|
|
állsz át 7.2.1 verzióra, akkor nem
|
|
szükséges kidumplonod az adatbázist. A nagy
|
|
kiadások esetében (például
|
|
verzióról 7.3-ra áttérésnél)
|
|
változik a belsiõ adatstruktúrák és
|
|
adatállományok formátuma. Ezek a
|
|
változások gyakran nagyon összetettek, ezért
|
|
inkáb nem tartunk fenn visszafelé
|
|
kompatibilitást. A dump az adatot általános
|
|
formátumban irja ki, majd az
|
|
új formátumban lehet azt visszatöleni.
|
|
</p>
|
|
Azokban a kiadásokban, amelyek között az adat
|
|
formátum nem változik, a pg_upgrade program
|
|
használható dumpolás
|
|
és helyreállitás nélkül.
|
|
<hr style="width: 100%; height: 2px;"><br>
|
|
<h2 style="text-align: center;"> Mûködtetési
|
|
kérdések</h2>
|
|
<br>
|
|
<a name="4.1"></a> <big style="text-decoration: underline;">4.1) Mi a
|
|
különbség a
|
|
bináris és a normál kurzorok között?</big><br>
|
|
<p>Nézd meg a DECLARE dokumentációját.</p>
|
|
<a name="4.2"></a> <big style="text-decoration: underline;">4.2)
|
|
Hogyan tudom select-elni a
|
|
lekérdezés elsõ pár sorát?</big><br>
|
|
<p>Olvasd el a FETCH dokumentációját, vagy
|
|
használd a SELECT LIMIT-et.</p>
|
|
<p>Az egész lekérdezést végre kell
|
|
hajtani,
|
|
még akkor is, ha csak az elsõ pár sort akarod
|
|
megkapni. Gondolj arra, hogy a
|
|
lekérdezésben lehet ORDER BY is. Ha van olyan index, ami
|
|
megfelel az ORDER BY kifejezésednek,
|
|
a PostgreSQL képes lehet az elsö néhány
|
|
rekord
|
|
visszaadására, vagy a teljes lekérdezésnek
|
|
le kell futnia, amig a kért rekordok
|
|
le nem generálódnak.
|
|
<a name="4.3"></a><big style="text-decoration: underline;"><br>
|
|
</big></p>
|
|
<p><big style="text-decoration: underline;">4.3) Hogy tudom
|
|
kilistázni a
|
|
táblákat vagy más dolgokat a PostgreSQL-ben?</big></p>
|
|
<p>Elolvashatod a psql forrás kódjában a
|
|
pgsql/src/bin/psql/describe.c állományban. Ez SQL
|
|
parancsokat tartalmaz, amelyek azokat
|
|
a kimeneteket állitják elö, amiket a per jellel
|
|
kezdödö
|
|
parancsok adnak vissza.</p>
|
|
<a name="4.4"></a> <big style="text-decoration: underline;">4.4)
|
|
Hogyan tudok eltávolítani egy
|
|
oszlopot egy táblából?</big><br>
|
|
<br>
|
|
<p>Ez a funkcionalitás a 7.3 verziótül kezdve
|
|
érhetö el az ALTER TABLE DROP COLUMN -nal. A régebbi
|
|
vertiókban igy lehet
|
|
végrehajtani:</p>
|
|
<pre>BEGIN;</pre>
|
|
<pre>LOCK TABLE old_table;</pre>
|
|
<pre>SELECT ... -- minden oszlopot, kivétel amit törölni szeretnél<br></pre>
|
|
<pre>INTO TABLE new_table</pre>
|
|
<pre>FROM old_table;</pre>
|
|
<pre>DROP TABLE old_table;</pre>
|
|
<pre>ALTER TABLE new_table RENAME TO old_table;</pre>
|
|
<pre>COMMIT;</pre>
|
|
<pre><br></pre>
|
|
<h4><a name="4.5"></a><big
|
|
style="text-decoration: underline; font-weight: normal;">4.5) Mi a
|
|
maximális mérete egy sornak,
|
|
egy táblának vagy egy adatbázisnak?</big></h4>
|
|
<br>
|
|
<p>A korlátok:</p>
|
|
<ul>
|
|
<li>
|
|
<p>adatbázis: korlátlan (1 TB az általunk
|
|
ismert
|
|
lagnagyobb)</p>
|
|
</li>
|
|
<li>
|
|
<p>tábla: 16 TB</p>
|
|
</li>
|
|
<li>
|
|
<p>rekord/sor 1.6TB</p>
|
|
</li>
|
|
<li>
|
|
<p>mezö 1 GB</p>
|
|
</li>
|
|
<li>
|
|
<p>a tábla sorainak száma: korlátlan</p>
|
|
</li>
|
|
<li>
|
|
<p>a tábla oszlopainak száma: 250-1600 az oszlop
|
|
nevektõl függöen</p>
|
|
</li>
|
|
<li>
|
|
<p>A tábla indexeinek száma: korlátlan</p>
|
|
</li>
|
|
</ul>
|
|
<p>Természetesen nem igazán korlátlan, de a
|
|
tárterület, memória és egyéb
|
|
külsö tényezök korlátozzák. A
|
|
teljesitmény romolhat, ha ezek az értékek
|
|
szokatlanul nagyok.</p>
|
|
<p>A 16 TB-os legnagyobb tábla méret nem igényel
|
|
nagy
|
|
állomány támogatást. A nagy
|
|
táblák több 1 GB méretü
|
|
állományba kerölnek, igy az állomány
|
|
rendszer korlátai nem lényegesek.</p>
|
|
<p>A maximális tábla méret és az oszlopok
|
|
maximális oszlop szám növelhetö, ha az
|
|
alapértelmezett blokkméretet 32k-ra növeled.</p>
|
|
<a name="4.6"></a> <big style="text-decoration: underline;">4.6)
|
|
Mekkora adatbázis lemez terület
|
|
szükséges egy tipikus szöveg állomány <br>
|
|
tárolásához?</big><br>
|
|
<p>A PostgreSQL akár a szöveg állomány
|
|
helyigényének ötszörösét is
|
|
elfoglalhatja.</p>
|
|
<p>Képzelj el például, egy 100.000 soros
|
|
szöveget, aminek minde sora egy számból és
|
|
egy szövegbõl
|
|
áll. Tegyük el, hogy átlagosan 20 byte hosszú
|
|
szövegek. Ez a szövegállomány
|
|
körülbelül 2.8 MB helyet foglalna el. A tábla ami
|
|
a fenti adatszerkezetet eltárolná,
|
|
körülbelül 6.4 MB-os lenne. Ezt a
|
|
következöképpen számolhatjuk ki:</p>
|
|
<p>36 byte: sor fejléc</p>
|
|
<pre>24 byte: egy int mezö + egy szöveg mezö</pre>
|
|
<pre>4 byte: mutato</pre>
|
|
<pre>---------------------------------------</pre>
|
|
<pre>64 byte soronkent.</pre>
|
|
<p>Az adat oldal mérete a PostgreSQL-ben 8192 byte, igy 8192 /
|
|
64 = 128 rekord adatbázis oldalanként
|
|
(lefelé kerekitve).</p>
|
|
<pre>100000 rekord / 128 rekord oldalanként = 782 adat oldal<br>(felelé kerekitve).</pre>
|
|
<pre>782 adatbázis oldal * 8192 byte olalanként = 6,406,144<br>byte (6.4 MB)</pre>
|
|
<p>Az indexek nem foglalnak túl sokat, de tartalmazzák az
|
|
indexelt adatot, igy ezek is lehetnek nagyok.</p>
|
|
<p>A NULL értékek bittérképben vannak
|
|
tárolva, igy kevés helyet foglanak.</p>
|
|
<p><a name="4.7"></a><big style="text-decoration: underline;">4.7) Hogy
|
|
tudhatom meg milyen táblák,
|
|
indexek, adatbázisok vagy felhasználók</big></p>
|
|
<big style="text-decoration: underline;">vannak definiálva?<br>
|
|
</big>
|
|
<p>A psql-ben találsz számos '\' karakterrel
|
|
kezdödö utasítást az ilyen
|
|
információk listázására. A '\?'
|
|
segitségével tudot kilistázni ezeketa parancsokat.
|
|
Ezen kivül vannak rendszer táblák,
|
|
amelyek nevei 'pg_'-vel kezdödnek.</p>
|
|
<p>Próbáld ki a pgsql/src/tutorial/syscat.source
|
|
állományt is. Ez sok példát tartalmaz az
|
|
rendszertáblákon
|
|
végrehajtott SELECT-ekröl.</p>
|
|
<p><a name="4.8"></a><big style="text-decoration: underline;">4.8) A
|
|
lekérdezéseim lassúak,
|
|
vagy nem használják az indexeket. Miért?</big></p>
|
|
<p><big style="text-decoration: underline;"></big></p>
|
|
<p>Az indexeket nem használja a szerver minden
|
|
lekérdezésnél automatikusan. Csak akkor
|
|
használ indexet, ha a tábla mérete egy
|
|
megadott alsó határ felett van, és a
|
|
lekérdezés csak a sorok egy kis
|
|
részét érinti. Ez azért van, mert a
|
|
véletlen hozzáférés még
|
|
mindig lassabb lehet mint az tábla szekvenciális
|
|
olvasása.</p>
|
|
<p>Hogy a PostgreSQL meg tudja határozni hogy kell-e indexet
|
|
használni, léteznie kell egy statisztikának a
|
|
tábláról. Ez a statisztikai adatok a VAACUM
|
|
ANALYZE vagy az egyszerû ANALYZE mûveletek
|
|
során jönnek létre. A statisztikai adatok
|
|
felhasználásával az optimalizáló meg
|
|
tudja határozni, hogy hány sor van a
|
|
táblában, és el tudja dönteni, hogy
|
|
használjon-e indexet. A statisztiaki
|
|
adatgyüjtést idõnként végre kell
|
|
hajtani, ahogy a tábla adatai változnak.</p>
|
|
<p>Az indexeket normális esetben nem használja az ORDER
|
|
BY
|
|
vagy az OUTER JOIN. A szekvenciális olvasás
|
|
általában gyorsabb, mint az index keresés egy nagy
|
|
táblában. Bár a LIMIT az ORDER BY-val
|
|
kombinálva használhat
|
|
indexet, mert a tábla csak kis része érintett.
|
|
Bár a MIN
|
|
és MAX SQL funkciók sem használják az
|
|
indexeket, ezeket az
|
|
értékeket egy ORDER BY + LIMIT
|
|
lekérdezéssel is le lehet kérdezni:</p>
|
|
<pre>SELECT col</pre>
|
|
<pre>FROM tab</pre>
|
|
<pre>ORDER BY col [ DESC ]</pre>
|
|
<pre>LIMIT 1;</pre>
|
|
<br>
|
|
<p>Amikor helyettesítõ jel operátorokat
|
|
használsz, mint a LIKE kulcsszó vagy a ~, az indexeket
|
|
csak bizonyos körülmények
|
|
között lehet használni:</p>
|
|
<p>A keresõ string kezdete a keresési minta elején
|
|
kell hogy legyen. Például:</p>
|
|
<ul>
|
|
<li>A LIKE minták nem kezdõdhetnek % jellel.</li>
|
|
<li> ~ (regexp) kifejezések nem kezdõdhetnek ^
|
|
jellel.</li>
|
|
<li>A keresési kifejezés nem kezdõdhet karakter
|
|
osztállyal.</li>
|
|
<li>A case-insensitive keresés (ILIKE, ~*) nem
|
|
használnak
|
|
indexet ehelyett funkcionális indexet használnak, amit a
|
|
4.12
|
|
pontban találhatsz.</li>
|
|
<li>Az alapértelmezett C hellyel kell futtatni az initdb-t.</li>
|
|
</ul>
|
|
<a name="4.9"></a> <big style="text-decoration: underline;">4.9) Hogy
|
|
tudom ellenõrizni, hogy
|
|
optimalizálta a lekérdezés
|
|
optimalizáló<br>
|
|
a lekérdezésem?<br>
|
|
</big>
|
|
<p>Olvasd el a dokumentáció EXPLAIN-ról
|
|
szóló részét.</p>
|
|
<p><a name="4.10"></a><big style="text-decoration: underline;">4.10) Mi
|
|
az R-tree index?</big></p>
|
|
<p>Az R-tree index a térbeli adat indexelésére
|
|
alkalmas. Egy hash index nem képes tartomány
|
|
keresésekre. A B-tree
|
|
index csak egy dimenzión kezeli a tartomány
|
|
kereséseket.
|
|
Például ha az indexet egy pont (point adattípus)
|
|
típusú mez.re
|
|
építjük, gyorsabban kezeli az olyan jellegü
|
|
lekérdezéseket, mint egy
|
|
adott körben</p>
|
|
<p>található pontok.</p>
|
|
<p>Az R-tree tervezési mintát eredetileg
|
|
leíró
|
|
szöveg: Guttman, A. "R-trees: A Dynamic Index Structure for
|
|
Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
|
|
Mgmt of Data, 45-57.</p>
|
|
<p>Ezt olvashatod Stonebraker "Readings in Database Systems" c.
|
|
könyvében.</p>
|
|
<p>A beépített R-tree kezelni tudják a
|
|
sokszögeket (polygon adattípus) és a dobozokat
|
|
(box). Elméletileg, az R-tree
|
|
kiterjeszthetõ további dimenziókra is.
|
|
Gyakorlatilag ezen dolgoznod kell egy kicsit,
|
|
és még nincs dokumentációnk arról
|
|
hogy az
|
|
hogyan mûködik.</p>
|
|
<p><a name="4.11"></a><big style="text-decoration: underline;">4.11) Mi
|
|
a Genetic Query Optimizer?</big></p>
|
|
<p><big style="text-decoration: underline;"></big></p>
|
|
<p>A GEQO modul a lekérdezés optimalizáció
|
|
sebességét növeli nagy mennyiségû
|
|
tábla összekapcsolása
|
|
esetén. Lehetõvé teszi a nagy
|
|
lekérdezések végrehajtását nem
|
|
teljes kereséssel.</p>
|
|
<p><a name="4.12"></a><big style="text-decoration: underline;">4.12)
|
|
Hogyan tudok regexp keresést és
|
|
case-insensitive regexp keresést </big><big
|
|
style="text-decoration: underline;">használni? Hogyan tudok
|
|
indexet használni
|
|
case-insensitive kereséshez?</big><br>
|
|
</p>
|
|
<p>A ~ operátor hajt végre reguláris
|
|
kifejezés
|
|
(regexp) értelmezést, a ~* ennek case-insensitive
|
|
változata. A LIKE case-insensitive változata az ILIKE.</p>
|
|
<p>A case-insensitive egyenlõség mûveleteket
|
|
általában igy hajtjuk végre:</p>
|
|
<p>SELECT *</p>
|
|
<pre>FROM tab</pre>
|
|
<pre>WHERE lower(col) = 'abc';</pre>
|
|
<p>Ez nem fog indexet használni, bár létrehozhatsz
|
|
egy funkció indexet:</p>
|
|
<pre>CREATE INDEX tabindex ON tab (lower(col));</pre>
|
|
<a name="4.13"></a> <big style="text-decoration: underline;">4.13)
|
|
Hogyan tudom észlelni egy
|
|
lekérdezésben, ha egy mezõ NULL?</big><br>
|
|
<p>Használd "IS NULL"-t és az "IS NOT NULL"-t.</p>
|
|
<p><a name="4.14"></a><big style="text-decoration: underline;">4.14) Mi
|
|
a különbség a
|
|
különbözõ karaktertípusok között?</big></p>
|
|
<ul>
|
|
<li>"char" egy karakter hosszú string</li>
|
|
<li>CHAR(n) bpchar üres hellyel a megadott n
|
|
hosszúságig</li>
|
|
<li>VARCHAR(n) varchar méret maximális hossz
|
|
meghatározásával, a lefogllat terület is
|
|
változó hosszú lesz</li>
|
|
<li>TEXT nincs meghatározott felső korlát</li>
|
|
<li>BYTEA változó hosszúságú
|
|
byte-tömb</li>
|
|
</ul>
|
|
<p>Látni fogod a belsõ elnevezésüket, ha
|
|
tanulmányozod a rendszertáblákatés
|
|
néhány hibaüzenetet.</p>
|
|
<p>Az utóbbi négy a "varlena" típusok, ami a
|
|
tárolásuk módjára utal: az elsõ 4
|
|
byte a lemezen a hosszúság, a többi
|
|
az adat. A valódi méret tehát nagyobb mint a
|
|
deklarált
|
|
hosszúság.Ezek azadatok tömöritve
|
|
tárolódnak el, igy kevesebb helyet foglalnek el az
|
|
elöre számitottnál.</p>
|
|
<p>A CHAR(n) a legjobb megoldás, ha stabil
|
|
hosszúságú stringet tárolsz. A VARCHAR(n)
|
|
jó arra az esetekre, ha a hosszúság
|
|
változik, de van felsõ korlátja. A TEXT
|
|
típus korlátlan
|
|
hosszúságú (1 GB-ig) szövegek
|
|
tárolására alklamas. A BYTEA bináris adatok
|
|
tárolására van. A teljesitmény
|
|
mutatói hasonlóak ezenek a
|
|
típusoknak.</p>
|
|
<p><a name="4.15.1"></a><big style="text-decoration: underline;">4.15.1)
|
|
Hogyan tudok létrehozni
|
|
automatikusan növekvõ értékû
|
|
mezõt?</big></p>
|
|
<br>
|
|
A PostgreSQL rendelkezik egy SERIAL adattípussal. Ez egy
|
|
szekvenciát és egy indexet hoz létre az oszlopon.
|
|
Például ez:<br>
|
|
<pre>CREATE TABLE person (</pre>
|
|
<pre>id SERIAL,</pre>
|
|
<pre>name TEXT</pre>
|
|
<pre>);</pre>
|
|
<p>ugyanezt jelenti:</p>
|
|
<pre>CREATE SEQUENCE person_id_seq;</pre>
|
|
<pre>CREATE TABLE person (</pre>
|
|
<pre>id INT4 NOT NULL DEFAULT nextval('person_id_seq'),</pre>
|
|
<pre>name TEXT</pre>
|
|
<pre>);</pre>
|
|
<pre>CREATE UNIQUE INDEX person_id_key ON person ( id );</pre>
|
|
<br>
|
|
<p>A szekvenciákkal kapcsolatban olvasd el a create_sequence man
|
|
oldalt. A sor OID-jét is használhatod egyedi
|
|
azonositóként, bár ebben az esetben figyelj a
|
|
pg_gump használatánál a
|
|
-o opcióra (COPY WITH OIDS, másolás OID-dal), hogy
|
|
meg?rizd az
|
|
értékeket.</p>
|
|
<p><a name="4.15.2"></a><big style="text-decoration: underline;">4.15.2)
|
|
Hogyan kaphatom meg egy SERIAL
|
|
beszúrás értékét?</big></p>
|
|
<p>Egy megoldás erre az, ha a nextval() funkcióval
|
|
megszerzed az értéket még mielött
|
|
beszúrnád
|
|
az adatot a táblába. Erre itt láthatsz egy
|
|
példát:</p>
|
|
<pre>new_id = execute("SELECT nextval('person_id_seq')");</pre>
|
|
<pre>execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise<br>Pascal')");</pre>
|
|
<p>
|
|
Esetleg lekérdezheted a szekvencia állapotát a sor
|
|
beszúrása után. </p>
|
|
<pre>execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");</pre>
|
|
<pre>new_id = execute("SELECT currval('person_id_seq')");</pre>
|
|
<p>
|
|
Végül pedig, használhatod a visszaadott OID
|
|
értéket is, bár ez a lehetõ
|
|
legkevésbé portolható. Perl DBI-ben, Edmund Mergl
|
|
DBD::Pg moduljában az OID érték
|
|
használható a
|
|
$sth->execute() után ($sth->{pg_oid_status}).</p>
|
|
<a name="4.15.3"></a> <big style="text-decoration: underline;">4.15.3)
|
|
A currval() és a nextval() nem
|
|
teremt holtpont veszélyes helyzetet a felhasználók
|
|
között?</big><br>
|
|
<p>Nem. A currval() funkció a szerver processzed által
|
|
adott
|
|
értéket adja vissza, nem pedig a többi szerver
|
|
processz által adottat.</p>
|
|
<big style="text-decoration: underline;"><a name="4.15.4"></a>4.15.4)
|
|
Miért nem használódnak fel újra a
|
|
sequence számok tranzakció abort esetén?</big><br>
|
|
<p>Miért vannak problémák a serial oszlopok
|
|
számozásával?</p>
|
|
<p>A párhuzamosság fejlesztése
|
|
érdekében a sorozat számokat kérésre
|
|
adja ki a szerver futó tranzakcióknak, és azokat
|
|
nem zárja, amig a tranzakció véget nem ér.
|
|
Ez jukakat okoz a
|
|
számozásokban a visszaforditott tranzakciók miatt.</p>
|
|
<p><a name="4.16"></a><big style="text-decoration: underline;"> 4.16)
|
|
Mi a
|
|
OID? Mi a TID?</big></p>
|
|
<p>Az OID a PostgreSQL egyedi sor azonositója. Minden sor, ami
|
|
létrejön a szerveren, kap egy OID-t. Minden OID, amit az
|
|
initdb alatt jön
|
|
létre 16384 alatt van (lásd include/access/transam.h).
|
|
Minden,
|
|
felhasználó által létrehozott OID
|
|
legalább ennyi.
|
|
Alapértelmezésben, az OID nem csak a
|
|
táblában vagy az adatbázisban egyedi,
|
|
hanem a teljes PostgreSQL adatbázis rendszerben.</p>
|
|
<p>A PostgreSQL az OID-okat a belsö tábláiban
|
|
használja a sorok táblák között
|
|
összekapcsolásához. Ezek az OID-k
|
|
használhatóak a rekordok azonositására is
|
|
amikor táblákat csatol
|
|
össze a szerver (JOIN). Az OID-ot használhatod mezö
|
|
típusként is,
|
|
és indexelheted is.</p>
|
|
<p>Az OID érték egy központi területröl
|
|
származik, amit minden szerver processz használ. Ha az
|
|
OID-ot valami másra
|
|
szeretnéd cserélni:</p>
|
|
<p>CREATE TABLE new_table(old_oid oid, mycol int);</p>
|
|
<pre>SELECT old_oid, mycol INTO new FROM old;</pre>
|
|
<pre>COPY new TO '/tmp/pgtable';</pre>
|
|
<pre>DELETE FROM new;</pre>
|
|
<pre>COPY new WITH OIDS FROM '/tmp/pgtable';</pre>
|
|
<br>
|
|
<p>Az OID 4 byte-os integer értékként
|
|
tárolódik, igy 4 milliárdnál
|
|
túlcsordul. Még soha senki nem jelezte hogy ez
|
|
történt volna,
|
|
és ezt a korlátot igyekszünk eltávolitani,
|
|
még mielött
|
|
bárki észrevenné.</p>
|
|
<p>A TID a fizikai sorok blokk és offszet címmel
|
|
való
|
|
azonositására szolgál. A TID változik
|
|
minden rekord módositás és
|
|
törlés alkalmával. Ezeket az indexek
|
|
használják hogy a fizikai sort gyorsan
|
|
megtalálják.</p>
|
|
<p><a name="4.17"></a><big style="text-decoration: underline;">4.17) Mi
|
|
a PostgreSQL-ben használt
|
|
kifejezések jelentése?</big></p>
|
|
<br>
|
|
<p>Néhol a forrás kódban és a
|
|
dokumnetációban találhatóak
|
|
kifejezések, amelyek általánosabb
|
|
jelentéssel bírnak.
|
|
Itt van néhány:</p>
|
|
<ul>
|
|
<li>tábla (table), reláció (relation),
|
|
osztály (class)</li>
|
|
<li>sor (row), rekord (record), tuple (nincs magyar jelentés)</li>
|
|
<li>oszlop (column), mezö (field), attributum (attribute)</li>
|
|
<li>retrieve, select</li>
|
|
<li>helyettesit (replace), módosit (update)</li>
|
|
<li>hozzáfûz (append), beszúr (insert)</li>
|
|
<li>OID, sorozat érték (serial value)</li>
|
|
<li>portal, cursor</li>
|
|
<li>range variable, tábla név, tábla alias</li>
|
|
</ul>
|
|
Az általános adatbázis kifejezések
|
|
összefoglalóját itt olvasható:
|
|
<p><a
|
|
href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary%0A/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</a></p>
|
|
<br>
|
|
<a name="4.18"></a> <big style="text-decoration: underline;">4.18)
|
|
Miért kapom ezt a hibát:
|
|
"ERROR: Memory exhausted in AllocSetAlloc()"?<br>
|
|
</big>
|
|
<p>Lehet hogy elfogyott a virtuális memóriád, vagy
|
|
a
|
|
kerneled erõforrás korlátai alacsonyak.
|
|
Próbáld ki ezt mielött
|
|
elinditanád a postmastert:</p>
|
|
<pre>ulimit -d 262144</pre>
|
|
<pre>limit datasize 256m</pre>
|
|
<p>A shelltõl függõen ezek közül csak az
|
|
egyik fut majd le, de a processzek adatszegmensét sokkal
|
|
magasabbra állitja, ami
|
|
talán elég lesz a lekérdezés
|
|
végrehajtásához. Ez az utasítás a
|
|
jelenlegi processzre (a shelled) érvényes, és
|
|
minden
|
|
általa létrehozott processzre. Ha problémád
|
|
van az SQL klienssel, mert a
|
|
szerver túl nagy adatot küld vissza, próbáld
|
|
meg e
|
|
klienssel is ugyanezt.</p>
|
|
<p><a name="4.19"></a><big style="text-decoration: underline;">4.19)
|
|
Hogyan tudhatom meg PostgreSQL, milyen
|
|
verziót futtatok?</big></p>
|
|
<p>A psql programban select version();</p>
|
|
<a name="4.20"></a> <big style="text-decoration: underline;">4.20)
|
|
Miért kapok "invalid large obj
|
|
descriptor" hibát nagy objektumok
|
|
kezelésénél?</big><br>
|
|
<p>A nagy objektumok kezelését egy tranzakciós
|
|
blokkban helyezd el. (BEGIN és COMMIT között)</p>
|
|
<p><br>
|
|
Jelenleg a PostgreSQL ezt a szabályt azzal teszi
|
|
kötelezõvé, hogy a tranzakció
|
|
végén a nagy objektumokat
|
|
lezárja, igy a tranzakció után az elsõ
|
|
mûvelet amit az objektumon
|
|
végrahajtanál hibás lesz.</p>
|
|
<p>Ha olyan programozási felületet használsz mint az
|
|
ODBC vagy a JDBC akkor valószinûleg ki kell kapcsolnod az
|
|
auto-commit-ot.</p>
|
|
<p><a name="4.21"></a><big style="text-decoration: underline;">4.21)
|
|
Hogy hozhatok létre olyan oszlopot,
|
|
aminek alapértelmezett </big><big
|
|
style="text-decoration: underline;">érétke a jelenlegi
|
|
idõ?</big><br>
|
|
</p>
|
|
<p>Használd a CURRENT_TIMESTAMP -ot:</p>
|
|
<pre>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );</pre>
|
|
<a name="4.22"></a> <big style="text-decoration: underline;">4.22)
|
|
Miért olyan lassúak az
|
|
al-lekérdezéseim IN-nel?</big><br>
|
|
<p>Jelenleg az al-lekérdezéseket a külsõ
|
|
lekérdezéshez csatoljuk. Ha az allekérdezés
|
|
csak kevés sort eredményez
|
|
és a külsõ lekérdezés sokat, akkor az
|
|
IN is gyors. Az EXISTS kulcsszó
|
|
használatával gyorsithatod a lekérdezéseket.</p>
|
|
<p>SELECT *</p>
|
|
<pre>FROM tab</pre>
|
|
<pre>WHERE col IN (SELECT subcol FROM subtab);</pre>
|
|
<br>
|
|
<p>EXISTS használatával:</p>
|
|
<pre>SELECT *</pre>
|
|
<pre>FROM tab</pre>
|
|
<pre>WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);</pre>
|
|
Ahhoz hogy ez gyorsan fusson le, a subcol indexelt oszlopnak kell hogy
|
|
legyen. Reméljük ezt a korlátot sikerül
|
|
hamarosan legyõznünk.
|
|
<p><a name="4.23"></a><big style="text-decoration: underline;">4.23)
|
|
Hogyan tudok outer join-t végrehajtani?</big></p>
|
|
<p>A PostgreSQL a szabványos SQL szintaktikát
|
|
követi.
|
|
Itt van két példa:</p>
|
|
<p>SELECT *</p>
|
|
<pre>FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);</pre>
|
|
<p>
|
|
vagy</p>
|
|
<pre>SELECT *</pre>
|
|
<pre>FROM t1 LEFT OUTER JOIN t2 USING (col);</pre>
|
|
<p>Ezek az identikus lekérdezések
|
|
összekapcsolják a t1.col és a t2.col mezõket,
|
|
és a t1 bármelyik kapcsolatlan
|
|
sorát is visszadják. A RIGHT JOIN a t2 kapcsolatlan
|
|
sorait adta volna vissza, a FULL JOIN pedig a kapcsolt, és
|
|
mindkét tábla kapcsolatlan sorait
|
|
adja. Az OUTER kulcsszó opcionális, a LEFT, RIGHT
|
|
és FULL JOIN
|
|
szintaktikailag helyes. Az átlagos
|
|
összekapcsolásokat INNER JOIN-nak
|
|
nevezzük.</p>
|
|
<p>Az elõzõ kiadásokban a OUTER JOIN
|
|
lekérdezéseket UNION és NOT IN kulcsszavakkal
|
|
lehetett szimulálni. Például a tab1
|
|
és a tab2 összekapcsolása:</p>
|
|
<pre><code>SELECT tab1.col1, tab2.col2</code></pre>
|
|
<pre><code>
|
|
FROM tab1, tab2</code></pre>
|
|
<pre><code>
|
|
WHERE tab1.col1 = tab2.col1</code></pre>
|
|
<pre><code>
|
|
UNION ALL</code></pre>
|
|
<pre><code>
|
|
SELECT tab1.col1, NULL</code></pre>
|
|
<pre><code>
|
|
FROM tab1</code></pre>
|
|
<pre><code>
|
|
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)</code></pre>
|
|
<pre><code>
|
|
ORDER BY col1</code></pre>
|
|
<pre><code></code></pre>
|
|
<code></code>
|
|
<a name="4.24"></a> <big style="text-decoration: underline;">4.24)
|
|
Hogyan tudok több adatbázison
|
|
végrehajtani lekérdezést?<br>
|
|
</big>
|
|
<p>Arra nincs lehetõség, hogy más
|
|
adatbázisból kérdezz le adatot.Mivel a PostgreSQL
|
|
adatbázis specifikus rendszer
|
|
táblákat töltbe, bizonytalan hogy egy
|
|
adatbázisok közötti
|
|
lekérdezésnek hogyankellene viselkednie. </p>
|
|
<p>A contrib/dblink könyvtárban találsz egy
|
|
megoldást erre, ami funkció hivások
|
|
segitségével
|
|
mûködik. Persze, a kliens hozhat
|
|
létreszimultán kapcsolatot több adatbázissal,
|
|
és
|
|
összefésülheti az eredményeket.</p>
|
|
<p><big style="text-decoration: underline;"><a name="4.25"></a>4.25)
|
|
Hogy tudok több soros vagy oszlopos
|
|
eredményt visszaadni egy funkcióból?</big><br>
|
|
</p>
|
|
<big style="text-decoration: underline;"></big>
|
|
<p>A PL/pgSQL tárolt eljárás nyelvvel refcursor
|
|
használatával. Részletesen itt:</p>
|
|
<p><a
|
|
href="http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html">http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html</a></p>
|
|
<a name="4.26"></a> <big style="text-decoration: underline;">4.26)
|
|
Miért nem tudom megbizhatóan
|
|
létrehozni és törölni az átmeneti
|
|
táblákat a PL/pgSQL funkciókban?</big><br>
|
|
<p>A PL/pgSQL cacheli a funkciók tartalmát, aminek az a
|
|
szerencsétlen mellékhatása, hogy ha egy PL/pgSQL
|
|
funkció
|
|
használ egy átmeneti táblát, ami
|
|
később törlõdik majd ujra
|
|
létrejön, akkor az újra lefutó funkció
|
|
nem fogja megtalálni a táblát, mert
|
|
a cache változat a régi táblára tartalmaz
|
|
mutatót. A megoldás erre
|
|
az <code>EXECUTE</code> használata az átmeneti
|
|
táblák
|
|
kezelésére PL/pgSQL-ben. Ez a lekérdezés
|
|
újrafordítását
|
|
fogja elõidézni minden alkalommal.</p>
|
|
<big style="text-decoration: underline;">4.27)
|
|
Milyen replikációs
|
|
lehetõségek vannak?</big><br>
|
|
<p>Bár a replikáció egyetlen terület,
|
|
több technológia létezik replikációra,
|
|
természetesen mindnek meg vannak a maga előnyei és
|
|
hátrányai.</p>
|
|
<p>A master/slave replikációs megoldással a master
|
|
adatbázison hajthatunk végre modosításokat,
|
|
míg a slave adatbázisokon csak
|
|
lekérdezéseket. A PostgreSQL legnépszerűbb
|
|
master/slave replikációs megoldása a Solny-I. </p>
|
|
<p>Számos más master/slave replikációs
|
|
lehetõség létezik.Egy Listát olvashatsz
|
|
ezekrõl itt: </p>
|
|
<p><a href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</a></p>
|
|
<p>A multi-master replikáció lehetővé teszi
|
|
több master adatbázis használatát, bár
|
|
ez a technológia drasztikusan csökkenti az adatbázis
|
|
teljesítményét a sok szinkornizáció
|
|
miatt. A PGCluster a legelterjedtebb ilyen megoldás.</p>
|
|
<p>Egy többfelhasználós replikációs
|
|
rendszer készül itt:</p>
|
|
<p><a
|
|
href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.</a></p>
|
|
<p><a name="4.28"></a><big style="text-decoration: underline;">4.28)
|
|
Milyen kódolási
|
|
lehetõségek vannak?</big></p>
|
|
<ul>
|
|
<li>A contrib/pgcrypto tartlamaz számos SQL
|
|
lekérdezésben használható
|
|
kódolást.</li>
|
|
<li>A kliens-szerver kommunikáció
|
|
rejtjelezésére a hostssl használható. Ezt a
|
|
pg_hba.conf-ben engedélyeztheted.</li>
|
|
<li>Az adatbázis felhsználók jelszavait
|
|
tároláskor kódolja a rendszer. </li>
|
|
<li>Régebbi verziókban a PASSWORD_ENCRYPTION
|
|
opcióval
|
|
lehetett bekapcsolni.</li>
|
|
<li>A szerveren használhatsz kódolt fájrendszert.<br>
|
|
</li>
|
|
</ul>
|
|
<hr style="width: 100%; height: 2px;"><br>
|
|
<div style="text-align: center;">
|
|
<h2>A PostgreSQL kiterjesztése</h2>
|
|
</div>
|
|
<br>
|
|
<a name="5.1"></a> <big style="text-decoration: underline;">5.1)
|
|
Írtam egy felhasználói
|
|
funkciót. Miért core dumpol az adatbázis amikor
|
|
használom?<br>
|
|
</big>
|
|
<p>Számos probléma lehet. Elöbb probáld ki a
|
|
funkciódat egy különálló
|
|
alkalmazásban.</p>
|
|
<p><a name="5.2"></a><big style="text-decoration: underline;">5.2)
|
|
Hogyan lehet új adattípusokat
|
|
és funkciókat hozzáadni a PostgreSQL </big><big
|
|
style="text-decoration: underline;">disztribúcióhoz?</big><br>
|
|
</p>
|
|
<p>Küldd el a kiegészítéseid a pgsql-hackers
|
|
levelezési listára és a forráskodjaid
|
|
végül a contrib-ban kötnek ki.</p>
|
|
<a name="5.3"></a> <big style="text-decoration: underline;">5.3)
|
|
Hogyan lehet olyan C funkciót
|
|
írni, ami Tuple-t ad vissza?</big><br>
|
|
<p>A 7.3 verziótól kezdve a PostgreSQL támogatja a
|
|
táblázatokat viszzaadó funkciókat C,
|
|
PL/pgSQL és SQL nyelveken.
|
|
Bõvebb dokumentációt a Programozó
|
|
kézikönyvben találsz. Egy C példa
|
|
funkció található a contrib/tablefunc
|
|
könyvtárban.</p>
|
|
<p><a name="5.4"></a><big style="text-decoration: underline;">5.4)
|
|
Megváltoztattam egy forrás
|
|
állományt. Miért nem változik a
|
|
bináris </big><big style="text-decoration: underline;">újrafordítás
|
|
után?</big><br>
|
|
</p>
|
|
<p>A Makefile-ok nem ismerik a include állományok
|
|
megfelelõ függõségeit. Végre kell
|
|
hajtanod egy make clean-t, majd újra egy
|
|
make-t. Ha GCC-t használsz felhasználhatod a configure
|
|
script
|
|
--enable-depend opcióját, így a compiler maga
|
|
fogja ellenõrizni a
|
|
függõségeket.</p>
|
|
<br>
|
|
<br>
|
|
</body>
|
|
</html>
|