Otvety na chasto zadavaemye voprosy po PostgreSQL Data poslednego obnovleniya: CHetverg 6 maya 23:28:03 EDT 2004 Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) (pgman@candle.pha.pa.us) Perevel na russkij: Viktor Vislobokov (corochoone@perm.ru) Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na http://www.PostgreSQL.org/docs/faqs/FAQ.html. Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti na http://www.PostgreSQL.org/docs/index.html. _________________________________________________________________ Obschie voprosy 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? 1.2) Kakovy avtorskie prava na PostgreSQL? 1.3) Na kakih Unix platformah rabotaet PostgreSQL? 1.4) Suschestvuyut li versii portirovannye ne na Unix sistemy? 1.5) Gde mozhno vzyat' PostgreSQL? 1.6) Gde poluchit' podderzhku? 1.7) Kakaya versiya poslednyaya? 1.8) Kakaya dokumentaciya imeetsya v nalichii? 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih vozmozhnostyah? 1.10) Kak nauchit'sya SQL? 1.11) Reshena li v PostgreSQL problema 2000-go goda (Y2K)? 1.12) Kak prisoedinitsya k komande razrabotchikov? 1.13) Kak otpravit' soobschenie ob oshibke? 1.14) Kak sravnivat' PostgreSQL s drugimi SUBD? 1.15) Kak okazat' finansovuyu pomosch' PostgreSQL? Voprosy pol'zovatelej po klientskoj chasti 2.1) Suschestvuyut li ODBC drajvera dlya PostgreSQL? 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez Web? 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? 2.4) Kakie yazyki mogut vzaimodejstvovat' s PostgreSQL? Voprosy administrirovaniya 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? 3.2) Kogda ya zapuskayu postmaster, ya poluchayu soobschenie Bad System Call ili soobschenie core dumped. Pochemu? 3.3) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki IpcMemoryCreate. Pochemu? 3.4) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki IpcSemaphoreCreate. Pochemu? 3.5) Kak mne upravlyat' soedineniyami s drugih komp'yuterov? 3.6) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? 3.7) Kakie vozmozhnosti dlya otladki est' v nalichii? 3.8) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda pytayus' podklyuchit'sya k baze? 3.9) CHto nahoditsya v kataloge pgsql_tmp? 3.10) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov PostgreSQL? Voprosy `ekspluatacii 4.1) V chem otlichie mezhdu binarnym i normal'nym kursorom? 4.2) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? Dlya proizvol'noj stroki? 4.3) Kak poluchit' spisok tablic ili drugih komponentov v psql? 4.4) Kak udalit' kolonku iz tablicy ili izmenit' eio tip dannyh? 4.5) Kakovy maksimal'nye razmery dlya zapisej, tablic i bazy dannyh? 4.6) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya dannyh iz obychnogo tekstovogo fajla? 4.7) Kak mne ubedit'sya, chto suschestvuyut nuzhnye mne tablicy, indeksy, bazy dannyh i pol'zovateli? 4.8) U menya medlenno rabotayut zaprosy ili ne proishodit ispol'zovaniya indeksov. Pochemu? 4.9) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? 4.10) CHto takoe R-tree indeks? 4.11) CHto takoe Genetic Query Optimizer? 4.12) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? 4.13) Kak ya mogu opredelit', chto znachenie polya ravno NULL v kakom-libo zaprose? 4.14) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? 4.15.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? 4.15.2) Kak mne poluchit' znachenie pri vstavke SERIAL? 4.15.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? 4.15.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL? 4.16) CHto takoe OID? CHto takoe TID? 4.17) CHto oznachayut nekotorye terminy ispol'zuemye v PostgreSQL? 4.18) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in AllocSetAlloc()"? 4.19) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? 4.20) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku "invalid large obj descriptor"? 4.21) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' tekuschee vremya? 4.22) Pochemu moi podzaprosy, ispol'zuyuschie IN tak medlenno rabotaeyut? 4.23) Kak vypolnit' vneshnee svyazyvanie? 4.24) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? 4.25) Kak mne vernut' iz funkcii neskol'ko zapisej? 4.26) Pochemu ya ne mogu nadezhno sozdavat'/udalyat' vremennye tablicy v funkciyah PL/PgSQL? 4.27) Kakie opcii replikacii suschestvuyut? 4.28) Kakie opcii shifrovaniya suschestvuyut? Rasshireniya PostgreSQL 5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya zapuskayu ee v psql, pochemu ya poluchayu core dump? 5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v PostgreSQL? 5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu zapis'? 5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne vizhu izmenenij? _________________________________________________________________ Obschie voprosy 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). Po adresu http://www.postgresql.org/postgresql.mp3 dostupen zvukovoj fajl s primerom kak `eto nuzhno proiznosit'. PostgreSQL - `eto rasshirenie SUBD POSTGRES (i po`etomu inogda govoryat prosto "Postgres"), issledovatel'skij prototip novogo pokoleniya SUBD. PostgreSQL odnovremenno sohranyaet moschnuyu model' dannyh i obschirnoe kolichestvo tipov POSTGRES, i zameschaet yazyk zaprosov PostQuel na rasshirennoe podmnozhestvo SQL. PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe obespechenie. Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, vse uchastniki kotoroj podpisany na spisok rassylki razrabotchikov. V nastoyaschee vremya, ih koordinatorom yavlyaetsya Mark Furn'e (Marc G. Fournier) (scrappy@PostgreSQL.org). (Sm. sekciyu 1.6 o tom, kak podklyuchit'sya k razrabotke). `Eta komanda teper' otvechaet za vsyu razrabotku PostgreSQL. Dannyj proekt yavlyaetsya obschestvennym i ne upravlyaetsya kakoj-libo kompaniej. Podrobnosti smotrite v FAQ dlya razrabotchikov, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html Avtorami PostgreSQL 1.01 yavlyayutsya `Endryu YU (Andrew Yu) i Dzholi CHen (Jolly Chen). Mnogie drugie vnesli svoj vklad v perenos na drugie platformy, testirovanie, otladku i rasshirenie `etogo koda. Pervonachal'nyj kod Postgres, iz kotorogo poyavilsya PostgreSQL, byl itogom usilij mnogih akademicheskih studentov, neakademicheskih studentov i mnozhestva raznyh programmistov, rabotavshih pod rukovodstvom professora Majkla Stounbrejkera (Michael Stonebraker) v Kalifornijskom universitete, Berkli. Pervonachal'noe imya, dannoe v Berkli, bylo Postgres. Kogda v 1995 godu byla dobavlena funkcional'nost' SQL, `eto imya bylo izmeneno na Postgres95. No i `eto imya bylo izmeneno v konce 1996 na PostgreSQL. 1.2) Kakovy avtorskie prava na PostgreSQL? PostgreSQL popadaet pod dejstvie sleduyuschego COPYRIGHT: Sistema Upravleniya Bazami Dannyh PostgreSQL Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva sleduyuschih paragrafa. KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH POVREZHDENIJ. KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT' LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA ILI IZMENENIYA. Vysheizlozhennoe yavlyaetsya BSD licenziej, klassicheskoj licenziej programmnogo obespecheniya s otkrytym kodom. `Eta licenziya ne nakladyvaet ogranichenij na ispol'zovanie ishodnogo koda. Nam nravitsya `eta licenziya i my ne sobiraemsya eio menyat'. 1.3) Na kakih Unix platformah rabotaet PostgreSQL? Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k momentu vyhoda dannoj versii. 1.4) Suschestvuyut li versii perenesennye ne na Unix sistemy? Klient Dlya zapuska na platformah MS Windows vozmozhna kompilyaciya C biblioteki libpq, psql, drugih interfesov i klientskih prilozhenij. V `etom sluchae, klient zapuskaetsya na MS Windows i svyazyvaetsya po TCP/IP s serverom, zapuschennym na odnoj iz podderzhivaemyh Unix platform. V distributiv vklyuchaetsya fajl win32.mak dlya togo, chtoby mozhno bylo provesti sborku biblioteki libpq i psql dlya Win32. PostgreSQL takzhe rabotaet cherez ODBC. Server Server BD mozhet byt' zapuschen na Windows NT i Win2k, ispol'zuya biblioteku Cygwin, razrabotannuyu kompaniej Cygnus dlya perenosa programmnogo obespecheniya Unix v NT. Smotrite pgsql/doc/FAQ_MSWIN v distributive ili MS Windows FAQ na http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN. PostgreSQL, sportirovannyj special'no dlya MS Win NT/2000/XP v nastoyaschij moment nachal rabotat'. Podrobnosti tekuschego sostoyaniya PostgreSQL dlya Windows smotrite na http://techdocs.postgresql.org/guides/Windows i http://momjian.postgresql.org/main/writings/pgsql/win32.html. Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na http://forge.novell.com. 1.5) Gde mozhno vzyat' PostgreSQL? Naprimer, vospol'zovavshis' anonimnym dostupom na ftp sajt PostgreSQL ftp://ftp.PostgreSQL.org/pub. Spisok zerkal vy najdete na nashem osnovnom sajte. 1.6) Gde poluchit' podderzhku? Osnovnoj spisok rassylki: pgsql-general@PostgreSQL.org. V nem mozhno obsuzhdat' lyubye temy, kasayuschiesya PostgreSQL. CHtoby podpisat'sya, otprav'te pis'mo po `elektronnoj pochte, v kotorom v tele pis'ma (ne v teme) napishite sleduyuschie stroki: subscribe end na adres pgsql-general-request@PostgreSQL.org. Suschestvuet dajzhest spisok. CHtoby podpisat'sya na nego, otprav'te pis'mo po `elektronnoj pochte na adres: pgsql-general-digest-request@PostgreSQL.org i v tele pis'ma napishite strochki strochki: subscribe end Dajzhesty otpravlyayutsya podpischikam, kogda v osnovnom spiske rassylki nakopitsya okolo 30 kilobajt soobschenij. Dostupen i spisok rassylki soobschenij ob oshibkah. CHtoby podpisat'sya na `etot spisok, otprav'te po `elektronnoj pochte pis'mo na adres pgsql-bugs-request@PostgreSQL.org i v tele pis'ma napishite strochki strochki: subscribe end Takzhe imeetsya spisok rassylki s diskussiyami razrabotchikov. CHtoby podpisat'sya na `etot spisok, otprav'te po `elektronnoj pochte pis'mo na adres pgsql-hackers-request@PostgreSQL.org i v tele pis'ma napishite strochki strochki: subscribe end Dopolnitel'nye spiski rassylki i infomaciyu o PostgreSQL mozhno najti na domashnej stranichke PostgreSQL po adresu: http://www.PostgreSQL.org Esche suschestvuet IRC kanal na Freenode i EFNet, s nazvaniem #PostgreSQL. YA ispol'zuyu dlya podklyucheniya k `etomu kanalu komandu Unix irc -c '#PostgreSQL' "$USER" irc.phoenix.net. ili irc -c '#PostgreSQL' "$USER" irc.freenode.net. Spisok kommercheskoj podderzhki kompanij dostupen na http://techdocs.postgresql.org/companies.php. 1.7) Kakaya poslednyaya versiya? Poslednij vypusk PostgreSQL - `eto versiya 7.4.2 My planiruem vypuskat' novye versii kazhdye 6-8 mesyacev. 1.8) Kakaya dokumentaciya imeetsya v nalichii? V distributiv vklyuchayutsya razlichnye rukovodstva, stranicy `elektronnogo rukovodstva man i nekotorye malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete prosmatrivat' dokumentaciyu v Internet po adresu http://www.PostgreSQL.org/docs. Suschestvuet dve knigi po PostgreSQL dostupnye po adresam http://www.PostgreSQL.org/docs/awbook.html i http://www.commandprompt.com/ppbook/. Spisok knig po PostgreSQL, kotorye mozhno kupit' dostupen po adresu http://techdocs.postgresql.org/techdocs/bookreviews.php. Krome togo, po adresu http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu tehnicheskih statej posvyaschennyh PostgreSQL. psql imeet neskol'ko prekrasnyh komand \d dlya otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i t.d. Nash sajt soderzhit esche bol'she informacii. 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih vozmozhnostyah? PostgreSQL podderzhivaet rasshirennyj podklass SQL-92. Smotrite nash spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih vozmozhnostej i buduschih planov. 1.10) Kak mne nauchit'sya SQL? Kniga po PostgreSQL na http://www.PostgreSQL.org/docs/awbook.html nauchit SQL. Suschestvuet drugaya kniga po PostgreSQL na http://www.commandprompt.com/ppbook. Est' prekrasnyj uchebnik na http://www.intermedia.net/support/sql/sqltut.shtm, na http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, i na http://sqlcourse.com. Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21 Days, Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya redakciya) na http://members.tripod.com/er4ebus/sql/index.htm Mnogim iz nashih pol'zovatelej nravitsya kniga The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Drugim nravitsya The Complete Reference SQL, Groff et al., McGraw-Hill. 1.11) Reshena li v PostgreSQL problema 2000-go goda (Y2K)? Da, my legko rabotaem s datami posle 2000 goda i pered 2000 godom. 1.12) Kak prisoedinitsya k komande razrabotchikov? Dlya nachala, skachajte poslednyuyu versiyu ishodnyh tekstov i prochtite dokumentaciyu razrabotchikov PostgreSQL na nashem sajte ili v distributive. Zatem, podpishites' na spiski rassylki pgsql-hackers i pgsql-patches. Dalee, otpravlyajte ispravleniya (patches) vysokogo kachestva v spisok pgsql-patches. Suschestvuet ogranichennyj spisok lyudej, kotoryj imeyut privelegiyu vnosit' izmeneniya v CVS arhiv PostgreSQL. Kazhdyj iz `etih lyudej v svoe vremya otpravil tak mnogo vysokokachestvennyh ispravlenij, chto ih bylo nevozmozhno ostavit' bez vnimaniya i oni byli udostoeny previlegii vnosit' izmeneniya, i my uvereny, chto te ispravleniya, kotorye oni vnesut budut vysokogo kachestva. 1.13) Kak otpravit' soobschenie ob oshibke?? Pozhalujsta posetite stranichku PostgreSQL BugTool na http://www.PostgreSQL.org/bugs/bugs.php, na kotoroj predostavleny detal'nye instrukcii o tom kak otpravit' soobschenie ob oshibke. Takzhe ne zabud'te posmotret' na ftp://ftp.PostgreSQL.org/pub na predmet bolee svezhih versij PostgreSQL ili zaplat. 1.14) Kak sravnivat' PostgreSQL s drugimi SUBD? Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. Vozmozhnosti PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy, triggery, predstavleniya, ssylochnoj celostnosti vtorichnogo klyucha i raznye blokirovki. U nas est' nekotorye vozmozhnosti, kotoryh net u nih: tipy, opredelyaemye pol'zovatelem, mehanizm nasledovaniya, pravila i konkuretnoe mnogoversionnoe upravlenie dlya raboty s soderzhimym blokirovok. Proizvoditel'nost' PostgreSQL imeet proizvoditel'nost' shozhuyu s drugimi kommercheskimi SUBD i s SUBD s otkrytym ishodnym kodom, v kakih-to aspektah rabotaya bystree chem oni, v kakih-to medlenee. V sravnenii s MySQL ili obydennee SUBD, my bystree, kogda pol'zovatelej mnogo, a takzhe na kompleksnyh zaprosah i chtenii/zapisi zagruzki zaprosa. MySQL bystree dlya prostyh SELECT zaprosov, vypolnyaemyh nebol'shim kolichestvom pol'zovatelej. I razumeetsya, MySQL ne imeet kakih-libo vozmozhnostej iz perechislenyh vyshe, v sekcii Vozmozhnosti. My delaem upor na nadezhnost' i rasshirennye vozmozhnosti, no my takzhe prodolzhaem uvelichivat' proizvoditel'nost' s kazhdym vypuskom. Suschestvuet interesnaya stranichka v Internet, sravnivayuschaya PostgreSQL i MySQL na http://openacs.org/philosophy/why-not-mysql.html. Takzhe, MySQL - `eto kompaniya, kotoraya rasprostranyaet svoj produkt cherez otkrytye ishodnye teksty i trebuet kommercheskuyu licenziyu na zakrytoe programmnoe obespechenie, a ne soobschestvo razrabotchikov s otkrytymi ishodnymi tekstami, kak PostgreSQL. Nadezhnost' My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona nichego ne budet stoit'. My staraemsya vypuskat' horosho proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok. Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej mere v techenii odnogo mesyaca i nasha istoriya vypuskov pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My verim, chto my proizvodim proverku ne huzhe, chem u drugih SUBD. Podderzhka Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe vremya, my ne garantiruem kakie-libo ispravleniya, no i razrabotchiki kommercheskih SUBD ne vsegda delayut ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut podderzhku PostgreSQL prevoshodyaschej drugie SUBD. Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih incidentov, kotoraya dostupna dlya teh komu ona nuzhna. (Smotrite Sekciyu 1.6.) Cena Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v nash produkt bez ogranichenij, za isklyucheniem teh, chto opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena vyshe. 1.15) Kak okazat' finansovuyu pomosch' PostgreSQL? PostgreSQL imeet odnorangovuyu infrastrukturu s togo samogo vremeni kak my nachali razrabotku v 1996 godu. My dolzhny blagodarit' za `eto Marka Furn'e (Marc Fournier), kotoryj sozdal `etu infrastrukturu i upravlyaet ej na protyazhenii `etih let. Kachestvennaya infrastruktura ochen' vazhna dlya proektov s otkrytym ishodnym kodom. Ona predotvraschaet raskoly, kotorye mogut sil'no zaderzhat' postupatel'noe dvizhenie proekta. Razumeetsya, `eta infrastruktura ne yavlyaetsya deshevoj. Suschestvuet nekotoroe kolichestvo ezhemesyachnyh i odnorazovyh rashodov, kotorye trebuyut deneg. Esli vy ili vasha kompaniya imeet den'gi, kotorye mozhno peredat' v pomosch' nashim usiliyam, pozhalujsta posetite stranichku https://store.pgsql.com/shopping/ i sdelajte svoj vklad. Hotya na stranichke govoritsya o PostgreSQL, Inc, punkt "contributions" prednaznachen isklyuchitel'no dlya podderzhki proekta PostgreSQL i ne peredaetsya kakoj-libo konkretnoj kompanii. Esli hotite, to mozhete `eto proverit', napisav pis'mo na kontaktnyj adres. _________________________________________________________________ Esli u vas est' istorii po uspeshnomu primeneniyu PostgreSQL, pozhalujsta, prisylajte ih na nash sajt propagandy http://advocacy.postgresql.org. Voprosy pol'zovatelej po klientskoj chasti 2.1) Suschestvuyut li ODBC drajvera dlya PostgreSQL? Suschestvuet dva ODBC drajvera, PsqlODBC i OpenLink ODBC. Vy mozhete skachat' PsqlODBC s http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. OpenLink ODBC mozhno vzyat' na http://www.openlinksw.com. `Etot drajver rabotaet s ih standartnym klientskim programmnym obespecheniem, ispol'zuyuschim ODBC, i takim obrazom, ODBC drajvery dlya PostgreSQL dostupny dlya kazhdoj iz podderzhivaemyh imi platform (Win, Mac, Unix, VMS). Vozmozhno oni budut prodavat' svoj produkt tem komu nuzhna kommercheskaya podderzhka, no besplatnaya versiya vsegda budet dostupna. Pozhalujsta, napravlyajte voprosy na adres postgres95@openlink.co.uk. 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez Web? Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti na: http://www.webreview.com Dlya integracii s Web, odnim iz prevoshodnyh instrumentov yavlyaetsya PHP. Domashnyaya stanichka http://www.php.net. Dlya kompleksnyh reshenij, mnogie pol'zuyutsya Perl interfejsom i CGI.pm ili mod_perl. 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? Da, suschestvuet neskol'ko graficheskih interfejsov dlya PostgreSQL. `Eto PgAccess (http://www.pgaccess.org), PgAdmin III (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/) i Rekall ( http://www.thekompany.com/products/rekall/, kommercheskij). Takzhe est' PhpPgAdmin ( http://phppgadmin.sourceforge.net/) - interfejs k PostgreSQL, osnovannyj na Web. 2.4) Kakie yazyki mogut vzaimodejstvovat' s PostgreSQL? Kakie-libo interfejsy dlya PostgreSQL suschestvuyut dlya bol'shinstva populyarnyh yazykov programmirovaniya. Posmotrite spisok modulej rasshireniya dlya teh yazykov programmirovaniya, kotorymi vy pol'zuetes'. Sleduyuschie interfejsy vklyuchayutsya v distributiv PostgreSQL: * C (libpq) * Embedded C (ecpg) * Java (jdbc) * Python (PyGreSQL) * TCL (libpgtcl) Dopolnitel'nye interfejsy dostupny po adresu http://gborg.PostgreSQL.org v sekcii Drivers/Interfaces. _________________________________________________________________ Voprosy administrirovaniya 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? Zadajte opciyu --prefix kogda zapuskaete configure. 3.2) Kogda ya zapuskayu postmaster, ya poluchayu soobschenie Bad System Call ili soobschenie core dumped. Pochemu? `Eto mozhet byt' vyzvano raznymi problemami, no pervoe, chto nuzhno sdelat' - `eto ubedit'sya v tom, chto v vashem yadre ustanovleno rasshirenie System V. PostgreSQL trebuet, chtoby yadro podderzhivalo razdelyaemuyu pamyat' i semafory. 3.3) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki IpcMemoryCreate. Pochemu? Libo u vas v yadre nepravil'nye nastrojki razdelyaemoj pamyati, libo vashemu yadru nuzhno bol'shee kolichestvo dostupnoj razdelyaemoj pamyati. Te konkretnye dejstviya, kotorye vam nuzhno proizvesti zavisyat ot arhitektury vashej mashiny i ot togo kak mnogo buferov i backend processov vy nastroili dlya postmaster. Dlya bol'shinstva sistem, s kolichestvom buferov i processov po umolchaniyu, neobhodimyj minimum - `eto okolo 1 megabajta. Podrobnosti o razdelyaemoj pamyati i semaforah smotrite v Rukovodstve administratora PostgreSQL. 3.4) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki IpcSemaphoreCreate. Pochemu? Esli `eto soobschenie IpcSemaphoreCreate: semget failed (No space left on device) to nastrojki vashego yadra takovy, chto emu ne hvataet semaforov. Postgres trebuet odin semafor na potencial'nyj backend process. Vremennym resheniem yavlyaetsya zapusk postmaster s nastrojkami na mesh'shee kolichestvo backend processov. Ispol'zujte -N s znacheniem men'shim chem 32, kotoroe prinyato po umolchaniyu. Bolee pravil'noe reshenie - `eto uvelichit' znacheniya SEMMNS i SEMMNI v nastrjkah yadra. Neispravnye semafory takzhe mogut privesti k padeniyu SUBD vo vremya dostupa k baze dannyh. Esli vy poluchili kakoe-libo drugoe soobschenie ob oshibke, to vpolne vozmozhno, chto v vashem yadre voobsche ne nastroena podderzhka semaforov. Smotrite podrobnosti o razdelyaemoj pamyati i semaforah v Rukovodstve Administratora PostgreSQL. 3.5) Kak mne upravlyat' soedineniyami s drugih komp'yuterov? Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj mashine cherez sokety domena Unix. Drugie mashiny ne smogut podklyuchit'sya k baze poka ne budet vklyuchena opciya tcpip_sockets v postgresql.conf i poka ne budet razreshena host-avtorizaciya v fajle $PGDATA/pg_hba.conf. `Eti dejstviya delayut vozmozhnymi TCP/IP soedineniya. 3.6) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? Nesomnenno, indeksy mogut uvelichit' skorost' vypolneniya zaprosov. Komanda EXPLAIN ANALYZE pozvolyaet vam posmotret' kak PostgreSQL interpretiruet vash zapros i kakie indeksy ispol'zuyutsya. Esli vy vypolnyaete mnogo operatorov INSERT, rassmotrite vozmozhnost' vypolnyat' ih v bol'shoj pachke, ispol'zuya komandu COPY. `Eto znachitel'no bystree, chem otdel'nye INSERT. Vo-vtoryh, operatory vne bloka tranzakcii BEGIN WORK/COMMIT sami vypolnyayut tranzakciyu. Podumajte nad vypolneniem neskol'kih operatorov v odnom bloke tranzakcii. `Eto umen'shit kolichestvo tranzakcij. Takzhe, zadumajtes' nad udaleniem i peresozdaniem indeksov, kogda vy vypolnyaete bol'shie izmeneniya dannyh. Suschestvuet neskol'ko opcij nastrojki. Vy mozhete zapretit' fsync() pri starte postmaster s opciej -o -F. `Eto predotvratit vyzovy fsync(), kotorye privodyat k sbrosu dannyh na disk posle kazhdoj tranzakcii. Vy mozhete takzhe ispol'zovat' dlya postmaster opciyu -B dlya uvelicheniya kolichestva buferov razdelyaemoj pamyati, kotoraya ispol'zuetsya backend processami. Esli vy sdelaete znachenie `etogo parametra slishkom bol'shim, to postmaster mozhet ne zapustitsya potomu chto vy ischerpaete ogranichenie yadra na ob"em razdelyaemoj pamyati. Kazhdyj bufer imeet razmer v 8 kilobajt i po umolchaniyu vydelyaetsya 64 bufera. Vy mozhete takzhe ispol'zovat' backend opciyu -S dlya uvelicheniya maksimal'nogo kolichestva pamyati, kotoroe ispol'zuetsya backend processom dlya vremennyh sortirovok. Znachenie dlya opcii -S zadaetsya v kilobajtah i po umolchaniyu ravno 512 (t.e. 512K). Vy takzhe mozhete ispol'zovat' komandu CLUSTER dlya gruppirovki dannyh v tablicah na sovpadayuschij indeks. Podrobnosti smotrite na stranice rukovodstva po komande CLUSTER. 3.7) Kakie vozmozhnosti dlya otladki est' v nalichii? PostgreSQL imeet neskol'ko vozmozhnostej, pozvolyayuschie poluchit' informaciyu o sostoyanii, kotoraya mozhet byt' ispol'zovana v otladochnyh celyah. Vo-pervyh, pri zapuske configure s opciej --enable-cassert, mnogie vyzovy assert() pozvolyayut otslezhivat' rabotu backend processa i ostanovku programmy pri vozniknovenii kakih-libo neozhidannostej. I postmaster, i postgres imeyut neskol'ko otladochnyh opcij. Vo-pervyh, pri zapuske postmaster, ubedites', chto standartnyj vyvod i vyvod oshibok osuschestvlyayutsya v fajl zhurnala: cd /usr/local/pgsql ./bin/postmaster >server.log 2>&1 & `Eto privedet k poyavleniyu fajla server.log v glavnom kataloge PostgreSQL. `Etot fajl soderzhit poleznuyu informaciyu o problemah ili oshibkah, voznikshih na servere. Postmaster imeet opciyu -d, kotoraya pozvolyaet poluchat' pri protokolirovanii bolee detal'nuyu infrmaciyu. Dlya opcii -d ukazyvaetsya chislo, kotoroe zadaet uroven' otladki. Bud'te ostorozhny, tak kak vysokij uroven' otladki privodit k generacii fajlov zhurnala bol'shogo razmera. Esli postmaster ne zapuschen, vy mozhete zapustit' postgres backend iz komandnoj stroki i vvesti vash operator SQL napryamuyu. `Eto rekomenduetsya tol'ko dlya celej otladki. Zametim, chto v `etom rezhime, zapros zavershaetsya simvolom novoj stroki, a ne tochkoj s zapyatoj. Esli vy proizvodili kompilyaciyu s otladochnymi simvoloami, vy mozhete ispol'zovat' lyuboj otladchik, chtoby posmotret', chto sluchilos'. Poskol'ku backend zapuskaetsya ne iz postmaster, on ne zapuskaetsya v identichnom okruzhenii i znachit problemy iteracij blokirovok/backend ne mogut byt' vosproizvedeny. Esli postmaster zapuschen, zapustite psql v odnom okne, zatem najdite PID processa postgres, ispol'zuemyj psql. Ispol'zujte otdadchik dlya podklyucheniya k postgres PID. Vy mozhete ustanovit' tochki preryvaniya v otladchike i zapustit' zapros iz psql. Esli vy proizvodite otladku zapuska postgres, vy mozhete ustanovit' PGOPTIONS="-W n", i zatem zapustit' psql. `Eta opciya privodit k zaderzhke processa zapuska na n sekund, v techenie kotoryh vy mozhete podklyuchit' k processu otladchik, ustanovit' lyubye tochki preryvaniya i prodolzhit' zapusk. Programma postgres imeet opcii -s, -A, i -t kotorye mogut byt' ochen' poleznymi dlya otladki i izmereniya proizvoditel'nosti. Vy takzhe mozhete skompilirovat' PostgreSQL s profilirovaniem dlya togo, chtoby uvidet' kakie funkcii skol'ko vremeni vypolnyayutsya. Fajly profilirovaniya backend'a nahodyatsya v kataloge pgsql/data/base/dbname. Fajl profilirovaniya klienta budet pomeschen v tekuschij katalog klienta. V Linux dlya vypolneniya profilirovaniya trebuetsya kompilyacii s -DLINUX_PROFILE. 3.8) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda pytayus' podklyuchit'sya k baze? Vam nuzhno uvelichit' ogranichenie na kolichestvo konkuretnyh backend processov pri zapuske postmaster. Po umolchaniyu ustanovlen limit na 32 processa. Vy mozhete uvelichit' `etot limit perezapustiv postmaster s nuzhnym znacheniem processov, kotoroe ukazyvaetsya v opcii -N ili izmeniv fajl postgresql.conf. Zametim, chto esli vy zadadite v opcii -N znachenie bol'she 32, to vy takzhe dolzhny uvelichit' znachenie v opcii -B kotoroe po umolchaniyu ustanovleno v 64; Znachenie opcii -B dolzhno byt' po krajnej mere vdvoe bol'she znacheniya opcii -N, i vozmozhno eschio bol'she dlya luchshej proizvoditel'nosti. Dlya bol'shego kolichestva backend processov, vam takzhe neploho bylo by uvelichit' nekotorye parametry yadra Unix. `Eto takie parametry, kak maksimal'noe kolichestvo blokov razdelyaemoj pamyati, SHMMAX; maksimal'noe kolichestvo semaforov, SEMMNS i SEMMNI; maksimal'noe kolichestvo processov, NPROC; maksimal'noe kolichestvo processov na pol'zovatelya, MAXUPRC; i maksimal'noe kolichestvo otkrytyh fajlov, NFILE i NINODE. Prichina sozdaniya ogranicheniya na kolichestvo backend processov kak raz i sostoit v tom, chtoby vashej sisteme hvatilo resursov. 3.9) CHto nahoditsya v kataloge pgsql_tmp? Dannyj katalog soderzhit vremennye fajly, generiruemye obrabotchikom zaprosa. Naprimer, esli dlya vypolneniya ORDER BY nuzhna sortirovka i `eta sortirovka trebuet pamyati bol'she, chem dopuskaet parametr -S u backend'a, to dlya hraneniya dopolnitel'nyh dannyh sozdayutsya vremennye fajly. `Eti vremennye fajly dolzhny udalyat'sya avtomaticheski, no `etogo mozhet ne proizojti, esli backend ruhnul vo vremya sortirovki. Ostanov i zapusk servernogo processa obespechit ih udalenie iz kataloga. 3.10) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov PostgreSQL? Razrabotchiki PostgreSQL delayut tol'ko nebol'shie izmeneniya mezhdu podvypuskami. Takim obrazom obnovlenie s versii 7.2 do 7.2.1 ne trebuet vypolneniya dump i restore. Odnako pri vyhode ocherednogo vypuska (t.e. pri obnovlenii naprimer, s 7.2 na 7.3) chasto menyaetsya vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya chasto nosyat kompleksnyj harakter, tak chto net vozmozhnosti obespechit' obratnuyu sovmestimost' fajlov dannyh. Vypolenie dump pozvolyaet poluchit' dannye v obschem formate, kotoryj zatem mozhet byt' zagruzhen pri ispol'zovanii novogo vnutrennego formata. V teh vypuskah, gde format dannyh na diske ne menyaetsya, dlya provedeniya obnovleniya mozhet byt' ispol'zovan scenarij pg_upgrade bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda mozhno ispol'zovat' pg_upgrade dlya `etogo vypuska. _________________________________________________________________ Voprosy `ekspluatacii 4.1) V chem otlichie mezhdu binarnym i normal'nym kursorom? Smotrite opisanie na stranicah rukovodstva posvyaschennym DECLARE. 4.2) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? Proizvol'noj stroki? Smotrite stanicu rukovodstva posvyaschennuyu FETCH ili ispol'zujte SELECT ... LIMIT.... Dazhe esli vy hotite poluchit' tol'ko pervye neskol'ko zapisej, budet vypolnen ves' zapros. Rassmotrim zapros, kotoryj imeet ORDER BY. Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, PostgreSQL mozhet vydat' tol'ko neskol'ko pervyh zaproshennyh zapisej ili mozhet vypolnyat' zapros poka ne budut vydany zhelaemye zapisi. To SELECT a random row, use: SELECT col FROM tab ORDER BY random() LIMIT 1; 4.3) Kak poluchit' spisok tablic ili drugih komponentov v psql? CHtoby prosmatrivat' tablicy v psql, ispol'zujte komandu \dt. Polnyj spisok komand v psql vy mozhete poluchit', ispol'zuya \?. Krome togo, vy mozhete posmotret' ishodnyj kod psql v fajle pgsql/src/bin/psql/describe.c. On soderzhit komandy SQL kotorye generiruyutsya pri vvode v psql komand, nachinayuschihsya s obratnoj kosoj cherty. Vy takzhe mozhete zapustit' psql s opciej -E tak, chtoby `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya vypolneniya zadannyh vami komand. PostgreSQL takzhe predostavlyaet SQLi sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy mozhete sformirovat' zapros na poluchenie informacii o baze dannyh. 4.4) Kak udalit' kolonku iz tablicy ili izmenit' eio tip dannyh? DROP COLUMN funkcional'nost' byla dobavlena v vypusk 7.3 s operatorom ALTER TABLE DROP COLUMN. V rannih versiyah, mozhno sdelat' tak: BEGIN; LOCK TABLE old_table; SELECT ... -- vyborka vseh kolonok za isklyucheniem toj, kotoruyu hotite u dalit' INTO TABLE new_table FROM old_table; DROP TABLE old_table; ALTER TABLE new_table RENAME TO old_table; COMMIT; Dlya izmeneniya tipa dannyh kolonki, sdelajte tak: BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; UPDATE tab SET new_col = CAST(old_col AS new_data_type); ALTER TABLE tab DROP COLUMN old_col; COMMIT; 4.5) Kakovy maksimal'nye razmery dlya zapisej, tablic i bazy dannyh? Suschestvuyut sleduyuschie ogranicheniya: Maksimal'nyj razmer bazy? neogranichen (suschestvuyut ba zy na 32 TB) Maksimal'nyj razmer tablicy? 32 TB Maksimal'nyj razmer zapisi? 1.6 TB Maksimal'nyj razmer polya? 1 GB Maksimal'noe kolichestvo zapisej v tablice? neogranicheno Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot tip a Maksimal'noe kolichestvo indeksov v tablice? neogranicheno Razumeetsya, ponyatie "neogranicheno" na samom dele ogranichivaetsya dostupnym diskovym prostranistvom i razmerami pamyati/svoppinga. Kogda znacheniya perechislennye vyshe neopravdano bol'shie, mozhet postradat' proizvoditel'nost'. Maksimal'nyj razmer tablicy v 32 TB ne trebuet chtoby operacionnaya sistema podderzhivala fajly bol'shih razmerov. Bol'shie tablicy hranyatsya kak mnozhestvo fajlov razmerom v 1 GB, tak chto ogranicheniya, kotorye nakladyvaet fajlovaya sistema ne vazhny. Maksimal'nyj razmer tablicy i maksimal'noe kolichestvo kolonok mogut byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet uvelichen do 32k. 4.6) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya dannyh iz obychnogo tekstovogo fajla? SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla. V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB. Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit priblizitel'no 6.4 MB iz kotoryh: 36 bajt: na kazhdyj zagolovok zapisi (priblizitel'no) + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole + 4 bajta: ukazatel' na stranice dlya vsej zapisi ---------------------------------------- 64 bajt na zapis' Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto: 8192 bajt na stranicu --------------------- = 128 zapisej na stranicu BD (s okrugleniem) 64 bajta na zapis' 100000 strok dannyh ----------------------- = 782 stranicy v BD 128 zapisej na stranicu 782 stranicy BD * 8192 bajt na stranicu = 6,406,144 bajt (6.4 MB) Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki. Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut ochen' malo mesta. 4.7) Kak mne ubedit'sya, chto suschestvuyut nuzhnye mne tablicy, indeksy, bazy dannyh i pol'zovateli? psql imeet neskol'ko komand, nachinayuschihsya s obratnoj kosoj cherty, dlya togo chtoby prosmatrivat' takuyu informaciyu. Ispol'zujte \? dlya togo, chtoby uvidet' `eti komandy. Takzhe suschestvuyut sistemnye tablicy, imya kotoryh nachinaetsya na pg_ i v kotoryh takzhe soderzhitsya `eta informaciya. Eschio, psql -l pokazhet spisok vseh baz dannyh. Takzhe smotrite fajl pgsql/src/tutorial/syscat.source. V nem predstavleny mnogie operatory SELECT kotorye nuzhny dlya polucheniya informacii iz sistemnyh tablic bazy dannyh. 4.8) U menya medlenno rabotayut zaprosy ili ne proishodit ispol'zovaniya indeksov. Pochemu? Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa avtomaticheski. Oni ispol'zuyutsya tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet tol'ko malen'kij procent zapisej v tablice. Tak ustroeno, potomu chto dostup k disku s primeneniem randomizacii pri skanirovanii indeksov mozhet byt' medlennee, chem prostoe chtenie tablicy ili ee posledovatel'noe skanirovanie. CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo zapisej v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Sbor statistiki dolzhen periodicheski vypolnyatsya pri izmenenii soderzhimogo tablicy. Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet vozvraschat'sya nebol'shaya chast' tablicy. Fakticheski MAX() i MIN() ne ispol'zuyut indeksy, no indeks ispol'zuetsya pri postroenii zaprosov s ORDER BY i LIMIT: SELECT col FROM tab ORDER BY col [ DESC ] LIMIT 1; Esli vam kazhetsya, chto optimizator nekorrektno vybiraet posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i zapustite testy, chtoby uvidet', ne stalo-li skanirovanie indeksov bystree. Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki, t.e.: + LIKE shablony ne dolzhny nachinat'sya s %.. + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^. * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e. [a-e]. * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet indeksy. Vmesto nego, ispol'zujte funkcional'nye indeksy, kotorye opisyvayutsya v sekcii 4.12. * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C. 4.9) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. 4.10) CHto takoe R-tree indeks? R-tree indeks ispol'zuetsya dlya indeksirovaniya prostranstvennyh dannyh. Indeks h`esha ne mozhet upravlyat' poiskami diapazona. B-tree indeks upravlyaet tol'ko poiskami diapazona v odnom izmerenii. R-tree indeks mozhet upravlyat' mnogorazmernymi dannymi. Naprimer, esli R-tree indeks mozhet byt' vstroen v atribut tipa point, to sistema mozhet bolee `effektivno otvetit' na zapros tipa "vybrat' vse tochki vnutri zadannogo chetyrehugol'nika." Kanonicheskij istochnik, opisyvayuschij pervonachal'noe sozdanie R-tree `eto: Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. Vy mozhete najti `etot dokument v knige Stounbrejkera "Readings in Database Systems". Vstroennnye R-tree mogut upravlyat' poligonami i boksami. V teorii, R-tree mogut byt' rasshireny dlya upravleniya bol'shim kolichestvom izmerenij. Na praktike, rasshirenie R-tree trebuet nekotoryh usilij i u nas, v dannyj moment, net kakoj-libo dokumentacii o tom, kak `eto sdelat'. 4.11) CHto takoe Genetic Query Optimizer? Modul' GEQO proizvodit bystruyu optimizaciyu zaprosa, kogda proishodit svyazyvanie mnogih tablic cherez Genetic Algorithm (GA). `Eto pozvolyaet upravlyat' bol'shimi zaprosami na svyazyvanie cherez neistoschayuschij poisk. 4.12) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv? Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~* proizvodit nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE. Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak: SELECT * FROM tab WHERE lower(col) = 'abc'; `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako, esli vy sozdadite funkcional'nyj indeks, on budet ispol'zovan: CREATE INDEX tabindex ON tab (lower(col)); 4.13) Kak ya mogu opredelit', chto znachenie polya ravno NULL v kakom-libo zaprose? Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL. 4.14) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? Tip Vnutrennee imya Zamechaniya -------------------------------------------------- VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolnen iya CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny TEXT text net zadavaemogo verhnego ogranicheniya ili dlin y BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zova t' null-bajt bez opaski) "char" char odin simvol Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi i v nekotoryh soobscheniyah ob oshibkah. Pervye chetyre tipa yavlyayutsya "varlena" tipami (t.e., pervye chetyre bajta na diske yavlyayutsya dlinnoj, za kotoroj sleduyut dannye). Takim obrazom, fakticheski ispol'zuemoe prostranstvo bol'she, chem oboznachennyj razmer. Odnako, `eti tipy dannyh takzhe poddayutsya szhatiyu ili mogut byt' sohraneny ne v strokom vide cherez TOAST, tak chto zanimaemoe diskovoe prostranstvo mozhet takzhe byt' i men'she, chem ozhidalos'. VARCHAR(n) - `eto luchshee reshenie, kogda nuzhno hranit' stroki peremennoj dliny, ne prevyshayuschie opredelennogo razmera. TEXT - `eto luchshee reshenie dlya strok neogranichennoj dliny, s maksimal'no dopustimoj dlinoj v 1 gigabajt. CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno imeyut odinakovuyu dlinu. CHAR(n) zapolnyaetsya pustotoj do zadannoj dliny, v to vremya kak VARCHAR(n) hranit tol'ko simvoly, iz kotoryh sostoit stroka. BYTEA ispol'zuetsya dlya hraneniya binarnyh dannyh, znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye zdes', imeyut shodnye harakteristiki proizvoditel'nosti. 4.15.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet posledovatel'nost'. Naprimer: CREATE TABLE person ( id SERIAL, name TEXT ); avtomaticheski transliruetsya v: CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval('person_id_seq'), name TEXT ); Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva posvyaschennoj create_sequence. Vy takzhe mozhete ispol'zovat' kazhdoe pole OID v zapisi kak unikal'noe znachenie. Odnako, esli vam nuzhen damp i perezagruzka bazy dannyh, vam neobhodimo ispol'zovat' komandu pg_dump s opciej -o ili opciyu COPY WITH OIDS dlya sohraneniya znachenij polya OID. 4.15.2) Kak mne poluchit' znachenie pri vstavke SERIAL? Odin iz sposobov sostoit v poluchenii sleduyuschego znacheniya SERIAL iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v 4.15.1, primer v psevdoyazyke pokazhet kak `eto delaetsya: new_id = execute("SELECT nextval('person_id_seq')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); Zatem vy dolzhny takzhe sohranit' novoe znachenie v peremennoj new_id dlya ego ispol'zovaniya v drugih zaprosah (naprimer takih kak vneshnij klyuch dlya tablicy person). Zametim, chto imya avtomaticheski sozdannogo ob"ekta SEQUENCE budet