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