]> granicus.if.org Git - postgresql/blob - doc/FAQ_russian
Create hooks to let a loadable plugin monitor (or even replace) the planner
[postgresql] / doc / FAQ_russian
1
2                Otvety na chasto zadavaemye voprosy po PostgreSQL
3                                        
4    Data poslednego obnovleniya: Voskresen'e 18 iyunya 15:33:25 EDT 2006
5    
6    Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian)
7    (pgman@candle.pha.pa.us)
8    
9    Pereviol na russkij: Viktor Vislobokov (admin@linuxshare.ru)
10    
11    Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na
12    http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html.
13    
14    Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti
15    na http://www.PostgreSQL.org/docs/faq/.
16      _________________________________________________________________
17    
18                               Obschie voprosy
19                                       
20    1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie?
21    1.2) Kto upravlyaet PostgreSQL?
22    1.3) Kakovy avtorskie prava na PostgreSQL?
23    1.4) Na kakih platformah rabotaet PostgreSQL?
24    1.5) Gde mozhno vzyat' PostgreSQL?
25    1.6) Kakaya versiya naibolee svezhaya?
26    1.7) Gde poluchit' podderzhku?
27    1.8) Kak mne soobschit' ob oshibke?
28    1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
29    vozmozhnostyah?
30    1.10) Kakaya dokumentaciya imeetsya v nalichii?
31    1.11) Kak nauchit'sya SQL?
32    1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande
33    razrabotchikov?
34    1.13) Kak sravnit' PostgreSQL s drugimi SUBD?
35    
36                  Voprosy pol'zovatelej po klientskoj chasti
37                                       
38    2.1) Kakie interfejsy est' dlya PostgreSQL?
39    2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL
40    cherez Web?
41    2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
42    
43                          Voprosy administrirovaniya
44                                       
45    3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot
46    /usr/local/pgsql?
47    3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov?
48    3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
49    proizvoditel'nosti?
50    3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
51    3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
52    pytayus' podklyuchit'sya k baze?
53    3.6) Kak vypolnit' obnovlenie PostgreSQL?
54    3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'?
55    
56                            Voprosy `ekspluatacii
57                                       
58    4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek
59    zaprosa? Dlya proizvol'noj stroki?
60    4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli
61    suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya
62    polucheniya `etoj informacii?
63    4.3) Kak izmenit' tip dannyh kolonki?
64    4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy
65    dannyh?
66    4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya
67    sohraneniya dannyh iz obychnogo tekstovogo fajla?
68    4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut
69    moi indeksy?
70    4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
71    4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk
72    nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne
73    ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv?
74    4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
75    zaprose? Mogu ya otsortirovat' polya NULL ili net?
76    4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
77    4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
78    4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
79    4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
80    nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
81    4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya
82    snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii
83    v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL?
84    4.12) CHto takoe OID? CHto takoe CTID?
85    4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
86    AllocSetAlloc()"?
87    4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
88    4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
89    tekuschee vremya?
90    4.16) Kak vypolnit' vneshnee svyazyvanie?
91    4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
92    4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
93    4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne
94    suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah
95    PL/PgSQL?
96    4.20) Kakie est' resheniya dlya replikacii?
97    4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom
98    zaprose?
99      _________________________________________________________________
100    
101                               Obschie voprosy
102                                       
103   1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie?
104   
105    PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El), takzhe
106    inogda govoryat prosto Postgres. Vy mozhete uslyshat' kak `eto
107    proiznositsya s pomosch'yu audiofajla, kotoryj dostupen v formate MP3.
108    
109    PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami
110    dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih
111    SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya.
112    PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe
113    obespechenie.
114    
115    Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya
116    po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya
117    obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej.
118    Podrobnosti smotrite v FAQ dlya razrabotchikov,
119    http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html
120    
121   1.2) Kto upravlyaet PostgreSQL?
122   
123    Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet
124    ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est'
125    yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy
126    sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya.
127    Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva
128    razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya
129    kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i
130    uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v
131    razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.)
132    
133   1.3) Kakovy avtorskie prava na PostgreSQL?
134   
135    PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta
136    licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya
137    ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio
138    menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem:
139    
140    Sistema Upravleniya Bazami Dannyh PostgreSQL
141    
142    Portions copyright (c) 1996-2006, PostgreSQL Global Development Group
143    Portions Copyright (c) 1994-1996 Regents of the University of
144    California
145    
146    Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i
147    rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii
148    dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo
149    soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny
150    dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva
151    sleduyuschih paragrafa.
152    
153    KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE
154    POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI
155    NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO
156    PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI
157    KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH
158    POVREZHDENIJ.
159    
160    KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT'
161    LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI
162    GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA
163    OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA
164    OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN
165    PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA
166    ILI IZMENENIYA.
167    
168   1.4) Na kakih platformah rabotaet PostgreSQL?
169   
170    Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme
171    sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh
172    platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k
173    momentu vyhoda dannoj versii.
174    
175    PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows,
176    osnovannyh na NT, takih kak Win2000, WinXP i Win2003. Paket
177    installyatora dostupen po adresu
178    http://pgfoundry.org/projects/pginstaller. Versii Windows, osnovannye
179    na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s
180    pomosch'yu Cygwin.
181    
182    Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na
183    http://forge.novell.com, i versiya dlya OS/2 (eComStation) na
184    http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
185    SQL&stype=all&sort=type&dir=%2F.
186    
187   1.5) Gde mozhno vzyat' PostgreSQL?
188   
189    CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez
190    ftp, ispol'zuya ftp://ftp.PostgreSQL.org/pub/.
191    
192   1.6) Kakaya versiya naibolee svezhaya?
193   
194    Poslednij vypusk PostgreSQL - `eto versiya 8.1.4
195    
196    My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie
197    versii kazhdye neskol'ko mesyacev.
198    
199   1.7) Gde poluchit' podderzhku?
200   
201    Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu
202    pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski
203    rassylki po E-mail `eto: http://www.postgresql.org/community/lists/.
204    Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy
205    yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki).
206    
207    Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere
208    Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete
209    ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER"
210    irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere
211    suschestvuyut kanaly na ispanskom (#postgresql-es) i francuzskom
212    (#postgresqlfr) yazykah. Takzhe suschestvuet kanal po PostgreSQL na
213    servere EFNet.
214    
215    Spisok kommercheskoj podderzhki kompanij dostupen na
216    http://techdocs.postgresql.org/companies.php.
217    
218   1.8) Kak mne soobschit' ob oshibke?
219   
220    Posetite stranichku so special'noj formoj otchiota ob oshibke v
221    PostgreSQL po adresu: http://www.postgresql.org/support/submitbug.
222    Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem
223    FTP sajte ftp://ftp.PostgreSQL.org/pub/.
224    
225    Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu
226    formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL,
227    obychno generiruetsya odin iz sleduyuschih otvetov:
228      * `Eto ne oshibka i pochemu
229      * `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO
230      * Dannaya oshibka byla ispravlena v tekuschem vypuske
231      * Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v
232        oficial'nyj vypusk
233      * Zaprashivaetsya bolee detal'naya informaciya:
234           + Operacionnaya sistema
235           + Versiya PostgreSQL
236           + Test, vosproizvodyaschij oshibku
237           + Otladochnaya informaciya
238           + Vyvod backtrace otladchika
239      * `Eto novaya oshibka. Mozhet proizojti sleduyuschee:
240           + Budet sozdano ispravlenie, kotoroe budet vklyucheno v
241             sleduyuschij vypusk
242           + Oshibka ne mozhet byt' ispravlena nemedlenno i budet
243             dobavlena v spisok TODO
244        
245   1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
246   vozmozhnostyah?
247   
248    PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash
249    spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
250    vozmozhnostej i buduschih planov.
251    
252    Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie
253    otvety:
254      * Dannaya vozmozhnost' uzhe est' v spiske TODO
255      * Dannaya vozmozhnost' nezhelatel'na potomu chto:
256           + Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya
257             sleduet standartu SQL
258           + Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by
259             malen'kuyu vygodu
260           + Dannaya vozmozhnost' nebezopasna ili nenadiozhna
261      * Dannaya novaya vozmozhnost' dobavlena v spisok TODO
262        
263    PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok,
264    potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya
265    po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee
266    `effektivnym. Na praktike, oshibki v programmnom obespechenii
267    sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu
268    kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko
269    odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i
270    ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly
271    soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam
272    ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii.
273    
274   1.10) Kakaya dokumentaciya imeetsya v nalichii?
275   
276    PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe
277    rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye
278    malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete
279    prosmatrivat' dokumentaciyu v Internet po adresu
280    http://www.PostgreSQL.org/docs.
281    
282    Suschestvuet dve knigi po PostgreSQL dostupnye po adresam
283    http://www.PostgreSQL.org/docs/books/awbook.html i
284    http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po
285    PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh
286    napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam
287    dostupen po adresu
288    http://techdocs.postgresql.org/techdocs/bookreviews.php. Krome togo,
289    po adresu http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu
290    tehnicheskih statej posvyaschennyh PostgreSQL.
291    
292    Klient komandnoj stroki psql imeet neskol'ko komand \d dlya
293    otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i
294    t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand.
295    
296    Nash sajt soderzhit esche bol'she informacii.
297    
298   1.11) Kak mne nauchit'sya SQL?
299   
300    Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos'
301    vyshe. Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21
302    Days, Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
303    redakciya) na http://members.tripod.com/er4ebus/sql/index.htm. Mnogim
304    iz nashih pol'zovatelej nravitsya kniga The Practical SQL Handbook,
305    Bowman, Judith S., et al., Addison-Wesley. Drugim nravitsya The
306    Complete Reference SQL, Groff et al., McGraw-Hill.
307    
308    Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v
309    online:
310      * http://www.intermedia.net/support/sql/sqltut.shtm,
311      * http://sqlcourse.com.
312      * http://www.w3school.com/sql/default.asp
313      * http://mysite.verizon.net/Graeme_Birchall/id1.html
314        
315   1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande
316   razrabotchikov?
317   
318    Smotrite FAQ dlya razrabotchikov.
319    
320   1.13) Kak sravnit' PostgreSQL s drugimi SUBD?
321   
322    Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya:
323    vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena.
324    
325    Vozmozhnosti
326           PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v
327           bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy,
328           triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo
329           klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti,
330           kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm
331           nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie
332           dlya raboty s soderzhimym blokirovok.
333           
334    Proizvoditel'nost'
335           Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi
336           SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my
337           bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno
338           +/-10% po sravneniyu s drugimi SUBD.
339           
340    Nadezhnost'
341           My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona
342           nichego ne budet stoit'. My staraemsya vypuskat' horosho
343           proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok.
344           Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej
345           mere v techenii odnogo mesyaca i nasha istoriya vypuskov
346           pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye
347           vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My
348           verim, chto my proizvodim proverku ne huzhe, chem u drugih
349           SUBD.
350           
351    Podderzhka
352           Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya
353           s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye
354           mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe
355           vremya, my ne garantiruem kakie-libo ispravleniya, no i
356           razrabotchiki kommercheskih SUBD ne vsegda delayut
357           ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu
358           pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut
359           podderzhku PostgreSQL prevoshodyaschej drugie SUBD.
360           Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih
361           incidentov, kotoraya dostupna dlya teh komu ona nuzhna.
362           (Smotrite Sekciyu 1.7.)
363           
364    Cena
365           Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya
366           kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v
367           nash produkt bez ogranichenij, za isklyucheniem teh, chto
368           opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena
369           vyshe.
370      _________________________________________________________________
371    
372                  Voprosy pol'zovatelej po klientskoj chasti
373                                       
374   2.1) Kakie interfejsy est' dlya PostgreSQL?
375   
376    Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C
377    interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami
378    i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im
379    organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet'
380    sobstvennuyu komandu razrabotchikov.
381    
382    Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya
383    interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL,
384    Python i mnogih drugih, dostupny na http://gborg.postgresql.org v
385    sekcii Drivers/Interfaces, a takzhe cherez poisk v Internet.
386    
387   2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
388   Web?
389   
390    Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti
391    na: http://www.webreview.com
392    
393    Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim
394    interfejsom.
395    
396    V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili
397    mod_perl.
398    
399   2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
400   
401    Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s
402    graficheskim interfejsom kak kommercheskih, tak i otkrytyh.
403    Podrobnosti mozhno najti v Dokumentacii soobschestva PostgreSQL
404      _________________________________________________________________
405    
406                          Voprosy administrirovaniya
407                                       
408   3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql?
409   
410    Zadajte opciyu --prefix kogda zapuskaete configure.
411    
412   3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov?
413   
414    Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj
415    mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo,
416    chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny
417    izmenit' listen_addresses v postgresql.conf, razreshit'
418    host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server.
419    
420   3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti?
421   
422    Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut
423    uvelichit' proizvoditel'nost':
424    
425    Izmenenie zaprosa
426           `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej
427           proizvoditel'nosti:
428           
429           + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i
430             chastichnye indeksy
431           + Ispol'zovanie COPY vmesto mnozhestva INSERT
432           + Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya
433             umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii
434           + Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo
435             strok
436           + Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko
437             chast' vyvoda ot zaprosa
438           + Ispol'zovanie Podgotovlennyh (Prepared) zaprosov
439           + Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki
440             optimizatora
441           + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum
442           + Udalenie indeksov vo vremya bol'shih izmenenij dannyh
443             
444    Nastrojka servera
445           Nekotorye ustanovki v postgresql.conf vliyayut na
446           proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v
447           Administration Guide/Server Run-time Environment/Run-time
448           Configuration, a kommentarii sm. v
449           http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
450           nf_e.html i
451           http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
452           
453    Vybor "zheleza" - apparatnogo obespecheniya
454           Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v
455           http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
456           x.html i http://www.powerpostgresql.com/PerfList/.
457           
458   3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
459   
460    Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na
461    log_*, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty
462    processa, kotoraya ochen' polezna dlya otladki i izmereniya
463    proizvoditel'nosti.
464    
465   3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
466   pytayus' podklyuchit'sya k baze?
467   
468    Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya na 100 sessij
469    podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' dlya
470    postmaster limit na kolichestvo konkurentnyh backend processov,
471    izmeniv znachenie max_connections v fajle postgresql.conf i
472    perestartovat' postmaster.
473    
474   3.6) Kak vypolnit' obnovlenie PostgreSQL?
475   
476    Mezhdu podvypuskami, razrabotchiki PostgreSQL delayut tol'ko
477    ispravleniya oshibok. Takim obrazom obnovlenie s versii 7.4.8 do 7.4.9
478    ne trebuet vypolneniya dump i restore; dostatochno ostanovit' server,
479    ustanovit' obnovlionnye fajly SUBD i zapustit' server.
480    
481    Vse pol'zovateli dolzhny by obnovlyat'sya na naibolee svezhuyu
482    podversiyu kak tol'ko ona budet dostupna. V to vremya kak kazhdoe
483    obnovlenie podrazumevaet nekotoryj risk, podversii PostgreSQL
484    razrabytyvayutsya tol'ko dlya ispravleniya obschih oshibok s
485    minimal'nym riskom. Takim obrazom, vash risk svyazan tol'ko s samim
486    obnovleniem.
487    
488    Pri vyhode ocherednogo vypuska (t.e. pri obnovlenii naprimer, s 7.3 na
489    7.4) chasto menyaetsya vnutrennij format sistemnyh tablic i fajlov
490    dannyh. `Eti izmeneniya chasto nosyat slozhnyj harakter, tak chto my
491    ne obsluzhivaem obratnuyu sovmestimost' dlya fajlov dannyh. V `etih
492    sluchayah dlya obnovleniya bazy dannyh trebuetsya vypolnit'
493    dump/restore.
494    
495   3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'?
496   
497    Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee
498    sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet
499    odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye
500    materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee
501    luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL
502    budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny
503    nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro
504    postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo"
505    mozhno v nashih spiskah rassylki.
506      _________________________________________________________________
507    
508                            Voprosy `ekspluatacii
509                                       
510   4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
511   Proizvol'noj stroki?
512   
513    Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih
514    kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT.
515    Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to
516    vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete
517    kolichestva neobhodimyh strok na moment vypolneniya SELECT,
518    ispol'zujte kursor i FETCH.
519    
520    To SELECT a random row, use:
521     SELECT col
522     FROM tab
523     ORDER BY random()
524     LIMIT 1;
525
526   4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli
527   suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya
528   polucheniya `etoj informacii?
529   
530    CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj
531    spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo,
532    vy mozhete posmotret' ishodnyj kod psql v fajle
533    pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye
534    generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj
535    kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby
536    `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya
537    vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQL
538    sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy
539    mozhete sformirovat' zapros na poluchenie informacii o baze dannyh.
540    
541    Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_.
542    
543    Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh.
544    
545    Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet
546    mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz
547    sistemnyh tablic bazy dannyh.
548    
549   4.3) Kak izmenit' tip dannyh kolonki?
550   
551    V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya
552    ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE.
553    
554    V bolee rannih versiyah sdelajte tak:
555     BEGIN;
556     ALTER TABLE tab ADD COLUMN new_col new_data_type;
557     UPDATE tab SET new_col = CAST(old_col AS new_data_type);
558     ALTER TABLE tab DROP COLUMN old_col;
559     COMMIT;
560
561   4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh?
562   
563    Suschestvuyut sleduyuschie ogranicheniya:
564    
565    Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB)
566    Maksimal'nyj razmer tablicy? 32 TB
567    Maksimal'nyj razmer stroki? 400 Gb
568    Maksimal'nyj razmer polya? 1 GB
569    Maksimal'noe kolichestvo strok v tablice? neogranicheno
570    Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot
571    tipa
572    Maksimal'noe kolichestvo indeksov v tablice? neogranicheno
573    
574    Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya
575    dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda
576    znacheniya perechislennye vyshe neopravdano bol'shie, mozhet
577    postradat' proizvoditel'nost'.
578    
579    Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya
580    sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy
581    hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto
582    ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny.
583    
584    Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut
585    byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet
586    uvelichen do 32k.
587    
588    Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya
589    dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy
590    vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya
591    nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5
592    dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat'
593    slova vnutri kolonki.
594    
595   4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
596   dannyh iz obychnogo tekstovogo fajla?
597   
598    SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz
599    bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla.
600    
601    V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz
602    kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v
603    srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB.
604    Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit
605    priblizitel'no 5.6 MB iz kotoryh:
606     28 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no)
607   + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole
608   +  4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki
609    ----------------------------------------
610     56 bajt na stroku v tablice
611
612    Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto:
613
614    8192 bajt na stranicu
615    ---------------------   =  146 strok v tablice na stranicu BD (okruglionno)
616      56 bajt na stroku v tablice
617
618      100000 strok dannyh
619    ----------------------- =  685 stranic v BD (okruglionno)
620    146 strok v tablice na stranicu
621
622    685 stranic BD * 8192 bajt na stranicu = 5,611,520 bajt (5.6 MB)
623
624    Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya
625    bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki.
626    
627    Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut
628    ochen' malo mesta.
629    
630   4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi
631   indeksy?
632   
633    Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya
634    tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet
635    tol'ko malen'kij procent strok v tablice. Tak ustroeno, potomu chto
636    dostup k disku s primeneniem randomizacii pri skanirovanii indeksov
637    mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee
638    posledovatel'noe skanirovanie.
639    
640    CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo
641    tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta
642    statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto
643    ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo
644    strok v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet
645    prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie
646    optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Pri
647    izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor
648    statistiki.
649    
650    Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya
651    svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj
652    sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj
653    tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom
654    sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet
655    vozvraschat'sya nebol'shaya chast' tablicy.
656    
657    Esli vam kazhetsya, chto optimizator nekorrektno vybiraet
658    posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i
659    zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie
660    indeksov bystree.
661    
662    Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~,
663    indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah:
664      * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki,
665        t.e.:
666           + LIKE shablony ne dolzhny nachinat'sya s %..
667           + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^.
668      * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e.
669        [a-e].
670      * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet
671        indeksy. Vmesto nego, ispol'zujte indeksy vyrazhenij, kotorye
672        opisyvayutsya v sekcii 4.8.
673      * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C,
674        potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij
675        naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih
676        sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj
677        rabotaet tol'ko dlya LIKE indeksirovaniya.
678        
679    V vypuskah do versii 8.0, indeksy chasto nel'zya bylo ispol'zovat',
680    esli tipy dannyh tochno ne sovpadali s indeksnymi tipami kolonok. `Eto
681    osobenno kasalos' int2, int8 i numeric indeksov kolonok.
682    
683   4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
684   
685    Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN.
686    
687   4.8) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot
688   registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks
689   dlya poiska nezavisimogo ot registra bukv?
690   
691    Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~*
692    proizvodit nezavisimyj ot registra bukv poisk regulyarnogo
693    vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE.
694    
695    Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak:
696     SELECT *
697     FROM tab
698     WHERE lower(col) = 'abc';
699
700    `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako,
701    esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan:
702     CREATE INDEX tabindex ON tab (lower(col));
703
704    Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya
705    kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem
706    registre, indes ne mozhet imet' identichnyh znachenij, kotorye
707    otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit'
708    simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie
709    CHECK ili proverku cherez trigger.
710    
711   4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo
712   zaprose? Mogu ya otsortirovat' polya NULL ili net?
713   
714    Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes':
715    SELECT *
716    FROM tab
717    WHERE col IS NULL;
718
719    CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS
720    NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat'
721    znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya
722    lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu:
723    SELECT *
724    FROM tab
725    ORDER BY (col IS NOT NULL);
726
727   4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
728   
729    Tip Vnutrennee imya Zamechaniya
730    VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya
731    CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny
732    TEXT text net zadavaemogo verhnego ogranicheniya ili dliny
733    BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat'
734    null-bajt bez opaski)
735    "char" char odin simvol
736    
737    Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi
738    i v nekotoryh soobscheniyah ob oshibkah.
739    
740    Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye
741    chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut
742    dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she,
743    chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe
744    szhimayutsya, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe
745    byt' i men'she, chem ozhidalos'.
746    VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki
747    peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT -
748    `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no
749    dopustimoj dlinoj v 1 gigabajt.
750    
751    CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno
752    imeyut odinakovuyu dlinu. CHAR(n) zapolnyaetsya pustotoj do zadannoj
753    dliny, v to vremya kak VARCHAR(n) hranit tol'ko simvoly, iz kotoryh
754    sostoit stroka. BYTEA ispol'zuetsya dlya hraneniya binarnyh dannyh,
755    znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye
756    zdes', imeyut shodnye harakteristiki proizvoditel'nosti.
757    
758   4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
759   
760    PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet
761    posledovatel'nost'. Naprimer:
762     CREATE TABLE person (
763         id   SERIAL,
764         name TEXT
765     );
766
767    avtomaticheski transliruetsya v:
768     CREATE SEQUENCE person_id_seq;
769     CREATE TABLE person (
770         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
771         name TEXT
772     );
773
774    Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva
775    posvyaschennoj create_sequence.
776    
777   4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
778   
779    Odin iz sposobov sostoit v poluchenii sleduyuschego znacheniya SERIAL
780    iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i
781    zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v
782    4.11.1, primer v psevdoyazyke pokazhet kak `eto delaetsya:
783     new_id = execute("SELECT nextval('person_id_seq')");
784     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
785
786    Zatem vy dolzhny takzhe sohranit' novoe znachenie v peremennoj new_id
787    dlya ego ispol'zovaniya v drugih zaprosah (naprimer takih kak vneshnij
788    klyuch dlya tablicy person). Zametim, chto imya avtomaticheski
789    sozdannogo ob"ekta SEQUENCE budet <table>_<serialcolumn>_seq, gde
790    table i serialcolumn yavlyayutsya sootvetstvenno imenami vashej
791    tablicy i vashej kolonki SERIAL.
792    
793    V kachestve al'ternativy, vy mozhete poluchit' naznachennoe znachenie
794    SERIAL s pomosch'yu funkcii currval() posle provedeniya obychnoj
795    operacii vstavki, naprimer
796     execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
797     new_id = execute("SELECT currval('person_id_seq')");
798
799   4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
800   nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
801   
802    Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej
803    sessiej, a ne drugimi sessiyami.
804    
805   4.11.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri
806   otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde
807   ya ispol'zuyu posledovatel'nost'/SERIAL?
808   
809    Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri
810    neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne
811    blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat'
812    razryvy v numeracii pri otmene tranzakcij.
813    
814   4.12) CHto takoe OID? CHto takoe CTID?
815   
816    Kazhdaya, sozdavaemaya v PostgreSQL tablichnaya stroka, poluchaet
817    unikal'nyj indentifikator OID za isklyucheniem sluchaya kogda
818    ispol'zovalos' WITHOUT OIDS. OID - `eto avtomaticheski naznachaemoe
819    unikal'noe 4-h bajtovoe celoe chislo. Odnako, posle togo kak ego
820    znachenie prevysit 4 milliarda, znacheniya OID nachinayut
821    dublirovat'sya. PostgreSQL ispol'zuet OID dlya svyazyvaniya svoih
822    vnutrennih tablic.
823    
824    Dlya unikal'nyh znachenij v kolonkah tablicy pol'zovatelya, luchshim
825    sposobom yavlyaetsya ispol'zovanie SERIAL vmesto OID, potomu chto
826    posledovatel'nosti SERIAL unikal'ny tol'ko vnutri tablicy i takim
827    obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij
828    8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8.
829    
830    CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej
831    s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak
832    stroki v tablice byli izmeneny ili peregruzheny.
833    
834    TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
835    fizicheskie zapisi.
836    
837   4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
838   AllocSetAlloc()"?
839   
840    Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto
841    vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes'
842    pered zapuskom postmaster vypolnit' sleduyuschie komandy:
843     ulimit -d 262144
844     limit datasize 256m
845
846    V zavisimosti ot komandnogo interpretatora shell, tol'ko odna iz
847    dannyh komand vypolnitsya uspeshno, no ona pozvolit vam ustanovit'
848    bol'shij segment dannyh processa i vozmozhno reshit problemu. `Eta
849    komanda izmenyaet parametry tekuschego processa i vseh ego potomkov,
850    sozdannyh posle eio zapuska. Esli u vas voznikla problema s SQL
851    klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em
852    dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta.
853    
854   4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
855   
856    Iz psql, naberite SELECT version();
857    
858   4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
859   tekuschee vremya?
860   
861    Ispol'zujte CURRENT_TIMESTAMP:
862 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
863
864   4.16) Kak mne vypolnit' vneshnee svyazyvanie?
865   
866    PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj
867    sintaksis SQL. Vot dva primera:
868     SELECT *
869     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
870
871    ili
872     SELECT *
873     FROM t1 LEFT OUTER JOIN t2 USING (col);
874
875    `Eto identichnye zaprosy svyazyvaniya t1.col i t2.col, takzhe
876    vozvraschayut lyubye nesvyazannye stroki v t1 (kotorye ne sovpadayut s
877    t2). RIGHT svyazyvanie dolzhno dobavit' nesvyazannye stroki t2. FULL
878    svyazyvanie dolzhno vozvratit' sovpavshie stroki plyus vse
879    nesvyazannye stroki iz t1 i t2. Slovo OUTER yavlyaetsya
880    neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah.
881    Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya.
882    
883   4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
884   
885    Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot
886    tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi
887    specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya
888    vesti takoj mezhbazovyj zapros.
889    
890    contrib/dblink pozvolyaet zaprosy mezhdu bazami, ispol'zuya vyzovy
891    funkcij. Razumeetsya, klient mozhet odnovremenno takzhe ustanavlivat'
892    soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat'
893    informaciyu iz nih.
894    
895   4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
896   
897    Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok,
898    http://techdocs.postgresql.org/guides/SetReturningFunctions.
899    
900   4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet",
901   kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL?
902   
903    PL/PgSQL k`eshiruet scenarii funkcii i odin iz negativnyh `effektov
904    `etogo sostoit v tom, chto esli funkciya PL/PgSQL obraschaetsya k
905    vremennoj tablice i `eta tablica pozdnee udalyaetsya i peresozdaetsya,
906    a funkciya zatem vyzyvaetsya snova, to ee vyzov privedet k oshibke,
907    potomu chto sk`eshirovannoe soderzhimoe funkcii soderzhit ukazatel' na
908    staruyu vremennuyu tablicu. CHtoby reshit' `etu problemu, ispol'zujte
909    EXECUTE dlya dostupa k vremennym tablicam v PL/PgSQL. Ispol'zovanie
910    `etogo operatora zastavit zapros peregenerirovat'sya kazhdyj raz.
911    
912   4.20) Kakie est' resheniya dlya replikacii?
913   
914    Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh
915    tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya
916    kazhdoj.
917    
918    Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server
919    dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak
920    podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy
921    chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii
922    master-slave v PostgreSQL yavlyaetsya Slony-I.
923    
924    Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi
925    na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta
926    osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto
927    neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami.
928    Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL
929    yavlyaetsya Pgcluster.
930    
931   4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom zaprose?
932   
933    Naibolee chasto `eto proishodit iz-za ispol'zovaniya dvojnyh kavychek
934    v imeni tablicy ili kolonki pri sozdanii tablicy. Pri ispol'zovanii
935    dvojnyh kavychek, imya tablicy i kolonki (kotorye nazyvayut
936    identifikatorami) sohranyayutsya v registro-zavisimom vide; `eto
937    oznachaet, chto vy dolzhny ispol'zovat' dvojnye kavychki, kogda
938    ukazyvaete `eti imena v zaprose. Nekotorye interfejsy, takie kak
939    pgAdmin, vo vremya sozdaniya tablicy dobavlyayut dvojnye kavychki
940    avtomaticheski. Takim obrazom, chtoby identifikatory raspoznavalis' vy
941    dolzhny sledovat' odnomu iz sleduyuschih pravil:
942      * Izbegat' ispol'zovaniya dvojnyh kavychek pri sozdanii tablic
943      * Ispol'zovat' v identifikatorah tol'ko simvoly nizhnego registra
944      * Ispol'zovat' dvojnye kavychki dlya identifikatorov v zaprosah