mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Update Russian FAQ.
Viktor Vislobokov
This commit is contained in:
parent
97e455c9b9
commit
1bdec3424b
525
doc/FAQ_russian
525
doc/FAQ_russian
@ -1,12 +1,12 @@
|
||||
|
||||
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)
|
||||
(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
|
||||
http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.
|
||||
@ -30,6 +30,7 @@
|
||||
1.10) Kak nauchit'sya SQL?
|
||||
1.11) Kak prisoedinitsya k komande razrabotchikov?
|
||||
1.12) Kak sravnivat' PostgreSQL s drugimi SUBD?
|
||||
1.13) Kto upravlyaet PostgreSQL?
|
||||
|
||||
Voprosy pol'zovatelej po klientskoj chasti
|
||||
|
||||
@ -70,8 +71,8 @@
|
||||
4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk
|
||||
nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne
|
||||
ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv?
|
||||
4.9) Kak ya mogu opredelit', chto znachenie polya ravno NULL v
|
||||
kakom-libo zaprose?
|
||||
4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
|
||||
zaprose? Mogu ya otsortirovat' polya NULL ili net?
|
||||
4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
|
||||
4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
|
||||
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
|
||||
snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii
|
||||
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
|
||||
AllocSetAlloc()"?
|
||||
4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
|
||||
4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku
|
||||
"invalid large obj descriptor"?
|
||||
4.16) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
|
||||
4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
|
||||
tekuschee vremya?
|
||||
4.17) Kak vypolnit' vneshnee svyazyvanie?
|
||||
4.18) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
|
||||
4.19) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
|
||||
4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts'
|
||||
k vremennym tablicam v funkciyah PL/PgSQL?
|
||||
4.21) Kakie opcii shifrovaniya suschestvuyut?
|
||||
|
||||
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?
|
||||
4.16) Kak vypolnit' vneshnee svyazyvanie?
|
||||
4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
|
||||
4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
|
||||
4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne
|
||||
suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah
|
||||
PL/PgSQL?
|
||||
4.20) Kakie est' resheniya dlya replikacii?
|
||||
_________________________________________________________________
|
||||
|
||||
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
|
||||
chasto govoryat prosto Postgres.
|
||||
|
||||
@ -125,8 +115,8 @@
|
||||
Podrobnosti smotrite v FAQ dlya razrabotchikov,
|
||||
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
|
||||
licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya
|
||||
ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio
|
||||
@ -137,7 +127,8 @@
|
||||
Sistema Upravleniya Bazami Dannyh PostgreSQL
|
||||
|
||||
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
|
||||
rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii
|
||||
@ -161,16 +152,16 @@
|
||||
PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA
|
||||
ILI IZMENENIYA.
|
||||
|
||||
1.3) Na kakih platformah rabotaet PostgreSQL?
|
||||
|
||||
1.3) Na kakih platformah rabotaet PostgreSQL?
|
||||
|
||||
Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme
|
||||
sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh
|
||||
platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k
|
||||
momentu vyhoda dannoj versii.
|
||||
|
||||
Nachinaya s versii 8.0, PostgreSQL bez vsyakih uhischrenij rabotaet na
|
||||
operacionnyh sistemah Microsoft Windows, osnovannyh na NT, takih kak
|
||||
Win2000, WinXP i Win2003. Paket installyatora dostupen po adresu
|
||||
PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows,
|
||||
osnovannyh na NT, takih kak Win2000, WinXP i Win2003. Paket
|
||||
installyatora dostupen po adresu
|
||||
http://pgfoundry.org/projects/pginstaller. Versii Windows, osnovannye
|
||||
na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s
|
||||
pomosch'yu Cygwin.
|
||||
@ -180,14 +171,13 @@
|
||||
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
|
||||
SQL&stype=all&sort=type&dir=%2F.
|
||||
|
||||
1.4) Gde mozhno vzyat' PostgreSQL?
|
||||
|
||||
Naprimer, vospol'zovavshis' anonimnym dostupom na ftp sajt PostgreSQL
|
||||
ftp://ftp.PostgreSQL.org/pub. Spisok zerkal vy najdete na nashem
|
||||
osnovnom sajte.
|
||||
1.4) Gde mozhno vzyat' PostgreSQL?
|
||||
|
||||
CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez
|
||||
ftp, ispol'zuya ftp://ftp.PostgreSQL.org/pub/.
|
||||
|
||||
1.5) Gde poluchit' podderzhku?
|
||||
|
||||
1.5) Gde poluchit' podderzhku?
|
||||
|
||||
Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu
|
||||
pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski
|
||||
rassylki po E-mail `eto: http://www.postgresql.org/community/lists/.
|
||||
@ -205,22 +195,23 @@
|
||||
Spisok kommercheskoj podderzhki kompanij dostupen na
|
||||
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
|
||||
PostgreSQL po adresu: http://www.postgresql.org/support/submitbug.
|
||||
|
||||
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?
|
||||
|
||||
Poslednij vypusk PostgreSQL - `eto versiya 8.0.1
|
||||
1.7) Kakaya poslednyaya versiya?
|
||||
|
||||
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
|
||||
rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye
|
||||
malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete
|
||||
@ -229,8 +220,10 @@
|
||||
|
||||
Suschestvuet dve knigi po PostgreSQL dostupnye po adresam
|
||||
http://www.PostgreSQL.org/docs/books/awbook.html i
|
||||
http://www.commandprompt.com/ppbook/. Spisok knig po PostgreSQL,
|
||||
kotorye mozhno kupit' dostupen po adresu
|
||||
http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po
|
||||
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,
|
||||
po adresu http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu
|
||||
tehnicheskih statej posvyaschennyh PostgreSQL.
|
||||
@ -241,48 +234,33 @@
|
||||
|
||||
Nash sajt soderzhit esche bol'she informacii.
|
||||
|
||||
1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
|
||||
vozmozhnostyah?
|
||||
|
||||
1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
|
||||
vozmozhnostyah?
|
||||
|
||||
PostgreSQL podderzhivaet rasshirennyj podklass SQL-92. Smotrite nash
|
||||
spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
|
||||
vozmozhnostej i buduschih planov.
|
||||
|
||||
1.10) Kak mne nauchit'sya SQL?
|
||||
|
||||
Kniga po PostgreSQL na
|
||||
http://www.PostgreSQL.org/docs/books/awbook.html nauchit SQL.
|
||||
Suschestvuet drugaya kniga po PostgreSQL na
|
||||
http://www.commandprompt.com/ppbook. Est' prekrasnyj uchebnik na
|
||||
1.10) Kak mne nauchit'sya SQL?
|
||||
|
||||
Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos'
|
||||
vyshe. Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21
|
||||
Days, Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
|
||||
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://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
|
||||
i na http://sqlcourse.com.
|
||||
|
||||
Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21 Days,
|
||||
Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
|
||||
redakciya) na http://members.tripod.com/er4ebus/sql/index.htm
|
||||
1.11) Kak prisoedinitsya k komande razrabotchikov?
|
||||
|
||||
Smotrite FAQ dlya razrabotchikov.
|
||||
|
||||
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.
|
||||
|
||||
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?
|
||||
|
||||
1.12) Kak sravnivat' PostgreSQL s drugimi SUBD?
|
||||
|
||||
Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya:
|
||||
vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena.
|
||||
|
||||
@ -298,15 +276,8 @@
|
||||
Proizvoditel'nost'
|
||||
Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi
|
||||
SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my
|
||||
bystree, v kakih-to medlennee. V sravnenii s MySQL ili linejnoj
|
||||
SUBD, my bystree, kogda pol'zovatelej mnogo, a takzhe na
|
||||
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.
|
||||
bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno
|
||||
+/-10% po sravneniyu s drugimi SUBD.
|
||||
|
||||
Nadezhnost'
|
||||
My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona
|
||||
@ -339,10 +310,23 @@
|
||||
opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena
|
||||
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
|
||||
|
||||
2.1) Kakie interfejsy est' dlya PostgreSQL?
|
||||
|
||||
2.1) Kakie interfejsy est' dlya PostgreSQL?
|
||||
|
||||
Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C
|
||||
interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami
|
||||
i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im
|
||||
@ -354,46 +338,40 @@
|
||||
Python i mnogih drugih, dostupny na http://gborg.postgresql.org v
|
||||
sekcii Drivers/Interfaces, a takzhe cherez poisk v Internet.
|
||||
|
||||
2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
|
||||
Web?
|
||||
|
||||
2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
|
||||
Web?
|
||||
|
||||
Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti
|
||||
na: http://www.webreview.com
|
||||
|
||||
Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim
|
||||
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?
|
||||
|
||||
Da, suschestvuet neskol'ko graficheskih interfejsov dlya PostgreSQL.
|
||||
Oni vklyuchayut PgAdmin III (http://www.pgadmin.org), PgAccess
|
||||
(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.
|
||||
2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
|
||||
|
||||
Da, podrobnosti smotrite v
|
||||
http://techdocs.postgresql.org/guides/GUITools.
|
||||
_________________________________________________________________
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo,
|
||||
chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny
|
||||
izmenit' listen_addresses v postgresql.conf, razreshit'
|
||||
host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server.
|
||||
|
||||
3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
|
||||
proizvoditel'nosti?
|
||||
|
||||
3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti?
|
||||
|
||||
Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut
|
||||
uvelichit' proizvoditel'nost':
|
||||
|
||||
@ -430,64 +408,27 @@
|
||||
http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
|
||||
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
|
||||
log_*, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty
|
||||
processa, kotoraya ochen' polezna dlya otladki i izmereniya
|
||||
proizvoditel'nosti.
|
||||
|
||||
Dlya predostavleniya bolee detal'noj informacii razrabotchikam servera
|
||||
pri otladke kakoj-libo problemy dolzhny pol'zovat'sya sleduyuschie
|
||||
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?
|
||||
|
||||
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
|
||||
podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' dlya
|
||||
postmaster limit na kolichestvo konkurentnyh backend processov,
|
||||
izmeniv znachenie max_connections v fajle postgresql.conf i
|
||||
perestartovat' postmaster.
|
||||
|
||||
3.6) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov
|
||||
PostgreSQL?
|
||||
|
||||
3.6) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov
|
||||
PostgreSQL?
|
||||
|
||||
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
|
||||
vypuska (t.e. pri obnovlenii naprimer, s 7.3 na 7.4) chasto menyaetsya
|
||||
vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya
|
||||
@ -501,8 +442,8 @@
|
||||
bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda
|
||||
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
|
||||
sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet
|
||||
odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye
|
||||
@ -516,15 +457,15 @@
|
||||
|
||||
Voprosy `ekspluatacii
|
||||
|
||||
4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
|
||||
Proizvol'noj stroki?
|
||||
|
||||
4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
|
||||
Proizvol'noj stroki?
|
||||
|
||||
Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih
|
||||
kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. Esli est'
|
||||
kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to vozmozhno, chto
|
||||
ves' zapros vypolnen i ne budet. Esli vy ne znaete kolichestva
|
||||
neobhodimyh strok na moment vypolneniya SELECT, ispol'zujte kursor i
|
||||
FETCH.
|
||||
kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT.
|
||||
Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to
|
||||
vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete
|
||||
kolichestva neobhodimyh strok na moment vypolneniya SELECT,
|
||||
ispol'zujte kursor i FETCH.
|
||||
|
||||
To SELECT a random row, use:
|
||||
SELECT col
|
||||
@ -532,10 +473,10 @@
|
||||
ORDER BY random()
|
||||
LIMIT 1;
|
||||
|
||||
4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli
|
||||
suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya
|
||||
polucheniya `etoj informacii?
|
||||
|
||||
4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli
|
||||
suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya
|
||||
polucheniya `etoj informacii?
|
||||
|
||||
CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj
|
||||
spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo,
|
||||
vy mozhete posmotret' ishodnyj kod psql v fajle
|
||||
@ -555,8 +496,8 @@
|
||||
mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz
|
||||
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
|
||||
ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE.
|
||||
|
||||
@ -567,9 +508,8 @@
|
||||
ALTER TABLE tab DROP COLUMN old_col;
|
||||
COMMIT;
|
||||
|
||||
4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy
|
||||
dannyh?
|
||||
|
||||
4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh?
|
||||
|
||||
Suschestvuyut sleduyuschie ogranicheniya:
|
||||
|
||||
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
|
||||
uvelichen do 32k.
|
||||
|
||||
4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
|
||||
dannyh iz obychnogo tekstovogo fajla?
|
||||
|
||||
4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
|
||||
dannyh iz obychnogo tekstovogo fajla?
|
||||
|
||||
SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz
|
||||
bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla.
|
||||
|
||||
@ -630,15 +570,15 @@
|
||||
Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut
|
||||
ochen' malo mesta.
|
||||
|
||||
4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi
|
||||
indeksy?
|
||||
|
||||
Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa avtomaticheski. Oni
|
||||
ispol'zuyutsya tol'ko esli tablica bol'she minimal'nogo razmera i
|
||||
zapros vybiraet tol'ko malen'kij procent strok v tablice. Tak
|
||||
ustroeno, potomu chto dostup k disku s primeneniem randomizacii pri
|
||||
skanirovanii indeksov mozhet byt' medlennee, chem prostoe chtenie
|
||||
tablicy ili ee posledovatel'noe skanirovanie.
|
||||
4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi
|
||||
indeksy?
|
||||
|
||||
Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya
|
||||
tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet
|
||||
tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto
|
||||
dostup k disku s primeneniem randomizacii pri skanirovanii indeksov
|
||||
mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee
|
||||
posledovatel'noe skanirovanie.
|
||||
|
||||
CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo
|
||||
tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta
|
||||
@ -665,8 +605,8 @@
|
||||
|
||||
Esli vam kazhetsya, chto optimizator nekorrektno vybiraet
|
||||
posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i
|
||||
zapustite testy, chtoby uvidet', ne stalo-li skanirovanie indeksov
|
||||
bystree.
|
||||
zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie
|
||||
indeksov bystree.
|
||||
|
||||
Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~,
|
||||
indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah:
|
||||
@ -689,14 +629,14 @@
|
||||
esli tipy dannyh tochno ne sovpadali s indeksnymi tipami kolonok. `Eto
|
||||
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.
|
||||
|
||||
4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj
|
||||
ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat'
|
||||
indeks dlya poiska nezavisimogo ot registra bukv?
|
||||
|
||||
4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot
|
||||
registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks
|
||||
dlya poiska nezavisimogo ot registra bukv?
|
||||
|
||||
Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~*
|
||||
proizvodit nezavisimyj ot registra bukv poisk regulyarnogo
|
||||
vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE.
|
||||
@ -710,13 +650,24 @@
|
||||
esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan:
|
||||
CREATE INDEX tabindex ON tab (lower(col));
|
||||
|
||||
4.9) Kak ya mogu opredelit', chto znachenie polya ravno NULL v kakom-libo
|
||||
zaprose?
|
||||
|
||||
Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL.
|
||||
|
||||
4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
|
||||
|
||||
4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
|
||||
zaprose? Mogu ya otsortirovat' polya NULL ili net?
|
||||
|
||||
Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes':
|
||||
SELECT *
|
||||
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
|
||||
VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya
|
||||
CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny
|
||||
@ -731,10 +682,9 @@
|
||||
Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye
|
||||
chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut
|
||||
dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she,
|
||||
chem oboznachennyj razmer. Odnako, `eti tipy dannyh takzhe poddayutsya
|
||||
szhatiyu ili mogut byt' sohraneny ne v strokom vide cherez TOAST, tak
|
||||
chto zanimaemoe diskovoe prostranstvo mozhet takzhe byt' i men'she,
|
||||
chem ozhidalos'.
|
||||
chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe
|
||||
szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe
|
||||
byt' i men'she, chem ozhidalos'.
|
||||
VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki
|
||||
peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT -
|
||||
`eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no
|
||||
@ -747,8 +697,8 @@
|
||||
znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye
|
||||
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
|
||||
posledovatel'nost'. Naprimer:
|
||||
CREATE TABLE person (
|
||||
@ -766,8 +716,8 @@
|
||||
Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva
|
||||
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
|
||||
iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i
|
||||
zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v
|
||||
@ -788,23 +738,23 @@
|
||||
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
||||
new_id = execute("SELECT currval('person_id_seq')");
|
||||
|
||||
4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
|
||||
nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
|
||||
|
||||
4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
|
||||
nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
|
||||
|
||||
Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej
|
||||
sessiej, a ne drugimi sessiyami.
|
||||
|
||||
4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova
|
||||
pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke,
|
||||
gde ya ispol'zuyu posledovatel'nost'/SERIAL?
|
||||
|
||||
4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri
|
||||
otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde
|
||||
ya ispol'zuyu posledovatel'nost'/SERIAL?
|
||||
|
||||
Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri
|
||||
neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne
|
||||
blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat'
|
||||
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
|
||||
unikal'nyj indentifikator OID za isklyucheniem sluchaya kogda
|
||||
ispol'zovalos' WITHOUT OIDS. OID - `eto avtomaticheski naznachaemoe
|
||||
@ -819,14 +769,16 @@
|
||||
obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij
|
||||
8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8.
|
||||
|
||||
TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s
|
||||
blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak
|
||||
stroki v tablice byli izmeneny ili peregruzheny. TID ispol'zuetsya
|
||||
indeksnymi zapisyami v kachestve ukazatelya na fizicheskie zapisi.
|
||||
CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej
|
||||
s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak
|
||||
stroki v tablice byli izmeneny ili peregruzheny.
|
||||
|
||||
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
|
||||
AllocSetAlloc()"?
|
||||
|
||||
TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
|
||||
fizicheskie zapisi.
|
||||
|
||||
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
|
||||
AllocSetAlloc()"?
|
||||
|
||||
Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto
|
||||
vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes'
|
||||
pered zapuskom postmaster vypolnit' sleduyuschie komandy:
|
||||
@ -841,36 +793,18 @@
|
||||
klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em
|
||||
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();
|
||||
|
||||
4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku
|
||||
"invalid large obj descriptor"?
|
||||
|
||||
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?
|
||||
|
||||
4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
|
||||
tekuschee vremya?
|
||||
|
||||
Ispol'zujte 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
|
||||
sintaksis SQL. Vot dva primera:
|
||||
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.
|
||||
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
|
||||
tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi
|
||||
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'
|
||||
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,
|
||||
http://techdocs.postgresql.org/guides/SetReturningFunctions.
|
||||
|
||||
4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts' k
|
||||
vremennym tablicam v funkciyah PL/PgSQL?
|
||||
|
||||
4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet",
|
||||
kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL?
|
||||
|
||||
PL/PgSQL k`eshiruet scenarii funkcii i odin iz negativnyh `effektov
|
||||
`etogo sostoit v tom, chto esli funkciya PL/PgSQL obraschaetsya k
|
||||
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
|
||||
`etogo operatora zastavit zapros peregenerirovat'sya kazhdyj raz.
|
||||
|
||||
4.21) Kakie opcii shifrovaniya suschestvuyut?
|
||||
|
||||
* contrib/pgcrypto soderzhit mnogo funkcij shifrovaniya dlya
|
||||
ispol'zovaniya v SQL zaprosah.
|
||||
* Dlya shifrovaniya peredavaemyh dannyh ot klienta k serveru, na
|
||||
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.
|
||||
_________________________________________________________________
|
||||
4.20) Kakie est' resheniya dlya replikacii?
|
||||
|
||||
Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh
|
||||
tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya
|
||||
kazhdoj.
|
||||
|
||||
Rasshireniya PostgreSQL
|
||||
|
||||
5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya zapuskayu
|
||||
ee v psql, pochemu ya poluchayu core dump?
|
||||
|
||||
Problema mozhet zaklyuchat'sya v neskol'kih veschah. Popytajtes'
|
||||
sperva protestirovat' vashu funkciyu v otdel'noj samostoyatel'noj
|
||||
programme.
|
||||
Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server
|
||||
dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak
|
||||
podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy
|
||||
chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii
|
||||
master-slave v PostgreSQL yavlyaetsya Slony-I.
|
||||
|
||||
5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v
|
||||
PostgreSQL?
|
||||
|
||||
Otprav'te vashi rasshireniya v spisok rassylki pgsql-hackers i oni po
|
||||
vozmozhnosti budut pomescheny v podkatalog contrib/.
|
||||
|
||||
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.
|
||||
Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi
|
||||
na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta
|
||||
osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto
|
||||
neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami.
|
||||
Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL
|
||||
yavlyaetsya Pgcluster.
|
||||
|
@ -12,12 +12,12 @@
|
||||
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
|
||||
<H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1>
|
||||
|
||||
<P>Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005</P>
|
||||
<P>Дата последнего обновления: Понедельник 30 мая 09:11:03 EDT 2005</P>
|
||||
|
||||
<P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href=
|
||||
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
||||
</P>
|
||||
<P>Перевел на русский: Виктор Вислобоков (<A href=
|
||||
<P>Перевёл на русский: Виктор Вислобоков (<A href=
|
||||
"mailto:corochoone@perm.ru">corochoone@perm.ru</A>)<BR>
|
||||
</P>
|
||||
|
||||
@ -43,6 +43,7 @@
|
||||
<A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR>
|
||||
<A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими
|
||||
<SMALL>СУБД</SMALL>?<BR>
|
||||
<A href="#1.13">1.13</A>) Кто управляет PostgreSQL?<BR>
|
||||
|
||||
|
||||
<H2 align="center">Вопросы пользователей по клиентской части</H2>
|
||||
@ -87,8 +88,9 @@
|
||||
<A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения
|
||||
и поиск независимый от регистра букв поиск регулярного выражения?
|
||||
Как мне использовать индекс для поиска независимого от регистра букв?<BR>
|
||||
<A href="#4.9">4.9</A>) Как я могу определить, что значение поля равно
|
||||
<SMALL>NULL</SMALL> в каком-либо запросе?<BR>
|
||||
<A href="#4.9">4.9</A>) Как мне определить, что значение поля равно
|
||||
<SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля
|
||||
<SMALL>NULL</SMALL> или нет?<BR>
|
||||
<A href="#4.10">4.10</A>) Каковы отличия между разными символьными
|
||||
типами?<BR>
|
||||
<A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR>
|
||||
@ -101,38 +103,26 @@
|
||||
не используются снова при отмене транзакции? Почему создаются разрывы
|
||||
при нумерации в колонке, где я использую последовательность/SERIAL?<BR>
|
||||
<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
|
||||
exhausted in AllocSetAlloc()"</I>?<BR>
|
||||
<A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
|
||||
запущена?<BR>
|
||||
<A href="#4.15">4.15</A>) Почему при работе с моим большим объектом
|
||||
я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR>
|
||||
<A href="#4.16">4.16</A>) Как мне создать колонку которая по умолчанию
|
||||
<A href="#4.15">4.15</A>) Как мне создать колонку которая по умолчанию
|
||||
будет содержать текущее время?<BR>
|
||||
<A href="#4.17">4.17</A>) Как выполнить внешнее связывание?<BR>
|
||||
<A href="#4.18">4.18</A>) Как выполнять запросы, использующие несколько
|
||||
<A href="#4.16">4.16</A>) Как выполнить внешнее связывание?<BR>
|
||||
<A href="#4.17">4.17</A>) Как выполнять запросы, использующие несколько
|
||||
баз данных?<BR>
|
||||
<A href="#4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?<BR>
|
||||
<A href="#4.20">4.20</A>) Почему я получаю ошибку "missing oid",
|
||||
когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR>
|
||||
<A href="#4.21">4.21</A>) Какие опции шифрования существуют?<BR>
|
||||
<A href="#4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?<BR>
|
||||
<A href="#4.19">4.19</A>) Почему я получаю ошибку "relation with OID ####
|
||||
не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?<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>
|
||||
|
||||
<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>,
|
||||
также часто говорят просто <I>Postgres</I>.</P>
|
||||
@ -151,7 +141,7 @@
|
||||
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A>
|
||||
</P>
|
||||
|
||||
<H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4>
|
||||
<H3><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H3>
|
||||
|
||||
<P>PostgreSQL распространяется по классической лицензии BSD. Эта
|
||||
лицензия не содержит ограничений на то, как будет использоваться
|
||||
@ -163,7 +153,7 @@
|
||||
<P>Система Управления Базами Данных PostgreSQL</P>
|
||||
|
||||
<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>
|
||||
|
||||
<P>Предоставляются права на использование, копирование, изменение
|
||||
@ -187,16 +177,16 @@
|
||||
"КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
|
||||
СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P>
|
||||
|
||||
<H4><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H4>
|
||||
<H3><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H3>
|
||||
|
||||
<P>Обычно, PostgreSQL может работать на любой современной платформе
|
||||
совместимой с Unix. В инструкции по установке, вы найдете список
|
||||
тех платформ, на которых были проведены тестовые запуски PostgreSQL
|
||||
к моменту выхода данной версии.</P>
|
||||
|
||||
<P>Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на
|
||||
операционных системах Microsoft Windows, основанных на NT, таких как
|
||||
Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу
|
||||
<P>PostgreSQL также работает на операционных системах Microsoft
|
||||
Windows, основанных на NT, таких как Win2000, WinXP и Win2003.
|
||||
Пакет инсталлятора доступен по адресу
|
||||
<A href="http://pgfoundry.org/projects/pginstaller">
|
||||
http://pgfoundry.org/projects/pginstaller</A>. Версии Windows,
|
||||
основанные на MS-DOS (Win95, Win98, WinMe) могут запускать
|
||||
@ -208,14 +198,13 @@
|
||||
<A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
|
||||
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&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 сайт
|
||||
PostgreSQL <A href=
|
||||
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
|
||||
Список зеркал вы найдете на нашем основном сайте.</P>
|
||||
<P>Через браузер, используя <a href="http://www.postgresql.org/ftp/">
|
||||
http://www.postgresql.org/ftp/</a> и через ftp, используя
|
||||
<A href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.</P>
|
||||
|
||||
<H4><A name="1.5">1.5</A>) Где получить поддержку?</H4>
|
||||
<H3><A name="1.5">1.5</A>) Где получить поддержку?</H3>
|
||||
|
||||
<P>Сообщество PostgreSQL предоставляет помощь множеству пользователей
|
||||
через E-mail. Основной web-сайт для подписки на списки рассылки по
|
||||
@ -233,28 +222,30 @@
|
||||
языках. Также существует канал по PostgreSQL на сервере EFNet.</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>Посетите страничку со специальной формой отчёта об ошибке в
|
||||
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>
|
||||
|
||||
<P>Также проверьте наличие более свежей версии PostgreSQL на нашем
|
||||
FTP сайте <A href="ftp://ftp.postgresql.org/pub">
|
||||
ftp://ftp.PostgreSQL.org/pub</A>.</P>
|
||||
FTP сайте <A href="ftp://ftp.postgresql.org/pub/">
|
||||
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 содержит много документации, включая большое руководство,
|
||||
страницы электронного руководства man и некоторые маленькие тестовые
|
||||
@ -264,11 +255,13 @@
|
||||
|
||||
<P>Существует две книги по PostgreSQL доступные по адресам <A href=
|
||||
"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>.
|
||||
Список книг по PostgreSQL, которые можно купить доступен по адресу
|
||||
<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>
|
||||
и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>.
|
||||
Есть несколько книг по PostgreSQL, которые можно купить.
|
||||
Одну из наиболее популярных написал Корри Дуглас (Korry Douglas).
|
||||
Список обзоров по этим книгам доступен по адресу
|
||||
<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 для
|
||||
отображения информации по типам, операторам, функциям, агрегатам и т.д. -
|
||||
@ -276,56 +269,41 @@
|
||||
|
||||
<P>Наш сайт содержит еще больше информации.</P>
|
||||
|
||||
<H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
|
||||
или отсутствующих возможностях?</H4>
|
||||
<H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках
|
||||
или отсутствующих возможностях?</H3>
|
||||
|
||||
<P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92.
|
||||
Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
|
||||
на предмет известных ошибок, отсутствующих возможностей и будущих
|
||||
планов.</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=
|
||||
"http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A>
|
||||
научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на
|
||||
<A href="http://www.commandprompt.com/ppbook/">
|
||||
http://www.commandprompt.com/ppbook.</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>Многим из наших пользователей нравится книга
|
||||
<P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось
|
||||
выше. Еще один учебник - это книга "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>.
|
||||
Многим из наших пользователей нравится книга
|
||||
<I>The Practical SQL Handbook</I>,
|
||||
Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The
|
||||
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>Существует ограниченный список людей, который имеют привелегию
|
||||
вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый
|
||||
из этих людей в свое время отправил так много высококачественных исправлений,
|
||||
что их было невозможно оставить без внимания и они были удостоены
|
||||
превилегии вносить изменения, и мы уверены, что те исправления, которые
|
||||
они внесут будут высокого качества.</P>
|
||||
<H3><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H3>
|
||||
|
||||
<H4><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими
|
||||
<SMALL>СУБД</SMALL>?</H4>
|
||||
<P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
|
||||
FAQ для разработчиков</A>.</P>
|
||||
|
||||
|
||||
<H3><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими
|
||||
<SMALL>СУБД</SMALL>?</H3>
|
||||
|
||||
<P>
|
||||
Существует несколько методов сравнения программного обеспечения:
|
||||
@ -348,14 +326,8 @@
|
||||
|
||||
<DD>Производительность PostgreSQL сходна с другими коммерческими
|
||||
СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
|
||||
в каких-то медленнее. В сравнении с MySQL или линейной
|
||||
СУБД, мы быстрее, когда пользователей много, а также на сложных
|
||||
запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых
|
||||
SELECT запросов, выполняемых небольшим количеством пользователей.
|
||||
И разумеется, MySQL не имеет каких-либо возможностей из
|
||||
перечисленых выше, в секции <I>Возможности</I>.
|
||||
Мы делаем упор на надежность и расширенные возможности, но мы также
|
||||
продолжаем увеличивать производительность с каждым выпуском. <BR>
|
||||
в каких-то медленнее. Наша производительности обычно +/-10% по
|
||||
сравнению с другими СУБД.
|
||||
<BR>
|
||||
</DD>
|
||||
|
||||
@ -396,10 +368,25 @@
|
||||
</DD>
|
||||
</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> и встроенный
|
||||
(embedded) <small>C</small> интерфейсы. Все другие интерфейсы
|
||||
@ -414,8 +401,8 @@
|
||||
в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P>
|
||||
|
||||
|
||||
<H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования
|
||||
PostgreSQL через Web?</H4>
|
||||
<H3><A name="2.2">2.2</A>) Какие инструменты существуют для использования
|
||||
PostgreSQL через Web?</H3>
|
||||
|
||||
<P>Прекрасное введение во взаимодействие баз данных и Web можно найти на:
|
||||
<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">
|
||||
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 графический интерфейс
|
||||
пользователя?</H4>
|
||||
<H3><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс
|
||||
пользователя?</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>
|
||||
|
||||
<H2 align="center">Вопросы администрирования</H2>
|
||||
|
||||
<H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
|
||||
от <I>/usr/local/pgsql</I>?</H4>
|
||||
<H3><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное
|
||||
от <I>/usr/local/pgsql</I>?</H3>
|
||||
|
||||
<P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P>
|
||||
|
||||
<H4><A name="3.2">3.2</A>) Как мне управлять соединениями с других
|
||||
компьютеров?</H4>
|
||||
<H3><A name="3.2">3.2</A>) Как мне управлять соединениями с других
|
||||
компьютеров?</H3>
|
||||
|
||||
<P>По умолчанию, PostgreSQL разрешает только соединения на локальной
|
||||
машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
|
||||
@ -458,8 +438,8 @@
|
||||
host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать
|
||||
сервер.</P>
|
||||
|
||||
<H4><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
|
||||
производительности?</H4>
|
||||
<H3><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения
|
||||
производительности?</H3>
|
||||
|
||||
<P>Существует три главных области, которые потенциально могут
|
||||
увеличить производительность:</P>
|
||||
@ -510,55 +490,17 @@
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<H4><A name="3.4">3.4</A>) Какие возможности для отладки есть в
|
||||
наличии?</H4>
|
||||
<H3><A name="3.4">3.4</A>) Какие возможности для отладки есть в
|
||||
наличии?</H3>
|
||||
|
||||
<P>Есть множество установок в настройках сервера, начинающихся
|
||||
на <code>log_*</code>, позволяющих протоколировать запросы
|
||||
и статистику работы процесса, которая очень полезна для отладки
|
||||
и измерения производительности.</P>
|
||||
|
||||
<P><B>Для предоставления более детальной информации разработчикам
|
||||
сервера при отладке какой-либо проблемы должны пользоваться
|
||||
следующие инструкции.</B></P>
|
||||
|
||||
<P>Таким же образом можно производить и отладку севера, если он
|
||||
работает неправильно. Во-первых, при запуске <I>configure</I> с
|
||||
опцией --enable-cassert, многие вызовы <I>assert()</I> позволяют
|
||||
отслеживать работу backend процесса и остановку программы при
|
||||
возникновении каких-либо неожиданностей.</P>
|
||||
|
||||
<P>Если <I>postmaster</I> не запущен, вы можете запустить
|
||||
<I>postgres</I> backend из командной строки и ввести ваш оператор
|
||||
<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>
|
||||
<H3><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too
|
||||
many clients"</I> когда пытаюсь подключиться к базе?</H3>
|
||||
|
||||
<P>Вы достигли установленного по умолчанию ограничения на 100 сессий
|
||||
подключения к базе данных. Вам необходимо увеличить для
|
||||
@ -567,11 +509,11 @@
|
||||
и перестартовать <I>postmaster</I>.</P>
|
||||
|
||||
|
||||
<H4><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при
|
||||
обновлении выпусков PostgreSQL?</H4>
|
||||
<H3><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при
|
||||
обновлении выпусков PostgreSQL?</H3>
|
||||
|
||||
<P>Разработчики PostgreSQL делают только небольшие изменения между
|
||||
подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует
|
||||
подвыпусками. Таким образом обновление с версии 7.4.0 до 7.4.1 не требует
|
||||
выполнения dump и restore. Однако при выходе очередного выпуска
|
||||
(т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний
|
||||
формат системных таблиц и файлов данных. Эти изменения часто носят
|
||||
@ -585,8 +527,10 @@
|
||||
использования dump/restore. Комментарии к выпуску говорит когда можно
|
||||
использовать <i>pg_upgrade</i> для этого выпуска.</P>
|
||||
|
||||
<H4><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен
|
||||
использовать?</H4>
|
||||
|
||||
<H3><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен
|
||||
использовать?</H3>
|
||||
|
||||
<P>Поскольку "железо" персональных компьютеров является наиболее
|
||||
совместимым, люди склонны верить, что такое "железо" имеет одинаковое
|
||||
качество. Это не так. Память ECC, SCSI и качественные материнские платы
|
||||
@ -600,26 +544,27 @@
|
||||
|
||||
<H2 align="center">Вопросы эксплуатации</H2>
|
||||
|
||||
<H4><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
|
||||
для нескольких первых строчек запроса? Произвольной строки?</H4>
|
||||
<H3><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только
|
||||
для нескольких первых строчек запроса? Произвольной строки?</H3>
|
||||
|
||||
<P>Для получения только нескольких строк, если вы знаете их количество
|
||||
на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.
|
||||
на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.</P>
|
||||
Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>,
|
||||
то возможно, что весь запрос выполнен и не будет. Если вы не знаете
|
||||
количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>,
|
||||
используйте курсор и <SMALL>FETCH</SMALL>.</P>
|
||||
|
||||
<p>To <small>SELECT</small> a random row, use:</p>
|
||||
<pre> SELECT col
|
||||
<P>To <small>SELECT</small> a random row, use:</P>
|
||||
<PRE> SELECT col
|
||||
FROM tab
|
||||
ORDER BY random()
|
||||
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.
|
||||
Полный список команд в <I>psql</I> вы можете получить, используя \?.
|
||||
@ -642,7 +587,7 @@
|
||||
для получения информации из системных таблиц базы данных.</P>
|
||||
|
||||
|
||||
<H4><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H4>
|
||||
<H3><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H3>
|
||||
|
||||
<P>В 8.0 и более поздних версиях, изменение типа колонки выполняется
|
||||
очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
|
||||
@ -656,13 +601,12 @@
|
||||
COMMIT;
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
|
||||
таблиц и базы данных?</H4>
|
||||
<H3><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице,
|
||||
таблиц и базы данных?</H3>
|
||||
|
||||
<P>Существуют следующие ограничения:</P>
|
||||
<BLOCKQUOTE>
|
||||
<TABLE>
|
||||
<TBODY>
|
||||
<TR>
|
||||
<TD>Максимальный размер базы?</TD>
|
||||
<TD>неограничен (существуют базы на 32 TB)</TD>
|
||||
@ -691,7 +635,6 @@
|
||||
<TD>Максимальное количество индексов в таблице?</TD>
|
||||
<TD>неограничено</TD>
|
||||
</TR>
|
||||
</TBODY>
|
||||
</TABLE>
|
||||
</BLOCKQUOTE>
|
||||
<BR>
|
||||
@ -709,8 +652,8 @@
|
||||
могут быть увеличены в четыре раза, если размер блока по умолчанию будет
|
||||
увеличен до 32k.</P>
|
||||
|
||||
<H4><A name="4.5">4.5</A>) Как много дискового пространства в базе данных
|
||||
нужно для сохранения данных из обычного текстового файла?</H4>
|
||||
<H3><A name="4.5">4.5</A>) Как много дискового пространства в базе данных
|
||||
нужно для сохранения данных из обычного текстового файла?</H3>
|
||||
|
||||
<P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
|
||||
больше для сохранения данных из простого текстового файла.</P>
|
||||
@ -747,10 +690,10 @@
|
||||
занимают очень мало места.
|
||||
</P>
|
||||
|
||||
<H4><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему
|
||||
они не используют мои индексы?</H4>
|
||||
<H3><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему
|
||||
они не используют мои индексы?</H3>
|
||||
|
||||
<P>Индексы не используются для каждого запроса автоматически. Они
|
||||
<P>Индексы не используются для каждого запроса. Они
|
||||
используются только если таблица больше минимального размера и запрос
|
||||
выбирает только маленький процент строк в таблице. Так устроено,
|
||||
потому что доступ к диску с применением рандомизации при сканировании
|
||||
@ -774,17 +717,18 @@
|
||||
и в этом случае индекс будет использоваться, поскольку при выполнении
|
||||
будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не
|
||||
используют индексы, но индекс используется при построении запросов с
|
||||
<SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:</P>
|
||||
<pre>
|
||||
<SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:
|
||||
<PRE>
|
||||
SELECT col
|
||||
FROM tab
|
||||
ORDER BY col [ DESC ]
|
||||
LIMIT 1;
|
||||
</pre>
|
||||
</PRE>
|
||||
|
||||
<P>Если вам кажется, что оптимизатор некорректно выбирает последовательный
|
||||
перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и
|
||||
запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее.
|
||||
запустите запрос снова, чтобы увидеть, действительно ли сканирование
|
||||
индексов быстрее.
|
||||
</P>
|
||||
|
||||
<P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL>
|
||||
@ -810,15 +754,15 @@
|
||||
если типы данных точно не совпадали с индексными типами колонок. Это
|
||||
особенно касалось int2, int8 и numeric индексов колонок.</P>
|
||||
|
||||
<H4><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
|
||||
мой запрос?</H4>
|
||||
<H3><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет
|
||||
мой запрос?</H3>
|
||||
|
||||
<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> производит поиск регулярного выражения, а оператор
|
||||
<I>~*</I> производит независимый от регистра букв поиск регулярного
|
||||
@ -832,23 +776,40 @@
|
||||
WHERE lower(col) = 'abc';
|
||||
</PRE>
|
||||
|
||||
<P> Эта конструкция не будет использовать стандартный индекс. Однако, если
|
||||
вы создадите индекс выражения, он будет использован:</P>
|
||||
Эта конструкция не будет использовать стандартный индекс. Однако, если
|
||||
вы создадите индекс выражения, он будет использован:
|
||||
<PRE>
|
||||
CREATE INDEX tabindex ON tab (lower(col));
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.9">4.9</A>) Как я могу определить, что значение поля
|
||||
равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4>
|
||||
<H3><A name="4.9">4.9</A>) Как мне определить, что значение поля равно
|
||||
<SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля
|
||||
<SMALL>NULL</SMALL> или нет?</H3>
|
||||
|
||||
<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>) Каковы отличия между разными символьными
|
||||
типами?</H4>
|
||||
<P>Чтобы отсортировать данные по значению <NULL> используйте модификаторы
|
||||
<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>
|
||||
<TABLE>
|
||||
<TBODY>
|
||||
<TR>
|
||||
<TH>Тип</TH>
|
||||
<TH>Внутреннее имя</TH>
|
||||
@ -879,7 +840,6 @@
|
||||
<TD>char</TD>
|
||||
<TD>один символ</TD>
|
||||
</TR>
|
||||
</TBODY>
|
||||
</TABLE>
|
||||
</BLOCKQUOTE>
|
||||
|
||||
@ -889,8 +849,7 @@
|
||||
<P>Первые четыре типа являются "varlena" типами (т.е., первые
|
||||
четыре байта на диске являются длинной, за которой следуют данные).
|
||||
Таким образом, фактически используемое пространство больше, чем
|
||||
обозначенный размер. Однако, эти типы данных также поддаются сжатию
|
||||
или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>,
|
||||
обозначенный размер. Однако, длинные значения также сжимаются,
|
||||
так что занимаемое дисковое пространство может также быть и меньше,
|
||||
чем ожидалось.</P>
|
||||
|
||||
@ -906,8 +865,8 @@
|
||||
которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные
|
||||
здесь, имеют сходные характеристики производительности.</P>
|
||||
|
||||
<H4><A name="4.11.1">4.11.1</A>) Как мне создать поле
|
||||
serial/с-авто-увеличением?</H4>
|
||||
<H3><A name="4.11.1">4.11.1</A>) Как мне создать поле
|
||||
serial/с-авто-увеличением?</H3>
|
||||
|
||||
<P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он
|
||||
автоматически создает последовательность. Например:</P>
|
||||
@ -918,7 +877,7 @@
|
||||
);
|
||||
</PRE>
|
||||
|
||||
<P> автоматически транслируется в: </P>
|
||||
автоматически транслируется в:
|
||||
<PRE>
|
||||
CREATE SEQUENCE person_id_seq;
|
||||
CREATE TABLE person (
|
||||
@ -930,8 +889,8 @@
|
||||
Смотрите подробности о последовательностях на странице руководства
|
||||
посвященной <I>create_sequence</I>.
|
||||
|
||||
<H4><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке
|
||||
<SMALL>SERIAL</SMALL>?</H4>
|
||||
<H3><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке
|
||||
<SMALL>SERIAL</SMALL>?</H3>
|
||||
|
||||
<P>Один из способов состоит в получении следующего значения
|
||||
<SMALL>SERIAL</SMALL> из объекта sequence с помощью функции
|
||||
@ -960,16 +919,16 @@
|
||||
</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> приведет к
|
||||
зациклированию с другими пользователями?</H4>
|
||||
зациклированию с другими пользователями?</H3>
|
||||
|
||||
<P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей
|
||||
сессией, а не другими сессиями.</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>Для реализации конкуретности, значения последовательностей, при
|
||||
необходимости выдаются во время запуска транзакций и не блокируются
|
||||
@ -977,8 +936,8 @@
|
||||
нумерации при отмене транзакций.</P>
|
||||
|
||||
|
||||
<H4><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
|
||||
<SMALL>TID</SMALL>?</H4>
|
||||
<H3><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое
|
||||
<SMALL>CTID</SMALL>?</H3>
|
||||
|
||||
<P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный
|
||||
индентификатор <SMALL>OID</SMALL> за исключением случая когда
|
||||
@ -993,17 +952,17 @@
|
||||
O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL>
|
||||
уникальны только внутри таблицы и таким образом меньше подвержены
|
||||
переполнению. Для хранения значений 8-ми байтной последовательности
|
||||
доступен тип <SMALL>SERIAL8</SMALL>.</P>
|
||||
доступен тип <SMALL>SERIAL8</SMALL>.
|
||||
|
||||
<P>T<SMALL>ID</SMALL> используется для идентификации специальных
|
||||
физических записей с блочными и offset значениями. T<SMALL>ID</SMALL>
|
||||
<P>C<SMALL>TID</SMALL> используется для идентификации специальных
|
||||
физических записей с блочными и offset значениями. C<SMALL>TID</SMALL>
|
||||
изменяется после того как строки в таблице были изменены или перегружены.
|
||||
T<SMALL>ID</SMALL> используется индексными записями в качестве
|
||||
<P>T<SMALL>ID</SMALL> используется индексными записями в качестве
|
||||
указателя на физические записи.</P>
|
||||
|
||||
|
||||
<H4><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
|
||||
exhausted in AllocSetAlloc()"</I>?</H4>
|
||||
<H3><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory
|
||||
exhausted in AllocSetAlloc()"</I>?</H3>
|
||||
|
||||
<P>Предположительно у вас закончилась виртуальная память
|
||||
или что ваше ядро имеет маленький лимит на определенные ресурсы.
|
||||
@ -1022,38 +981,21 @@
|
||||
клиентом, потому что backend возвращает слишком большой объем данных,
|
||||
попытайтесь выполнить эту команду перед запуском клиента.
|
||||
|
||||
<H4><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
|
||||
запущена?</H4>
|
||||
<H3><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL
|
||||
запущена?</H3>
|
||||
|
||||
<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>Вам нужно при использовании большого объекта поместить в начале
|
||||
<CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри
|
||||
получившегося блока <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>
|
||||
<H3><A name="4.15">4.15</A>) Как мне создать колонку которая по умолчанию
|
||||
будет содержать текущее время?</H3>
|
||||
|
||||
<P>Используйте <I>CURRENT_TIMESTAMP</I>:</P>
|
||||
<PRE>
|
||||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
</PRE>
|
||||
|
||||
<H4><A name="4.17">4.17</A>) Как мне выполнить внешнее связывание?</H4>
|
||||
<H3><A name="4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3>
|
||||
|
||||
<P>PostgreSQL поддерживает внешнее связывание,
|
||||
используя стандартный синтаксис SQL. Вот два примера:</P>
|
||||
@ -1077,8 +1019,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
<SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные
|
||||
связывания называются <SMALL>INNER</SMALL> связывания.</P>
|
||||
|
||||
<H4><A name="4.18">4.18</A>) Как выполнять запросы, использующие несколько
|
||||
баз данных?</H4>
|
||||
<H3><A name="4.17">4.17</A>) Как выполнять запросы, использующие несколько
|
||||
баз данных?</H3>
|
||||
|
||||
<P>Не существует способа создать запрос к базам данных отличным от текущей.
|
||||
Поскольку PostgreSQL загружает системные каталоги специфичные для базы
|
||||
@ -1089,14 +1031,16 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
соедиенения с различными базами данных и таких образом объединять
|
||||
информацию из них.</P>
|
||||
|
||||
<H4><A name="4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?</H4>
|
||||
<H3><A name="4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3>
|
||||
|
||||
<P>Вы можете легко использовать функции, возвращающие список,
|
||||
<A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
||||
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 кэширует сценарии функции и один из негативных эффектов этого
|
||||
состоит в том, что если функция PL/PgSQL обращается к временной таблице
|
||||
и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
|
||||
@ -1106,53 +1050,26 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||||
таблицам в PL/PgSQL. Использование этого оператора заставит запрос
|
||||
перегенерироваться каждый раз.</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>) Я написал функцию определяемую пользователем.
|
||||
Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?</H4>
|
||||
|
||||
<P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва
|
||||
протестировать вашу функцию в отдельной самостоятельной программе.</P>
|
||||
|
||||
<H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые
|
||||
типы и функции в PostgreSQL?</H4>
|
||||
|
||||
<P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I>
|
||||
и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P>
|
||||
|
||||
<H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую
|
||||
строку таблицы?</H4>
|
||||
|
||||
<P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы
|
||||
полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в
|
||||
Руководстве Программиста. Пример возвращающей таблицу функции,
|
||||
написанной на 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>
|
||||
<P>Хотя "репликация" -- это единый термин, есть несколько разных технологий
|
||||
для выполнения репликаций с разными особенностями для каждой.</P>
|
||||
|
||||
<P>Репликация Master/slave позволяет иметь один главный (master) сервер
|
||||
для выполнения запросов чтения/записи, в то время как подчинённые
|
||||
(slave) сервера могут производить только запросы
|
||||
чтения/<SMALL>SELECT</SMALL>. Наиболее популярным решением для репликации
|
||||
master-slave в PostgreSQL является
|
||||
<A href="http://gborg.postgresql.org/project/slony1/projdisplay.php">
|
||||
Slony-I</A>.</P>
|
||||
|
||||
<P>Репликация Multi-master позволяет выполнять запросы чтения/записи
|
||||
на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность
|
||||
также приводит к потере производительности, потому что необходима
|
||||
синхронизация изменений между несколькими серверами. Наиболее
|
||||
популярным решением для такой репликации в PostgreSQL является
|
||||
<A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</A>.
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
Loading…
Reference in New Issue
Block a user