Update Russian FAQ.

Viktor Vislobokov
This commit is contained in:
Bruce Momjian 2005-06-03 18:17:07 +00:00
parent 97e455c9b9
commit 1bdec3424b
2 changed files with 425 additions and 603 deletions

View File

@ -1,12 +1,12 @@
Otvety na chasto zadavaemye voprosy po PostgreSQL Otvety na chasto zadavaemye voprosy po PostgreSQL
Data poslednego obnovleniya: Ponedel'nik 14 fevralya 23:35:09 EST 2005 Data poslednego obnovleniya: Ponedel'nik 30 maya 09:11:03 EDT 2005
Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian)
(pgman@candle.pha.pa.us) (pgman@candle.pha.pa.us)
Perevel na russkij: Viktor Vislobokov (corochoone@perm.ru) Pereviol na russkij: Viktor Vislobokov (corochoone@perm.ru)
Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na
http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html. http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.
@ -30,6 +30,7 @@
1.10) Kak nauchit'sya SQL? 1.10) Kak nauchit'sya SQL?
1.11) Kak prisoedinitsya k komande razrabotchikov? 1.11) Kak prisoedinitsya k komande razrabotchikov?
1.12) Kak sravnivat' PostgreSQL s drugimi SUBD? 1.12) Kak sravnivat' PostgreSQL s drugimi SUBD?
1.13) Kto upravlyaet PostgreSQL?
Voprosy pol'zovatelej po klientskoj chasti Voprosy pol'zovatelej po klientskoj chasti
@ -70,8 +71,8 @@
4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk
nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne
ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv?
4.9) Kak ya mogu opredelit', chto znachenie polya ravno NULL v 4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
kakom-libo zaprose? zaprose? Mogu ya otsortirovat' polya NULL ili net?
4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
@ -80,36 +81,25 @@
4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya
snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii
v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL?
4.12) CHto takoe OID? CHto takoe TID? 4.12) CHto takoe OID? CHto takoe CTID?
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
AllocSetAlloc()"? AllocSetAlloc()"?
4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
"invalid large obj descriptor"?
4.16) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
tekuschee vremya? tekuschee vremya?
4.17) Kak vypolnit' vneshnee svyazyvanie? 4.16) Kak vypolnit' vneshnee svyazyvanie?
4.18) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
4.19) Kak mne vernut' iz funkcii neskol'ko strok tablicy? 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts' 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne
k vremennym tablicam v funkciyah PL/PgSQL? suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah
4.21) Kakie opcii shifrovaniya suschestvuyut? PL/PgSQL?
4.20) Kakie est' resheniya dlya replikacii?
Rasshireniya PostgreSQL
5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya
zapuskayu ee v psql, pochemu ya poluchayu core dump?
5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v
PostgreSQL?
5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu stroku tablicy?
5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne
vizhu izmenenij?
_________________________________________________________________ _________________________________________________________________
Obschie voprosy Obschie voprosy
1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie?
PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El), takzhe PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El), takzhe
chasto govoryat prosto Postgres. chasto govoryat prosto Postgres.
@ -125,8 +115,8 @@
Podrobnosti smotrite v FAQ dlya razrabotchikov, Podrobnosti smotrite v FAQ dlya razrabotchikov,
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html
1.2) Kakovy avtorskie prava na PostgreSQL? 1.2) Kakovy avtorskie prava na PostgreSQL?
PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta
licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya
ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio
@ -137,7 +127,8 @@
Sistema Upravleniya Bazami Dannyh PostgreSQL Sistema Upravleniya Bazami Dannyh PostgreSQL
Portions copyright (c) 1996-2005, PostgreSQL Global Development Group Portions copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California Portions Copyright (c) 1994-1996 Regents of the University of
California
Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i
rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii
@ -161,16 +152,16 @@
PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA
ILI IZMENENIYA. ILI IZMENENIYA.
1.3) Na kakih platformah rabotaet PostgreSQL? 1.3) Na kakih platformah rabotaet PostgreSQL?
Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme
sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh
platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k
momentu vyhoda dannoj versii. momentu vyhoda dannoj versii.
Nachinaya s versii 8.0, PostgreSQL bez vsyakih uhischrenij rabotaet na PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows,
operacionnyh sistemah Microsoft Windows, osnovannyh na NT, takih kak osnovannyh na NT, takih kak Win2000, WinXP i Win2003. Paket
Win2000, WinXP i Win2003. Paket installyatora dostupen po adresu installyatora dostupen po adresu
http://pgfoundry.org/projects/pginstaller. Versii Windows, osnovannye http://pgfoundry.org/projects/pginstaller. Versii Windows, osnovannye
na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s
pomosch'yu Cygwin. pomosch'yu Cygwin.
@ -180,14 +171,13 @@
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
SQL&stype=all&sort=type&dir=%2F. SQL&stype=all&sort=type&dir=%2F.
1.4) Gde mozhno vzyat' PostgreSQL? 1.4) Gde mozhno vzyat' PostgreSQL?
Naprimer, vospol'zovavshis' anonimnym dostupom na ftp sajt PostgreSQL CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez
ftp://ftp.PostgreSQL.org/pub. Spisok zerkal vy najdete na nashem ftp, ispol'zuya ftp://ftp.PostgreSQL.org/pub/.
osnovnom sajte.
1.5) Gde poluchit' podderzhku? 1.5) Gde poluchit' podderzhku?
Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu
pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski
rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. rassylki po E-mail `eto: http://www.postgresql.org/community/lists/.
@ -205,22 +195,23 @@
Spisok kommercheskoj podderzhki kompanij dostupen na Spisok kommercheskoj podderzhki kompanij dostupen na
http://techdocs.postgresql.org/companies.php. http://techdocs.postgresql.org/companies.php.
1.6) Kak mne soobschit' ob oshibke? 1.6) Kak mne soobschit' ob oshibke?
Posetite stranichku so special'noj formoj otchiota ob oshibke v Posetite stranichku so special'noj formoj otchiota ob oshibke v
PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. PostgreSQL po adresu: http://www.postgresql.org/support/submitbug.
Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem
FTP sajte ftp://ftp.PostgreSQL.org/pub. FTP sajte ftp://ftp.PostgreSQL.org/pub/.
1.7) Kakaya poslednyaya versiya? 1.7) Kakaya poslednyaya versiya?
Poslednij vypusk PostgreSQL - `eto versiya 8.0.1 Poslednij vypusk PostgreSQL - `eto versiya 8.0.2
My planiruem vypuskat' novye versii kazhdye 10-12 mesyacev. My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie
versii kazhdye neskol'ko mesyacev.
1.8) Kakaya dokumentaciya imeetsya v nalichii? 1.8) Kakaya dokumentaciya imeetsya v nalichii?
PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe
rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye
malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete
@ -229,8 +220,10 @@
Suschestvuet dve knigi po PostgreSQL dostupnye po adresam Suschestvuet dve knigi po PostgreSQL dostupnye po adresam
http://www.PostgreSQL.org/docs/books/awbook.html i http://www.PostgreSQL.org/docs/books/awbook.html i
http://www.commandprompt.com/ppbook/. Spisok knig po PostgreSQL, http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po
kotorye mozhno kupit' dostupen po adresu PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh
napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam
dostupen po adresu
http://techdocs.postgresql.org/techdocs/bookreviews.php. Krome togo, http://techdocs.postgresql.org/techdocs/bookreviews.php. Krome togo,
po adresu http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu po adresu http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu
tehnicheskih statej posvyaschennyh PostgreSQL. tehnicheskih statej posvyaschennyh PostgreSQL.
@ -241,48 +234,33 @@
Nash sajt soderzhit esche bol'she informacii. Nash sajt soderzhit esche bol'she informacii.
1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
vozmozhnostyah? vozmozhnostyah?
PostgreSQL podderzhivaet rasshirennyj podklass SQL-92. Smotrite nash PostgreSQL podderzhivaet rasshirennyj podklass SQL-92. Smotrite nash
spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
vozmozhnostej i buduschih planov. vozmozhnostej i buduschih planov.
1.10) Kak mne nauchit'sya SQL? 1.10) Kak mne nauchit'sya SQL?
Kniga po PostgreSQL na Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos'
http://www.PostgreSQL.org/docs/books/awbook.html nauchit SQL. vyshe. Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21
Suschestvuet drugaya kniga po PostgreSQL na Days, Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
http://www.commandprompt.com/ppbook. Est' prekrasnyj uchebnik na redakciya) na http://members.tripod.com/er4ebus/sql/index.htm. Mnogim
iz nashih pol'zovatelej nravitsya kniga The Practical SQL Handbook,
Bowman, Judith S., et al., Addison-Wesley. Drugim nravitsya The
Complete Reference SQL, Groff et al., McGraw-Hill.
Est' prekrasnyj uchebnik na
http://www.intermedia.net/support/sql/sqltut.shtm, na http://www.intermedia.net/support/sql/sqltut.shtm, na
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
i na http://sqlcourse.com. i na http://sqlcourse.com.
Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21 Days, 1.11) Kak prisoedinitsya k komande razrabotchikov?
Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
redakciya) na http://members.tripod.com/er4ebus/sql/index.htm Smotrite FAQ dlya razrabotchikov.
Mnogim iz nashih pol'zovatelej nravitsya kniga The Practical SQL 1.12) Kak sravnivat' PostgreSQL s drugimi SUBD?
Handbook, Bowman, Judith S., et al., Addison-Wesley. Drugim nravitsya
The Complete Reference SQL, Groff et al., McGraw-Hill.
1.11) Kak prisoedinitsya k komande razrabotchikov?
Dlya nachala, skachajte poslednyuyu versiyu ishodnyh tekstov i
prochtite FAQ i dokumentaciyu dlya razrabotchikov PostgreSQL na nashem
sajte ili v distributive. Zatem, podpishites' na spiski rassylki
pgsql-hackers i pgsql-patches. Dalee, otpravlyajte ispravleniya
(patches) vysokogo kachestva v spisok pgsql-patches.
Suschestvuet ogranichennyj spisok lyudej, kotoryj imeyut privelegiyu
vnosit' izmeneniya v CVS arhiv PostgreSQL. Kazhdyj iz `etih lyudej v
svoe vremya otpravil tak mnogo vysokokachestvennyh ispravlenij, chto
ih bylo nevozmozhno ostavit' bez vnimaniya i oni byli udostoeny
previlegii vnosit' izmeneniya, i my uvereny, chto te ispravleniya,
kotorye oni vnesut budut vysokogo kachestva.
1.12) Kak sravnivat' PostgreSQL s drugimi SUBD?
Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya:
vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena.
@ -298,15 +276,8 @@
Proizvoditel'nost' Proizvoditel'nost'
Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi
SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my
bystree, v kakih-to medlennee. V sravnenii s MySQL ili linejnoj bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno
SUBD, my bystree, kogda pol'zovatelej mnogo, a takzhe na +/-10% po sravneniyu s drugimi SUBD.
slozhnyh zaprosah i pri chtenii/zapisi zagruzki zaprosa. MySQL
bystree dlya prostyh SELECT zaprosov, vypolnyaemyh nebol'shim
kolichestvom pol'zovatelej. I razumeetsya, MySQL ne imeet
kakih-libo vozmozhnostej iz perechislenyh vyshe, v sekcii
Vozmozhnosti. My delaem upor na nadezhnost' i rasshirennye
vozmozhnosti, no my takzhe prodolzhaem uvelichivat'
proizvoditel'nost' s kazhdym vypuskom.
Nadezhnost' Nadezhnost'
My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona
@ -339,10 +310,23 @@
opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena
vyshe. vyshe.
1.13) Kto upravlyaet PostgreSQL?
Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet
ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est'
yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy
sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya.
Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva
razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya
kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i
uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v
razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.)
_________________________________________________________________
Voprosy pol'zovatelej po klientskoj chasti Voprosy pol'zovatelej po klientskoj chasti
2.1) Kakie interfejsy est' dlya PostgreSQL? 2.1) Kakie interfejsy est' dlya PostgreSQL?
Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C
interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami
i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im
@ -354,46 +338,40 @@
Python i mnogih drugih, dostupny na http://gborg.postgresql.org v Python i mnogih drugih, dostupny na http://gborg.postgresql.org v
sekcii Drivers/Interfaces, a takzhe cherez poisk v Internet. sekcii Drivers/Interfaces, a takzhe cherez poisk v Internet.
2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
Web? Web?
Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti
na: http://www.webreview.com na: http://www.webreview.com
Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim
interfejsom. interfejsom.
V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i CGI.pm ili mod_perl. V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili
mod_perl.
2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
Da, suschestvuet neskol'ko graficheskih interfejsov dlya PostgreSQL. Da, podrobnosti smotrite v
Oni vklyuchayut PgAdmin III (http://www.pgadmin.org), PgAccess http://techdocs.postgresql.org/guides/GUITools.
(http://www.pgaccess.org), RHDB Admin
(http://sources.redhat.com/rhdb/), TORA (http://www.globecom.net/tora/
chastichno kommercheskoe PO) i Rekall (
http://www.rekallrevealed.org/). Takzhe est' PhpPgAdmin (
http://phppgadmin.sourceforge.net/) - interfejs k PostgreSQL,
osnovannyj na Web.
_________________________________________________________________ _________________________________________________________________
Voprosy administrirovaniya Voprosy administrirovaniya
3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql?
Zadajte opciyu --prefix kogda zapuskaete configure. Zadajte opciyu --prefix kogda zapuskaete configure.
3.2) Kak mne upravlyat' soedineniyami s drugih komp'yuterov? 3.2) Kak mne upravlyat' soedineniyami s drugih komp'yuterov?
Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj
mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo,
chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny
izmenit' listen_addresses v postgresql.conf, razreshit' izmenit' listen_addresses v postgresql.conf, razreshit'
host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server. host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server.
3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti?
proizvoditel'nosti?
Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut
uvelichit' proizvoditel'nost': uvelichit' proizvoditel'nost':
@ -430,64 +408,27 @@
http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
x.html i http://www.powerpostgresql.com/PerfList/. x.html i http://www.powerpostgresql.com/PerfList/.
3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na
log_*, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty log_*, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty
processa, kotoraya ochen' polezna dlya otladki i izmereniya processa, kotoraya ochen' polezna dlya otladki i izmereniya
proizvoditel'nosti. proizvoditel'nosti.
Dlya predostavleniya bolee detal'noj informacii razrabotchikam servera 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
pri otladke kakoj-libo problemy dolzhny pol'zovat'sya sleduyuschie pytayus' podklyuchit'sya k baze?
instrukcii.
Takim zhe obrazom mozhno proizvodit' i otladku severa, esli on
rabotaet nepravil'no. Vo-pervyh, pri zapuske configure s opciej
--enable-cassert, mnogie vyzovy assert() pozvolyayut otslezhivat'
rabotu backend processa i ostanovku programmy pri vozniknovenii
kakih-libo neozhidannostej.
Esli postmaster ne zapuschen, vy mozhete zapustit' postgres backend iz
komandnoj stroki i vvesti vash operator SQL napryamuyu. `Eto
rekomenduetsya tol'ko dlya celej otladki. Zametim, chto v `etom
rezhime, zapros zavershaetsya simvolom novoj stroki, a ne tochkoj s
zapyatoj. Esli vy proizvodili kompilyaciyu s otladochnymi simvolami,
vy mozhete ispol'zovat' lyuboj otladchik, chtoby posmotret', chto
sluchilos'. Poskol'ku backend zapuskaetsya ne iz postmaster, on ne
zapuskaetsya v identichnom okruzhenii i znachit problemy iteracij
blokirovok/backend ne mogut byt' vosproizvedeny.
Esli postmaster zapuschen, zapustite psql v odnom okne, zatem najdite
PID processa postgres, ispol'zuemyj psql, ispol'zuya SELECT
pg_backend_pid(). Ispol'zujte otladchik dlya podklyucheniya k postgres
PID. Vy mozhete ustanovit' tochki preryvaniya v otladchike i zapustit'
zapros iz psql. Esli vy proizvodite otladku zapuska postgres, vy
mozhete ustanovit' PGOPTIONS="-W n", i zatem zapustit' psql. `Eta
opciya privodit k zaderzhke processa zapuska na n sekund, v techenie
kotoryh vy mozhete podklyuchit' k processu otladchik, ustanovit'
lyubye tochki preryvaniya i prodolzhit' zapusk.
Vy takzhe mozhete skompilirovat' PostgreSQL s profilirovaniem dlya
togo, chtoby uvidet' kakie funkcii skol'ko vremeni vypolnyayutsya.
Fajly profilirovaniya backend'a nahodyatsya v kataloge
pgsql/data/base/dbname. Fajl profilirovaniya klienta budet pomeschen v
tekuschij katalog klienta. V Linux dlya vypolneniya profilirovaniya
trebuetsya kompilyacii s -DLINUX_PROFILE.
3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
pytayus' podklyuchit'sya k baze?
Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya na 100 sessij Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya na 100 sessij
podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' dlya podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' dlya
postmaster limit na kolichestvo konkurentnyh backend processov, postmaster limit na kolichestvo konkurentnyh backend processov,
izmeniv znachenie max_connections v fajle postgresql.conf i izmeniv znachenie max_connections v fajle postgresql.conf i
perestartovat' postmaster. perestartovat' postmaster.
3.6) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov 3.6) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov
PostgreSQL? PostgreSQL?
Razrabotchiki PostgreSQL delayut tol'ko nebol'shie izmeneniya mezhdu Razrabotchiki PostgreSQL delayut tol'ko nebol'shie izmeneniya mezhdu
podvypuskami. Takim obrazom obnovlenie s versii 7.4 do 7.4.1 ne podvypuskami. Takim obrazom obnovlenie s versii 7.4.0 do 7.4.1 ne
trebuet vypolneniya dump i restore. Odnako pri vyhode ocherednogo trebuet vypolneniya dump i restore. Odnako pri vyhode ocherednogo
vypuska (t.e. pri obnovlenii naprimer, s 7.3 na 7.4) chasto menyaetsya vypuska (t.e. pri obnovlenii naprimer, s 7.3 na 7.4) chasto menyaetsya
vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya
@ -501,8 +442,8 @@
bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda
mozhno ispol'zovat' pg_upgrade dlya `etogo vypuska. mozhno ispol'zovat' pg_upgrade dlya `etogo vypuska.
3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'?
Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee
sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet
odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye
@ -516,15 +457,15 @@
Voprosy `ekspluatacii Voprosy `ekspluatacii
4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
Proizvol'noj stroki? Proizvol'noj stroki?
Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih
kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. Esli est' kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT.
kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to vozmozhno, chto Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to
ves' zapros vypolnen i ne budet. Esli vy ne znaete kolichestva vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete
neobhodimyh strok na moment vypolneniya SELECT, ispol'zujte kursor i kolichestva neobhodimyh strok na moment vypolneniya SELECT,
FETCH. ispol'zujte kursor i FETCH.
To SELECT a random row, use: To SELECT a random row, use:
SELECT col SELECT col
@ -532,10 +473,10 @@
ORDER BY random() ORDER BY random()
LIMIT 1; LIMIT 1;
4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli
suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya
polucheniya `etoj informacii? polucheniya `etoj informacii?
CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj
spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo,
vy mozhete posmotret' ishodnyj kod psql v fajle vy mozhete posmotret' ishodnyj kod psql v fajle
@ -555,8 +496,8 @@
mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz
sistemnyh tablic bazy dannyh. sistemnyh tablic bazy dannyh.
4.3) Kak izmenit' tip dannyh kolonki? 4.3) Kak izmenit' tip dannyh kolonki?
V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya
ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE.
@ -567,9 +508,8 @@
ALTER TABLE tab DROP COLUMN old_col; ALTER TABLE tab DROP COLUMN old_col;
COMMIT; COMMIT;
4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh?
dannyh?
Suschestvuyut sleduyuschie ogranicheniya: Suschestvuyut sleduyuschie ogranicheniya:
Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB)
@ -595,9 +535,9 @@
byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet
uvelichen do 32k. uvelichen do 32k.
4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
dannyh iz obychnogo tekstovogo fajla? dannyh iz obychnogo tekstovogo fajla?
SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz
bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla.
@ -630,15 +570,15 @@
Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut
ochen' malo mesta. ochen' malo mesta.
4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi
indeksy? indeksy?
Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa avtomaticheski. Oni Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya
ispol'zuyutsya tol'ko esli tablica bol'she minimal'nogo razmera i tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet
zapros vybiraet tol'ko malen'kij procent strok v tablice. Tak tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto
ustroeno, potomu chto dostup k disku s primeneniem randomizacii pri dostup k disku s primeneniem randomizacii pri skanirovanii indeksov
skanirovanii indeksov mozhet byt' medlennee, chem prostoe chtenie mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee
tablicy ili ee posledovatel'noe skanirovanie. posledovatel'noe skanirovanie.
CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo
tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta
@ -665,8 +605,8 @@
Esli vam kazhetsya, chto optimizator nekorrektno vybiraet Esli vam kazhetsya, chto optimizator nekorrektno vybiraet
posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i
zapustite testy, chtoby uvidet', ne stalo-li skanirovanie indeksov zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie
bystree. indeksov bystree.
Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~,
indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah:
@ -689,14 +629,14 @@
esli tipy dannyh tochno ne sovpadali s indeksnymi tipami kolonok. `Eto esli tipy dannyh tochno ne sovpadali s indeksnymi tipami kolonok. `Eto
osobenno kasalos' int2, int8 i numeric indeksov kolonok. osobenno kasalos' int2, int8 i numeric indeksov kolonok.
4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN.
4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj 4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot
ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks
indeks dlya poiska nezavisimogo ot registra bukv? dlya poiska nezavisimogo ot registra bukv?
Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~*
proizvodit nezavisimyj ot registra bukv poisk regulyarnogo proizvodit nezavisimyj ot registra bukv poisk regulyarnogo
vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE.
@ -710,13 +650,24 @@
esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan:
CREATE INDEX tabindex ON tab (lower(col)); CREATE INDEX tabindex ON tab (lower(col));
4.9) Kak ya mogu opredelit', chto znachenie polya ravno NULL v kakom-libo 4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
zaprose? zaprose? Mogu ya otsortirovat' polya NULL ili net?
Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL. Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes':
SELECT *
4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? FROM tab
WHERE col IS NULL;
CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS
NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat'
znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya
lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu:
SELECT *
FROM tab
ORDER BY (col IS NOT NULL);
4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
Tip Vnutrennee imya Zamechaniya Tip Vnutrennee imya Zamechaniya
VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya
CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny
@ -731,10 +682,9 @@
Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye
chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut
dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she,
chem oboznachennyj razmer. Odnako, `eti tipy dannyh takzhe poddayutsya chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe
szhatiyu ili mogut byt' sohraneny ne v strokom vide cherez TOAST, tak szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe
chto zanimaemoe diskovoe prostranstvo mozhet takzhe byt' i men'she, byt' i men'she, chem ozhidalos'.
chem ozhidalos'.
VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki
peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT - peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT -
`eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no
@ -747,8 +697,8 @@
znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye
zdes', imeyut shodnye harakteristiki proizvoditel'nosti. zdes', imeyut shodnye harakteristiki proizvoditel'nosti.
4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet
posledovatel'nost'. Naprimer: posledovatel'nost'. Naprimer:
CREATE TABLE person ( CREATE TABLE person (
@ -766,8 +716,8 @@
Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva
posvyaschennoj create_sequence. posvyaschennoj create_sequence.
4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
Odin iz sposobov sostoit v poluchenii sleduyuschego znacheniya SERIAL Odin iz sposobov sostoit v poluchenii sleduyuschego znacheniya SERIAL
iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i
zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v
@ -788,23 +738,23 @@
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')"); new_id = execute("SELECT currval('person_id_seq')");
4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej
sessiej, a ne drugimi sessiyami. sessiej, a ne drugimi sessiyami.
4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova 4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri
pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde
gde ya ispol'zuyu posledovatel'nost'/SERIAL? ya ispol'zuyu posledovatel'nost'/SERIAL?
Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri
neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne
blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat' blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat'
razryvy v numeracii pri otmene tranzakcij. razryvy v numeracii pri otmene tranzakcij.
4.12) CHto takoe OID? CHto takoe TID? 4.12) CHto takoe OID? CHto takoe CTID?
Kazhdaya, sozdavaemaya v PostgreSQL tablichnaya stroka, poluchaet Kazhdaya, sozdavaemaya v PostgreSQL tablichnaya stroka, poluchaet
unikal'nyj indentifikator OID za isklyucheniem sluchaya kogda unikal'nyj indentifikator OID za isklyucheniem sluchaya kogda
ispol'zovalos' WITHOUT OIDS. OID - `eto avtomaticheski naznachaemoe ispol'zovalos' WITHOUT OIDS. OID - `eto avtomaticheski naznachaemoe
@ -819,14 +769,16 @@
obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij
8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8. 8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8.
TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej
blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak
stroki v tablice byli izmeneny ili peregruzheny. TID ispol'zuetsya stroki v tablice byli izmeneny ili peregruzheny.
indeksnymi zapisyami v kachestve ukazatelya na fizicheskie zapisi.
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
AllocSetAlloc()"? fizicheskie zapisi.
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
AllocSetAlloc()"?
Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto
vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes' vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes'
pered zapuskom postmaster vypolnit' sleduyuschie komandy: pered zapuskom postmaster vypolnit' sleduyuschie komandy:
@ -841,36 +793,18 @@
klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em
dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta. dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta.
4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
Iz psql, naberite SELECT version(); Iz psql, naberite SELECT version();
4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
"invalid large obj descriptor"? tekuschee vremya?
Vam nuzhno pri ispol'zovanii bol'shogo ob"ekta pomestit' v nachale
BEGIN WORK i v konce COMMIT, a vnutri poluchivshegosya bloka lo_open
... lo_close.
V nastoyaschij moment PostgreSQL trebuet, chtoby pri zakrytii
bol'shogo ob"ekta proishodilo vypolnenie tranzakcii. Takim obrazom,
pervaya zhe popytka sdelat' chto-libo s bol'shim ob"ektom, ne
soblyudaya dannogo pravila privedet k soobscheniyu invalid large obj
descriptor, tak kak kod vypolnyayuschij rabotu nad bol'shim ob"ektom
(po krajnej mere v nastoyaschij moment) budet generirovat' soobschenie
ob oshibke esli vy ne ispol'zuete tranzakciyu.
Esli vy ispol'zuete takoj interfejs klienta kak ODBC, vam vozmozhno
ponadobitsya ustanovit' auto-commit off.
4.16) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
tekuschee vremya?
Ispol'zujte CURRENT_TIMESTAMP: Ispol'zujte CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
4.17) Kak mne vypolnit' vneshnee svyazyvanie? 4.16) Kak mne vypolnit' vneshnee svyazyvanie?
PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj
sintaksis SQL. Vot dva primera: sintaksis SQL. Vot dva primera:
SELECT * SELECT *
@ -888,8 +822,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah. neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah.
Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya. Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya.
4.18) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot
tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi
specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya
@ -900,14 +834,14 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat' soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat'
informaciyu iz nih. informaciyu iz nih.
4.19) Kak mne vernut' iz funkcii neskol'ko strok tablicy? 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok, Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok,
http://techdocs.postgresql.org/guides/SetReturningFunctions. http://techdocs.postgresql.org/guides/SetReturningFunctions.
4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts' k 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet",
vremennym tablicam v funkciyah PL/PgSQL? kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL?
PL/PgSQL k`eshiruet scenarii funkcii i odin iz negativnyh `effektov PL/PgSQL k`eshiruet scenarii funkcii i odin iz negativnyh `effektov
`etogo sostoit v tom, chto esli funkciya PL/PgSQL obraschaetsya k `etogo sostoit v tom, chto esli funkciya PL/PgSQL obraschaetsya k
vremennoj tablice i `eta tablica pozdnee udalyaetsya i peresozdaetsya, vremennoj tablice i `eta tablica pozdnee udalyaetsya i peresozdaetsya,
@ -917,50 +851,21 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
EXECUTE dlya dostupa k vremennym tablicam v PL/PgSQL. Ispol'zovanie EXECUTE dlya dostupa k vremennym tablicam v PL/PgSQL. Ispol'zovanie
`etogo operatora zastavit zapros peregenerirovat'sya kazhdyj raz. `etogo operatora zastavit zapros peregenerirovat'sya kazhdyj raz.
4.21) Kakie opcii shifrovaniya suschestvuyut? 4.20) Kakie est' resheniya dlya replikacii?
* contrib/pgcrypto soderzhit mnogo funkcij shifrovaniya dlya Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh
ispol'zovaniya v SQL zaprosah. tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya
* Dlya shifrovaniya peredavaemyh dannyh ot klienta k serveru, na kazhdoj.
servere v fajle postgresql.conf, opciya ssl dolzhna byt'
ustanovlena v true, v fajle pg_hba.conf dolzhna byt'
sootvetstvuyuschaya zapis' host ili hostssl i na storone klienta
sslmode ne dolzhen byt' zapreschion cherez disable. (Zametim, chto
takzhe vozmozhno ispol'zovanie nezavisimyh vneshnih shifruyuschih
transportov, takih kak stunnel ili ssh, vmesto sobstvennyh SSL
soedinenij PostgreSQL).
* Paroli pol'zovatelej k baze dannyh avtomaticheski shifruyutsya,
pri sohranenii v sistemnyh tablicah.
* Server mozhno zapustit', ispol'zuya shifrovannuyu fajlovuyu
sistemu.
_________________________________________________________________
Rasshireniya PostgreSQL Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server
dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak
5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya zapuskayu podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy
ee v psql, pochemu ya poluchayu core dump? chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii
master-slave v PostgreSQL yavlyaetsya Slony-I.
Problema mozhet zaklyuchat'sya v neskol'kih veschah. Popytajtes'
sperva protestirovat' vashu funkciyu v otdel'noj samostoyatel'noj
programme.
5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi
PostgreSQL? na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta
osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto
Otprav'te vashi rasshireniya v spisok rassylki pgsql-hackers i oni po neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami.
vozmozhnosti budut pomescheny v podkatalog contrib/. Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL
yavlyaetsya Pgcluster.
5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu stroku tablicy?
V versiyah PostgreSQL, nachinaya s 7.3, funkcii, vozvraschayuschie
tablicy polnost'yu podderzhivayutsya v C, PL/PgSQL i SQL. Podrobnosti
smotrite v Rukovodstve Programmista. Primer vozvraschayuschej tablicu
funkcii, napisannoj na C, mozhno najti v contrib/tablefunc.
5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne vizhu
izmenenij?
Fajly Makefile ne imeyut pravil'nyh zavisimostej dlya include fajlov.
Vy dolzhny vypolnit' make clean i zatem make. Esli vy ispol'zuete GCC
vy mozhete ispol'zovat' opciyu --enable-depend v configure chtoby
poruchit' kompilyatoru avtomaticheski otslezhivat' zavisimosti.

View File

@ -12,12 +12,12 @@
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
<H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1> <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
<P>Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005</P> <P>Дата последнего обновления: Понедельник 30 мая 09:11:03 EDT 2005</P>
<P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href= <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
</P> </P>
<P>Перевел на русский: Виктор Вислобоков (<A href= <P>Перевёл на русский: Виктор Вислобоков (<A href=
"mailto:corochoone@perm.ru">corochoone@perm.ru</A>)<BR> "mailto:corochoone@perm.ru">corochoone@perm.ru</A>)<BR>
</P> </P>
@ -43,6 +43,7 @@
<A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR> <A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR>
<A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими <A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими
<SMALL>СУБД</SMALL>?<BR> <SMALL>СУБД</SMALL>?<BR>
<A href="#1.13">1.13</A>) Кто управляет PostgreSQL?<BR>
<H2 align="center">Вопросы пользователей по клиентской части</H2> <H2 align="center">Вопросы пользователей по клиентской части</H2>
@ -87,8 +88,9 @@
<A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения <A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения? и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?<BR> Как мне использовать индекс для поиска независимого от регистра букв?<BR>
<A href="#4.9">4.9</A>) Как я могу определить, что значение поля равно <A href="#4.9">4.9</A>) Как мне определить, что значение поля равно
<SMALL>NULL</SMALL> в каком-либо запросе?<BR> <SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля
<SMALL>NULL</SMALL> или нет?<BR>
<A href="#4.10">4.10</A>) Каковы отличия между разными символьными <A href="#4.10">4.10</A>) Каковы отличия между разными символьными
типами?<BR> типами?<BR>
<A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR> <A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
@ -101,38 +103,26 @@
не используются снова при отмене транзакции? Почему создаются разрывы не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?<BR> при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
<A href="#4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое <A href="#4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
<SMALL>TID</SMALL>?<BR> <SMALL>CTID</SMALL>?<BR>
<A href="#4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory <A href="#4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
exhausted in AllocSetAlloc()"</I>?<BR> exhausted in AllocSetAlloc()"</I>?<BR>
<A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL <A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
запущена?<BR> запущена?<BR>
<A href="#4.15">4.15</A>) Почему при работе с моим большим объектом <A href="#4.15">4.15</A>) Как мне создать колонку которая по умолчанию
я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR>
<A href="#4.16">4.16</A>) Как мне создать колонку которая по умолчанию
будет содержать текущее время?<BR> будет содержать текущее время?<BR>
<A href="#4.17">4.17</A>) Как выполнить внешнее связывание?<BR> <A href="#4.16">4.16</A>) Как выполнить внешнее связывание?<BR>
<A href="#4.18">4.18</A>) Как выполнять запросы, использующие несколько <A href="#4.17">4.17</A>) Как выполнять запросы, использующие несколько
баз данных?<BR> баз данных?<BR>
<A href="#4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?<BR> <A href="#4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?<BR>
<A href="#4.20">4.20</A>) Почему я получаю ошибку "missing oid", <A href="#4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR> не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR>
<A href="#4.21">4.21</A>) Какие опции шифрования существуют?<BR> <A href="#4.20">4.20</A>) Какие есть решения для репликации?<BR>
<H2 align="center">Расширения PostgreSQL</H2>
<A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем.
Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?<BR>
<A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые
типы и функции в PostgreSQL?<BR>
<A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую
строку таблицы?<BR>
<A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после
перекомпиляции я не вижу изменений?<BR>
<HR> <HR>
<H2 align="center">Общие вопросы</H2> <H2 align="center">Общие вопросы</H2>
<H4><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H4> <H3><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H3>
<P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>, <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>,
также часто говорят просто <I>Postgres</I>.</P> также часто говорят просто <I>Postgres</I>.</P>
@ -151,7 +141,7 @@
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A> http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A>
</P> </P>
<H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4> <H3><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H3>
<P>PostgreSQL распространяется по классической лицензии BSD. Эта <P>PostgreSQL распространяется по классической лицензии BSD. Эта
лицензия не содержит ограничений на то, как будет использоваться лицензия не содержит ограничений на то, как будет использоваться
@ -163,7 +153,7 @@
<P>Система Управления Базами Данных PostgreSQL</P> <P>Система Управления Базами Данных PostgreSQL</P>
<P>Portions copyright (c) 1996-2005, PostgreSQL Global Development <P>Portions copyright (c) 1996-2005, PostgreSQL Global Development
Group Portions Copyright (c) 1994-6 Regents of the University of Group Portions Copyright (c) 1994-1996 Regents of the University of
California</P> California</P>
<P>Предоставляются права на использование, копирование, изменение <P>Предоставляются права на использование, копирование, изменение
@ -187,16 +177,16 @@
"КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P> СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
<H4><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H4> <H3><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H3>
<P>Обычно, PostgreSQL может работать на любой современной платформе <P>Обычно, PostgreSQL может работать на любой современной платформе
совместимой с Unix. В инструкции по установке, вы найдете список совместимой с Unix. В инструкции по установке, вы найдете список
тех платформ, на которых были проведены тестовые запуски PostgreSQL тех платформ, на которых были проведены тестовые запуски PostgreSQL
к моменту выхода данной версии.</P> к моменту выхода данной версии.</P>
<P>Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на <P>PostgreSQL также работает на операционных системах Microsoft
операционных системах Microsoft Windows, основанных на NT, таких как Windows, основанных на NT, таких как Win2000, WinXP и Win2003.
Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу Пакет инсталлятора доступен по адресу
<A href="http://pgfoundry.org/projects/pginstaller"> <A href="http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</A>. Версии Windows, http://pgfoundry.org/projects/pginstaller</A>. Версии Windows,
основанные на MS-DOS (Win95, Win98, WinMe) могут запускать основанные на MS-DOS (Win95, Win98, WinMe) могут запускать
@ -208,14 +198,13 @@
<A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F"> <A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</A>.</P> http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</A>.</P>
<H4><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H4> <H3><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H3>
<P>Например, воспользовавшись анонимным доступом на ftp сайт <P>Через браузер, используя <a href="http://www.postgresql.org/ftp/">
PostgreSQL <A href= http://www.postgresql.org/ftp/</a> и через ftp, используя
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. <A href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.</P>
Список зеркал вы найдете на нашем основном сайте.</P>
<H4><A name="1.5">1.5</A>) Где получить поддержку?</H4> <H3><A name="1.5">1.5</A>) Где получить поддержку?</H3>
<P>Сообщество PostgreSQL предоставляет помощь множеству пользователей <P>Сообщество PostgreSQL предоставляет помощь множеству пользователей
через E-mail. Основной web-сайт для подписки на списки рассылки по через E-mail. Основной web-сайт для подписки на списки рассылки по
@ -233,28 +222,30 @@
языках. Также существует канал по PostgreSQL на сервере EFNet.</P> языках. Также существует канал по PostgreSQL на сервере EFNet.</P>
<P>Список коммерческой поддержки компаний доступен на <P>Список коммерческой поддержки компаний доступен на
<A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> <A href="http://techdocs.postgresql.org/companies.php">
http://techdocs.postgresql.org/companies.php</A>.</P>
<H4><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H4> <H3><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H3>
<P>Посетите страничку со специальной формой отчёта об ошибке в <P>Посетите страничку со специальной формой отчёта об ошибке в
PostgreSQL по адресу: PostgreSQL по адресу:
<A href="http://www.postgresql.org/support/submitbug"> <A HREF="http://www.postgresql.org/support/submitbug">
http://www.postgresql.org/support/submitbug</A>.</P> http://www.postgresql.org/support/submitbug</A>.</P>
<P>Также проверьте наличие более свежей версии PostgreSQL на нашем <P>Также проверьте наличие более свежей версии PostgreSQL на нашем
FTP сайте <A href="ftp://ftp.postgresql.org/pub"> FTP сайте <A href="ftp://ftp.postgresql.org/pub/">
ftp://ftp.PostgreSQL.org/pub</A>.</P> ftp://ftp.PostgreSQL.org/pub/</A>.
<H4><A name="1.7">1.7</A>) Какая последняя версия?</H4> <H3><A name="1.7">1.7</A>) Какая последняя версия?</H3>
<P>Последний выпуск PostgreSQL - это версия 8.0.1</P> <P>Последний выпуск PostgreSQL - это версия 8.0.2</P>
<P>Мы планируем выпускать новые версии каждые 10-12 месяцев.</P> <P>Мы планируем выпускать новые старшие версии каждый год,
а младшие версии каждые несколько месяцев.</P>
<H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4> <H3><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H3>
<P>PostgreSQL содержит много документации, включая большое руководство, <P>PostgreSQL содержит много документации, включая большое руководство,
страницы электронного руководства man и некоторые маленькие тестовые страницы электронного руководства man и некоторые маленькие тестовые
@ -264,11 +255,13 @@
<P>Существует две книги по PostgreSQL доступные по адресам <A href= <P>Существует две книги по PostgreSQL доступные по адресам <A href=
"http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> "http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A>
и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>.
Список книг по PostgreSQL, которые можно купить доступен по адресу Есть несколько книг по PostgreSQL, которые можно купить.
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. Одну из наиболее популярных написал Корри Дуглас (Korry Douglas).
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a> Список обзоров по этим книгам доступен по адресу
вы можете найти коллекцию технических статей посвященных PostgreSQL.</p> <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>.
Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a>
вы можете найти коллекцию технических статей посвященных PostgreSQL.</P>
<P>Клиент командной строки <I>psql</I> имеет несколько команд \d для <P>Клиент командной строки <I>psql</I> имеет несколько команд \d для
отображения информации по типам, операторам, функциям, агрегатам и т.д. - отображения информации по типам, операторам, функциям, агрегатам и т.д. -
@ -276,56 +269,41 @@
<P>Наш сайт содержит еще больше информации.</P> <P>Наш сайт содержит еще больше информации.</P>
<H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках <H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
или отсутствующих возможностях?</H4> или отсутствующих возможностях?</H3>
<P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92. <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92.
Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
на предмет известных ошибок, отсутствующих возможностей и будущих на предмет известных ошибок, отсутствующих возможностей и будущих
планов.</P> планов.</P>
<H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4> <H3><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H3>
<P>Книга по PostgreSQL на <A href= <P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось
"http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> выше. Еще один учебник - это книга "Teach Yourself SQL in 21 Days,
научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на Second Edition" (Освой самостоятельно SQL за 21 день, Вторая редакция)
<A href="http://www.commandprompt.com/ppbook/"> на <A href="http://members.tripod.com/er4ebus/sql/index.htm">
http://www.commandprompt.com/ppbook.</A> http://members.tripod.com/er4ebus/sql/index.htm</A>.
Есть прекрасный учебник на <A href= Многим из наших пользователей нравится книга
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
на <A href=
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
и на <A href=
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
<P>Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition"
(Освой самостоятельно SQL за 21 день, Вторая редакция)
на <A href=
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
<P>Многим из наших пользователей нравится книга
<I>The Practical SQL Handbook</I>, <I>The Practical SQL Handbook</I>,
Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
<H4><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H4> Есть прекрасный учебник на <A href=
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
на <A href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
и на <A href="http://sqlcourse.com/">http://sqlcourse.com.</A></P>
<P>Для начала, скачайте последнюю версию исходных текстов и прочтите
FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в
дистрибутиве. Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и
<I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого
качества в список pgsql-patches.</P>
<P>Существует ограниченный список людей, который имеют привелегию <H3><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H3>
вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый
из этих людей в свое время отправил так много высококачественных исправлений,
что их было невозможно оставить без внимания и они были удостоены
превилегии вносить изменения, и мы уверены, что те исправления, которые
они внесут будут высокого качества.</P>
<H4><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими <P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
<SMALL>СУБД</SMALL>?</H4> FAQ для разработчиков</A>.</P>
<H3><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими
<SMALL>СУБД</SMALL>?</H3>
<P> <P>
Существует несколько методов сравнения программного обеспечения: Существует несколько методов сравнения программного обеспечения:
@ -348,14 +326,8 @@
<DD>Производительность PostgreSQL сходна с другими коммерческими <DD>Производительность PostgreSQL сходна с другими коммерческими
СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
в каких-то медленнее. В сравнении с MySQL или линейной в каких-то медленнее. Наша производительности обычно +/-10% по
СУБД, мы быстрее, когда пользователей много, а также на сложных сравнению с другими СУБД.
запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых
SELECT запросов, выполняемых небольшим количеством пользователей.
И разумеется, MySQL не имеет каких-либо возможностей из
перечисленых выше, в секции <I>Возможности</I>.
Мы делаем упор на надежность и расширенные возможности, но мы также
продолжаем увеличивать производительность с каждым выпуском. <BR>
<BR> <BR>
</DD> </DD>
@ -396,10 +368,25 @@
</DD> </DD>
</DL> </DL>
<H3><A name="1.13">1.13</A>) Кто управляет PostgreSQL?</H3>
<P>Если вы ищите какого-то особенного человека, центральный
комитет или управляющую компанию, то напрасно --- их нет.
У нас есть ядро комитета и разработчиков, работающих с CVS,
но эти группы служат больше для административных целей, чем
для управления. Проект напрямую функционирует с помощью
сообщества разработчиков и пользователей, к которому может
присоединится каждый. Всё что нужно -- это подписаться на
списки рассылки и участвовать в дискуссиях. (Подробности о
том как включиться в разработку PostgreSQL смотрите в
<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
FAQ для разработчиков</A>.)</P>
<H2 align="center">Вопросы пользователей по клиентской части</H2> <HR>
<H4><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H4> <H3 align="center">Вопросы пользователей по клиентской части</H3>
<H3><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H3>
<P>Установка PostgreSQL включает только <small>C</small> и встроенный <P>Установка PostgreSQL включает только <small>C</small> и встроенный
(embedded) <small>C</small> интерфейсы. Все другие интерфейсы (embedded) <small>C</small> интерфейсы. Все другие интерфейсы
@ -414,8 +401,8 @@
в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P> в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P>
<H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования <H3><A name="2.2">2.2</A>) Какие инструменты существуют для использования
PostgreSQL через Web?</H4> PostgreSQL через Web?</H3>
<P>Прекрасное введение во взаимодействие баз данных и Web можно найти на: <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
<A href="http://www.webreview.com">http://www.webreview.com</A></P> <A href="http://www.webreview.com">http://www.webreview.com</A></P>
@ -423,33 +410,26 @@
<P>Для интеграции с Web, PHP <A href="http://www.php.net"> <P>Для интеграции с Web, PHP <A href="http://www.php.net">
http://www.php.net</A> является неплохим интерфейсом.</P> http://www.php.net</A> является неплохим интерфейсом.</P>
<P>В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.</P> <P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm
или mod_perl.</P>
<H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс <H3><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
пользователя?</H4> пользователя?</H3>
<P>Да, подробности смотрите в <a href="http://techdocs.postgresql.org/guides/GUITools">
http://techdocs.postgresql.org/guides/GUITools</A>.</P>
<P>Да, существует несколько графических интерфейсов для PostgreSQL.
Они включают PgAdmin III (<A href="http://www.pgadmin.org/">http://www.pgadmin.org</A>),
PgAccess (<A href="http://www.pgaccess.org/">http://www.pgaccess.org</A>),
RHDB Admin (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>),
TORA (<A href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</A>
частично коммерческое ПО)
и Rekall (<A href="http://www.rekallrevealed.org/">
http://www.rekallrevealed.org/</A>). Также есть
PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/</A>) - интерфейс к PostgreSQL,
основанный на Web.</P>
<HR> <HR>
<H2 align="center">Вопросы администрирования</H2> <H2 align="center">Вопросы администрирования</H2>
<H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное <H3><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
от <I>/usr/local/pgsql</I>?</H4> от <I>/usr/local/pgsql</I>?</H3>
<P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P> <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
<H4><A name="3.2">3.2</A>) Как мне управлять соединениями с других <H3><A name="3.2">3.2</A>) Как мне управлять соединениями с других
компьютеров?</H4> компьютеров?</H3>
<P>По умолчанию, PostgreSQL разрешает только соединения на локальной <P>По умолчанию, PostgreSQL разрешает только соединения на локальной
машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
@ -458,8 +438,8 @@
host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать
сервер.</P> сервер.</P>
<H4><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения <H3><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
производительности?</H4> производительности?</H3>
<P>Существует три главных области, которые потенциально могут <P>Существует три главных области, которые потенциально могут
увеличить производительность:</P> увеличить производительность:</P>
@ -510,55 +490,17 @@
</DD> </DD>
</DL> </DL>
<H4><A name="3.4">3.4</A>) Какие возможности для отладки есть в <H3><A name="3.4">3.4</A>) Какие возможности для отладки есть в
наличии?</H4> наличии?</H3>
<P>Есть множество установок в настройках сервера, начинающихся <P>Есть множество установок в настройках сервера, начинающихся
на <code>log_*</code>, позволяющих протоколировать запросы на <code>log_*</code>, позволяющих протоколировать запросы
и статистику работы процесса, которая очень полезна для отладки и статистику работы процесса, которая очень полезна для отладки
и измерения производительности.</P> и измерения производительности.</P>
<P><B>Для предоставления более детальной информации разработчикам
сервера при отладке какой-либо проблемы должны пользоваться
следующие инструкции.</B></P>
<P>Таким же образом можно производить и отладку севера, если он
работает неправильно. Во-первых, при запуске <I>configure</I> с
опцией --enable-cassert, многие вызовы <I>assert()</I> позволяют
отслеживать работу backend процесса и остановку программы при
возникновении каких-либо неожиданностей.</P>
<P>Если <I>postmaster</I> не запущен, вы можете запустить <H3><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
<I>postgres</I> backend из командной строки и ввести ваш оператор many clients"</I> когда пытаюсь подключиться к базе?</H3>
<SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для
целей отладки. Заметим, что в этом режиме, запрос завершается символом
новой строки, а не точкой с запятой. Если вы производили компиляцию
с отладочными символами, вы можете использовать любой отладчик, чтобы
посмотреть, что случилось. Поскольку backend запускается не из
<I>postmaster</I>, он не запускается в идентичном окружении и значит
проблемы итераций блокировок/backend не могут быть воспроизведены.</P>
<P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном
окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>,
используемый <I>psql</I>, используя <CODE>SELECT pg_backend_pid()</CODE>.
Используйте отладчик для подключения к <I>postgres</I> <SMALL>PID</SMALL>.
Вы можете установить точки прерывания в отладчике и запустить запрос
из <I>psql</I>. Если
вы производите отладку запуска <I>postgres</I>, вы можете установить
PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит
к задержке процесса запуска на <I>n</I> секунд, в течение которых
вы можете подключить к процессу отладчик, установить любые точки
прерывания и продолжить запуск.</P>
<P>Вы также можете скомпилировать PostgreSQL с профилированием для
того, чтобы увидеть какие функции сколько времени выполняются.
Файлы профилирования backend'а находятся в каталоге
<I>pgsql/data/base/dbname</I>. Файл профилирования клиента
будет помещен в текущий каталог клиента. В Linux для выполнения
профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P>
<H4><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
many clients"</I> когда пытаюсь подключиться к базе?</H4>
<P>Вы достигли установленного по умолчанию ограничения на 100 сессий <P>Вы достигли установленного по умолчанию ограничения на 100 сессий
подключения к базе данных. Вам необходимо увеличить для подключения к базе данных. Вам необходимо увеличить для
@ -567,11 +509,11 @@
и перестартовать <I>postmaster</I>.</P> и перестартовать <I>postmaster</I>.</P>
<H4><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при <H3><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при
обновлении выпусков PostgreSQL?</H4> обновлении выпусков PostgreSQL?</H3>
<P>Разработчики PostgreSQL делают только небольшие изменения между <P>Разработчики PostgreSQL делают только небольшие изменения между
подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует подвыпусками. Таким образом обновление с версии 7.4.0 до 7.4.1 не требует
выполнения dump и restore. Однако при выходе очередного выпуска выполнения dump и restore. Однако при выходе очередного выпуска
(т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний
формат системных таблиц и файлов данных. Эти изменения часто носят формат системных таблиц и файлов данных. Эти изменения часто носят
@ -585,8 +527,10 @@
использования dump/restore. Комментарии к выпуску говорит когда можно использования dump/restore. Комментарии к выпуску говорит когда можно
использовать <i>pg_upgrade</i> для этого выпуска.</P> использовать <i>pg_upgrade</i> для этого выпуска.</P>
<H4><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен
использовать?</H4> <H3><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен
использовать?</H3>
<P>Поскольку "железо" персональных компьютеров является наиболее <P>Поскольку "железо" персональных компьютеров является наиболее
совместимым, люди склонны верить, что такое "железо" имеет одинаковое совместимым, люди склонны верить, что такое "железо" имеет одинаковое
качество. Это не так. Память ECC, SCSI и качественные материнские платы качество. Это не так. Память ECC, SCSI и качественные материнские платы
@ -600,26 +544,27 @@
<H2 align="center">Вопросы эксплуатации</H2> <H2 align="center">Вопросы эксплуатации</H2>
<H4><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только <H3><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
для нескольких первых строчек запроса? Произвольной строки?</H4> для нескольких первых строчек запроса? Произвольной строки?</H3>
<P>Для получения только нескольких строк, если вы знаете их количество <P>Для получения только нескольких строк, если вы знаете их количество
на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>. на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.</P>
Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>, Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>,
то возможно, что весь запрос выполнен и не будет. Если вы не знаете то возможно, что весь запрос выполнен и не будет. Если вы не знаете
количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>, количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>,
используйте курсор и <SMALL>FETCH</SMALL>.</P> используйте курсор и <SMALL>FETCH</SMALL>.</P>
<p>To <small>SELECT</small> a random row, use:</p> <P>To <small>SELECT</small> a random row, use:</P>
<pre> SELECT col <PRE> SELECT col
FROM tab FROM tab
ORDER BY random() ORDER BY random()
LIMIT 1; LIMIT 1;
</pre> </PRE>
<H4><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы,
<H3><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы,
базы данных и пользователи существуют? Как мне увидеть запросы, базы данных и пользователи существуют? Как мне увидеть запросы,
которые использует <I>psql</I> для получения этой информации?</H4> которые использует <I>psql</I> для получения этой информации?</H3>
<P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt. <P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt.
Полный список команд в <I>psql</I> вы можете получить, используя \?. Полный список команд в <I>psql</I> вы можете получить, используя \?.
@ -642,7 +587,7 @@
для получения информации из системных таблиц базы данных.</P> для получения информации из системных таблиц базы данных.</P>
<H4><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H4> <H3><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H3>
<P>В 8.0 и более поздних версиях, изменение типа колонки выполняется <P>В 8.0 и более поздних версиях, изменение типа колонки выполняется
очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
@ -656,13 +601,12 @@
COMMIT; COMMIT;
</PRE> </PRE>
<H4><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице, <H3><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
таблиц и базы данных?</H4> таблиц и базы данных?</H3>
<P>Существуют следующие ограничения:</P> <P>Существуют следующие ограничения:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE> <TABLE>
<TBODY>
<TR> <TR>
<TD>Максимальный размер базы?</TD> <TD>Максимальный размер базы?</TD>
<TD>неограничен (существуют базы на 32 TB)</TD> <TD>неограничен (существуют базы на 32 TB)</TD>
@ -691,7 +635,6 @@
<TD>Максимальное количество индексов в таблице?</TD> <TD>Максимальное количество индексов в таблице?</TD>
<TD>неограничено</TD> <TD>неограничено</TD>
</TR> </TR>
</TBODY>
</TABLE> </TABLE>
</BLOCKQUOTE> </BLOCKQUOTE>
<BR> <BR>
@ -709,8 +652,8 @@
могут быть увеличены в четыре раза, если размер блока по умолчанию будет могут быть увеличены в четыре раза, если размер блока по умолчанию будет
увеличен до 32k.</P> увеличен до 32k.</P>
<H4><A name="4.5">4.5</A>) Как много дискового пространства в базе данных <H3><A name="4.5">4.5</A>) Как много дискового пространства в базе данных
нужно для сохранения данных из обычного текстового файла?</H4> нужно для сохранения данных из обычного текстового файла?</H3>
<P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
больше для сохранения данных из простого текстового файла.</P> больше для сохранения данных из простого текстового файла.</P>
@ -747,10 +690,10 @@
занимают очень мало места. занимают очень мало места.
</P> </P>
<H4><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему <H3><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему
они не используют мои индексы?</H4> они не используют мои индексы?</H3>
<P>Индексы не используются для каждого запроса автоматически. Они <P>Индексы не используются для каждого запроса. Они
используются только если таблица больше минимального размера и запрос используются только если таблица больше минимального размера и запрос
выбирает только маленький процент строк в таблице. Так устроено, выбирает только маленький процент строк в таблице. Так устроено,
потому что доступ к диску с применением рандомизации при сканировании потому что доступ к диску с применением рандомизации при сканировании
@ -774,17 +717,18 @@
и в этом случае индекс будет использоваться, поскольку при выполнении и в этом случае индекс будет использоваться, поскольку при выполнении
будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не
используют индексы, но индекс используется при построении запросов с используют индексы, но индекс используется при построении запросов с
<SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:</P> <SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:
<pre> <PRE>
SELECT col SELECT col
FROM tab FROM tab
ORDER BY col [ DESC ] ORDER BY col [ DESC ]
LIMIT 1; LIMIT 1;
</pre> </PRE>
<P>Если вам кажется, что оптимизатор некорректно выбирает последовательный <P>Если вам кажется, что оптимизатор некорректно выбирает последовательный
перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и
запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее. запустите запрос снова, чтобы увидеть, действительно ли сканирование
индексов быстрее.
</P> </P>
<P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL> <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
@ -810,15 +754,15 @@
если типы данных точно не совпадали с индексными типами колонок. Это если типы данных точно не совпадали с индексными типами колонок. Это
особенно касалось int2, int8 и numeric индексов колонок.</P> особенно касалось int2, int8 и numeric индексов колонок.</P>
<H4><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет <H3><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
мой запрос?</H4> мой запрос?</H3>
<P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P> <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P>
<H4><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения <H3><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения? и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?</H4> Как мне использовать индекс для поиска независимого от регистра букв?</H3>
<P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор
<I>~*</I> производит независимый от регистра букв поиск регулярного <I>~*</I> производит независимый от регистра букв поиск регулярного
@ -832,23 +776,40 @@
WHERE lower(col) = 'abc'; WHERE lower(col) = 'abc';
</PRE> </PRE>
<P> Эта конструкция не будет использовать стандартный индекс. Однако, если Эта конструкция не будет использовать стандартный индекс. Однако, если
вы создадите индекс выражения, он будет использован:</P> вы создадите индекс выражения, он будет использован:
<PRE> <PRE>
CREATE INDEX tabindex ON tab (lower(col)); CREATE INDEX tabindex ON tab (lower(col));
</PRE> </PRE>
<H4><A name="4.9">4.9</A>) Как я могу определить, что значение поля <H3><A name="4.9">4.9</A>) Как мне определить, что значение поля равно
равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4> <SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля
<SMALL>NULL</SMALL> или нет?</H3>
<P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и
<SMALL>IS NOT NULL</SMALL>.</P> <SMALL>IS NOT NULL</SMALL>, как здесь:</P>
<PRE>
SELECT *
FROM tab
WHERE col IS NULL;
</PRE>
<H4><A name="4.10">4.10</A>) Каковы отличия между разными символьными <P>Чтобы отсортировать данные по значению <NULL> используйте модификаторы
типами?</H4> <SMALL>IS NULL</SMALL> и <SMALL>IS NOT NULL</SMALL> в выражении
<SMALL>ORDER BY</SMALL>. Когда они будут генерировать значения
<I>истина</I>, то при сортировке они будут выше, чем значения
<I>ложь</I>, так что записи с NULL будут в отсортированном списке сверху:</P>
<PRE>
SELECT *
FROM tab
ORDER BY (col IS NOT NULL);
</PRE>
<H3><A name="4.10">4.10</A>) Каковы отличия между разными символьными
типами?</H3>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE> <TABLE>
<TBODY>
<TR> <TR>
<TH>Тип</TH> <TH>Тип</TH>
<TH>Внутреннее имя</TH> <TH>Внутреннее имя</TH>
@ -879,7 +840,6 @@
<TD>char</TD> <TD>char</TD>
<TD>один символ</TD> <TD>один символ</TD>
</TR> </TR>
</TBODY>
</TABLE> </TABLE>
</BLOCKQUOTE> </BLOCKQUOTE>
@ -889,8 +849,7 @@
<P>Первые четыре типа являются "varlena" типами (т.е., первые <P>Первые четыре типа являются "varlena" типами (т.е., первые
четыре байта на диске являются длинной, за которой следуют данные). четыре байта на диске являются длинной, за которой следуют данные).
Таким образом, фактически используемое пространство больше, чем Таким образом, фактически используемое пространство больше, чем
обозначенный размер. Однако, эти типы данных также поддаются сжатию обозначенный размер. Однако, длинные значения также сжимаются,
или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>,
так что занимаемое дисковое пространство может также быть и меньше, так что занимаемое дисковое пространство может также быть и меньше,
чем ожидалось.</P> чем ожидалось.</P>
@ -906,8 +865,8 @@
которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные
здесь, имеют сходные характеристики производительности.</P> здесь, имеют сходные характеристики производительности.</P>
<H4><A name="4.11.1">4.11.1</A>) Как мне создать поле <H3><A name="4.11.1">4.11.1</A>) Как мне создать поле
serial/с-авто-увеличением?</H4> serial/с-авто-увеличением?</H3>
<P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
автоматически создает последовательность. Например:</P> автоматически создает последовательность. Например:</P>
@ -918,7 +877,7 @@
); );
</PRE> </PRE>
<P> автоматически транслируется в: </P> автоматически транслируется в:
<PRE> <PRE>
CREATE SEQUENCE person_id_seq; CREATE SEQUENCE person_id_seq;
CREATE TABLE person ( CREATE TABLE person (
@ -930,8 +889,8 @@
Смотрите подробности о последовательностях на странице руководства Смотрите подробности о последовательностях на странице руководства
посвященной <I>create_sequence</I>. посвященной <I>create_sequence</I>.
<H4><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке <H3><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке
<SMALL>SERIAL</SMALL>?</H4> <SMALL>SERIAL</SMALL>?</H3>
<P>Один из способов состоит в получении следующего значения <P>Один из способов состоит в получении следующего значения
<SMALL>SERIAL</SMALL> из объекта sequence с помощью функции <SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
@ -960,16 +919,16 @@
</PRE> </PRE>
<H4><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что <H3><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что
использование <I>currval()</I> и <I>nextval()</I> приведет к использование <I>currval()</I> и <I>nextval()</I> приведет к
зациклированию с другими пользователями?</H4> зациклированию с другими пользователями?</H3>
<P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей
сессией, а не другими сессиями.</P> сессией, а не другими сессиями.</P>
<H4><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности <H3><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности
не используются снова при отмене транзакции? Почему создаются разрывы не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?</H4> при нумерации в колонке, где я использую последовательность/SERIAL?</H3>
<P>Для реализации конкуретности, значения последовательностей, при <P>Для реализации конкуретности, значения последовательностей, при
необходимости выдаются во время запуска транзакций и не блокируются необходимости выдаются во время запуска транзакций и не блокируются
@ -977,8 +936,8 @@
нумерации при отмене транзакций.</P> нумерации при отмене транзакций.</P>
<H4><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое <H3><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
<SMALL>TID</SMALL>?</H4> <SMALL>CTID</SMALL>?</H3>
<P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный <P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный
индентификатор <SMALL>OID</SMALL> за исключением случая когда индентификатор <SMALL>OID</SMALL> за исключением случая когда
@ -993,17 +952,17 @@
O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL> O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL>
уникальны только внутри таблицы и таким образом меньше подвержены уникальны только внутри таблицы и таким образом меньше подвержены
переполнению. Для хранения значений 8-ми байтной последовательности переполнению. Для хранения значений 8-ми байтной последовательности
доступен тип <SMALL>SERIAL8</SMALL>.</P> доступен тип <SMALL>SERIAL8</SMALL>.
<P>T<SMALL>ID</SMALL> используется для идентификации специальных <P>C<SMALL>TID</SMALL> используется для идентификации специальных
физических записей с блочными и offset значениями. T<SMALL>ID</SMALL> физических записей с блочными и offset значениями. C<SMALL>TID</SMALL>
изменяется после того как строки в таблице были изменены или перегружены. изменяется после того как строки в таблице были изменены или перегружены.
T<SMALL>ID</SMALL> используется индексными записями в качестве <P>T<SMALL>ID</SMALL> используется индексными записями в качестве
указателя на физические записи.</P> указателя на физические записи.</P>
<H4><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory <H3><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
exhausted in AllocSetAlloc()"</I>?</H4> exhausted in AllocSetAlloc()"</I>?</H3>
<P>Предположительно у вас закончилась виртуальная память <P>Предположительно у вас закончилась виртуальная память
или что ваше ядро имеет маленький лимит на определенные ресурсы. или что ваше ядро имеет маленький лимит на определенные ресурсы.
@ -1022,38 +981,21 @@
клиентом, потому что backend возвращает слишком большой объем данных, клиентом, потому что backend возвращает слишком большой объем данных,
попытайтесь выполнить эту команду перед запуском клиента. попытайтесь выполнить эту команду перед запуском клиента.
<H4><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL <H3><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
запущена?</H4> запущена?</H3>
<P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P> <P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P>
<H4><A name="4.15">4.15</A>) Почему при работе с моим большим объектом
я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4>
<P>Вам нужно при использовании большого объекта поместить в начале <H3><A name="4.15">4.15</A>) Как мне создать колонку которая по умолчанию
<CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри будет содержать текущее время?</H3>
получившегося блока <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
<P>В настоящий момент PostgreSQL требует, чтобы при закрытии большого
объекта происходило выполнение транзакции. Таким образом, первая же
попытка сделать что-либо с большим объектом, не соблюдая данного правила
приведет к сообщению <I>invalid large obj descriptor</I>, так как
код выполняющий работу над большим объектом (по крайней мере в
настоящий момент) будет генерировать сообщение об ошибке если вы не
используете транзакцию.</P>
<P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>,
вам возможно понадобится установить <CODE>auto-commit off.</CODE></P>
<H4><A name="4.16">4.16</A>) Как мне создать колонку которая по умолчанию
будет содержать текущее время?</H4>
<P>Используйте <I>CURRENT_TIMESTAMP</I>:</P> <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
<PRE> <PRE>
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
</PRE> </PRE>
<H4><A name="4.17">4.17</A>) Как мне выполнить внешнее связывание?</H4> <H3><A name="4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3>
<P>PostgreSQL поддерживает внешнее связывание, <P>PostgreSQL поддерживает внешнее связывание,
используя стандартный синтаксис SQL. Вот два примера:</P> используя стандартный синтаксис SQL. Вот два примера:</P>
@ -1077,8 +1019,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
<SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные <SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные
связывания называются <SMALL>INNER</SMALL> связывания.</P> связывания называются <SMALL>INNER</SMALL> связывания.</P>
<H4><A name="4.18">4.18</A>) Как выполнять запросы, использующие несколько <H3><A name="4.17">4.17</A>) Как выполнять запросы, использующие несколько
баз данных?</H4> баз данных?</H3>
<P>Не существует способа создать запрос к базам данных отличным от текущей. <P>Не существует способа создать запрос к базам данных отличным от текущей.
Поскольку PostgreSQL загружает системные каталоги специфичные для базы Поскольку PostgreSQL загружает системные каталоги специфичные для базы
@ -1089,14 +1031,16 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
соедиенения с различными базами данных и таких образом объединять соедиенения с различными базами данных и таких образом объединять
информацию из них.</P> информацию из них.</P>
<H4><A name="4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?</H4> <H3><A name="4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3>
<P>Вы можете легко использовать функции, возвращающие список, <P>Вы можете легко использовать функции, возвращающие список,
<A href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P> http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
<H4><A name="4.20">4.20</A>) Почему я получаю ошибку "missing oid",
когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H4> <H3><A name="4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H3>
<P>PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого <P>PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого
состоит в том, что если функция PL/PgSQL обращается к временной таблице состоит в том, что если функция PL/PgSQL обращается к временной таблице
и эта таблица позднее удаляется и пересоздается, а функция затем вызывается и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
@ -1106,53 +1050,26 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
таблицам в PL/PgSQL. Использование этого оператора заставит запрос таблицам в PL/PgSQL. Использование этого оператора заставит запрос
перегенерироваться каждый раз.</P> перегенерироваться каждый раз.</P>
<h4><a name="4.21">4.21</a>) Какие опции шифрования существуют?
</h4>
<ul>
<li><i>contrib/pgcrypto</i> содержит много функций шифрования для
использования в <small>SQL</small> запросах.</li>
<li>Для шифрования передаваемых данных от клиента к серверу, на сервере
в файле <i>postgresql.conf</i>, опция <i>ssl</i> должна быть установлена
в <i>true</i>, в файле <i>pg_hba.conf</i> должна быть соответствующая
запись <i>host</i> или <i>hostssl</i> и на стороне клиента <i>sslmode</i>
не должен быть запрещён через <i>disable</i>. (Заметим, что также
возможно использование независимых внешних шифрующих транспортов, таких
как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).</li>
<li>Пароли пользователей к базе данных автоматически шифруются, при
сохранении в системных таблицах.</li>
<li>Сервер можно запустить, используя шифрованную файловую систему.</li>
</ul>
<HR>
<H2 align="center">Расширения PostgreSQL</H2> <H3><A name="4.20">4.20</a>) Какие есть решения для репликации?</H3>
<H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем. <P>Хотя "репликация" -- это единый термин, есть несколько разных технологий
Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?</H4> для выполнения репликаций с разными особенностями для каждой.</P>
<P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва <P>Репликация Master/slave позволяет иметь один главный (master) сервер
протестировать вашу функцию в отдельной самостоятельной программе.</P> для выполнения запросов чтения/записи, в то время как подчинённые
(slave) сервера могут производить только запросы
<H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые чтения/<SMALL>SELECT</SMALL>. Наиболее популярным решением для репликации
типы и функции в PostgreSQL?</H4> master-slave в PostgreSQL является
<A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">
<P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I> Slony-I</A>.</P>
и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P>
<P>Репликация Multi-master позволяет выполнять запросы чтения/записи
<H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность
строку таблицы?</H4> также приводит к потере производительности, потому что необходима
синхронизация изменений между несколькими серверами. Наиболее
<P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы популярным решением для такой репликации в PostgreSQL является
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в <A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</A>.
Руководстве Программиста. Пример возвращающей таблицу функции,
написанной на C, можно найти в <i>contrib/tablefunc</i>.</P>
<H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после
перекомпиляции я не вижу изменений?</H4>
<P>Файлы <I>Makefile</I> не имеют правильных зависимостей для include
файлов. Вы должны выполнить <I>make clean</I> и затем <I>make</I>.
Если вы используете <SMALL>GCC</SMALL> вы можете использовать опцию
<I>--enable-depend</I> в <I>configure</I> чтобы поручить компилятору
автоматически отслеживать зависимости.</P>
</BODY> </BODY>
</HTML> </HTML>