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