2 Otvety na chasto zadavaemye voprosy po PostgreSQL
4 Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008
6 Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian)
9 Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net)
11 Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na
12 http://www.postgresql.org/files/documentation/faqs/FAQ.html.
14 Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na
15 http://postgresql.ru.net/docs/FAQ_russian.html.
17 Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti
18 na http://www.postgresql.org/docs/faq/.
19 _________________________________________________________________
23 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto
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
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
38 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL
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?
45 Voprosy pol'zovatelej po klientskoj chasti
47 2.1) Kakie interfejsy est' dlya PostgreSQL?
48 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL
50 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
52 Voprosy administrirovaniya
54 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot
56 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov?
57 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
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'?
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
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
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'
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
97 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
98 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
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
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 _________________________________________________________________
113 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe
116 PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya
117 osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet
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
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
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'.
138 1.2) Kto upravlyaet PostgreSQL?
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.)
150 1.3) Kakovy avtorskie prava na PostgreSQL?
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:
157 Sistema Upravleniya Bazami Dannyh PostgreSQL
159 Portions copyright (c) 1996-2008, PostgreSQL Global Development Group
160 Portions Copyright (c) 1994-1996 Regents of the University of
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.
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
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
185 1.4) Na kakih platformah rabotaet PostgreSQL?
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.
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
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.
205 1.5) Gde mozhno vzyat' PostgreSQL?
207 CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez
208 ftp, ispol'zuya ftp://ftp.postgresql.org/pub/.
210 1.6) Kakaya versiya naibolee svezhaya?
212 Poslednij vypusk PostgreSQL - `eto versiya 8.3.3
214 My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie
215 versii kazhdye neskol'ko mesyacev.
217 1.7) Gde poluchit' podderzhku?
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).
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.
233 Spisok kommercheskoj podderzhki kompanij dostupen na
234 http://www.postgresql.org/support/professional_support.
236 1.8) Kak mne soobschit' ob oshibke?
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/.
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
251 * Zaprashivaetsya bolee detal'naya informaciya:
252 + Operacionnaya sistema
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
260 + Oshibka ne mozhet byt' ispravlena nemedlenno i budet
261 dobavlena v spisok TODO
263 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
266 PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash
267 spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
268 vozmozhnostej i buduschih planov.
270 Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie
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
278 + Dannaya vozmozhnost' nebezopasna ili nenadiozhna
279 * Dannaya novaya vozmozhnost' dobavlena v spisok TODO
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.
292 1.10) Kakaya dokumentaciya imeetsya v nalichii?
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.
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,
307 http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides
308 %2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej,
309 posveschennyh PostgreSQL.
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.
315 Nash sajt soderzhit esche bol'she informacii.
317 1.11) Kak mne nauchit'sya SQL?
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.,
325 Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v
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
332 1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande
335 Smotrite FAQ dlya razrabotchikov.
337 1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt'
340 Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya:
341 vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena.
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.
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.
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
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.)
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
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
398 1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh
399 stranyh, kasayuschimisya dnevnogo vremeni?
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 _________________________________________________________________
409 1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat'
410 polucheniya dubliruyuschih soobschenij?
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.)
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
426 _________________________________________________________________
428 Voprosy pol'zovatelej po klientskoj chasti
430 2.1) Kakie interfejsy est' dlya PostgreSQL?
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.
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.
442 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
445 Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti
446 na: http://www.webreview.com
448 Dlya integracii s Web, PHP http://www.php.net yavlyaetsya neplohim
451 V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili
454 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
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 _________________________________________________________________
462 Voprosy administrirovaniya
464 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql?
466 Zadajte opciyu --prefix kogda zapuskaete configure.
468 3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov?
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
477 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti?
479 Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut
480 uvelichit' proizvoditel'nost':
483 `Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej
486 + Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i
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
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
498 + Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum
499 + Udalenie indeksov vo vremya bol'shih izmenenij dannyh
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
508 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
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
516 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
518 Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya 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
525 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
526 pytayus' podklyuchit'sya k baze?
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.
534 3.6) Kak vypolnit' obnovlenie PostgreSQL?
536 Sm. informaciyu ob obnovlenii v
537 http://www.postgresql.org/support/versioning i special'nye instrukcii
539 http://www.postgresql.org/docs/current/static/install-upgrading.html.
541 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'?
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 _________________________________________________________________
554 Voprosy `ekspluatacii
556 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
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.
566 To SELECT a random row, use:
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?
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.
587 Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_.
589 Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh.
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.
595 4.3) Kak izmenit' tip dannyh kolonki?
597 V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya
598 ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE.
600 V bolee rannih versiyah sdelajte tak:
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;
607 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh?
609 Suschestvuyut sleduyuschie ogranicheniya:
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
618 Maksimal'noe kolichestvo indeksov v tablice? neogranicheno
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'.
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.
630 Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut
631 byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet
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.
641 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
642 dannyh iz obychnogo tekstovogo fajla?
644 SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz
645 bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla.
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
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.
673 Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut
676 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi
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.
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
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.
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
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,
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.
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.
726 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
728 Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN.
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?
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.
738 Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak:
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.
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
758 Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes':
763 CHtoby soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte
764 COALESCE() kak zdes':
765 SELECT COALESCE(col1, '') || COALESCE(col2, '')
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:
774 ORDER BY (col IS NOT NULL);
776 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
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
786 Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi
787 i v nekotoryh soobscheniyah ob oshibkah.
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.
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.
807 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
809 PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet
810 posledovatel'nost'. Naprimer:
811 CREATE TABLE person (
816 avtomaticheski transliruetsya v:
817 CREATE SEQUENCE person_id_seq;
818 CREATE TABLE person (
819 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
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.
829 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
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.
839 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
840 nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
842 Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej
843 sessiej, a ne drugimi sessiyami.
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?
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.
854 4.12) CHto takoe OID? CHto takoe CTID?
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.
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.
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.
873 TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
876 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
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:
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.
893 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
895 Iz psql, naberite SELECT version();
897 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
900 Ispol'zujte CURRENT_TIMESTAMP:
901 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
903 4.16) Kak mne vypolnit' vneshnee svyazyvanie?
905 PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj
906 sintaksis SQL. Vot dva primera:
908 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
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.
922 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
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.
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'
934 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
936 Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok,
937 http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_
940 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet",
941 kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL?
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.
953 V PostgreSQL 8.3 i pozdnee, `etoj problemy net.
955 4.20) Kakie est' resheniya dlya replikacii?
957 Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh
958 tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya
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.
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.
974 4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom zaprose?
975 Pochemu ne sohranyayutsya zaglavnye bukvy?
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