diff options
-rw-r--r-- | doc/FAQ_russian | 533 | ||||
-rw-r--r-- | doc/src/FAQ/FAQ_russian.html | 511 |
2 files changed, 433 insertions, 611 deletions
diff --git a/doc/FAQ_russian b/doc/FAQ_russian index 6089d606137..f2fd1ccd7b6 100644 --- a/doc/FAQ_russian +++ b/doc/FAQ_russian @@ -1,12 +1,12 @@ Otvety na chasto zadavaemye voprosy po PostgreSQL - Data poslednego obnovleniya: Ponedel'nik 14 fevralya 23:35:09 EST 2005 + Data poslednego obnovleniya: Ponedel'nik 30 maya 09:11:03 EDT 2005 Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian) (pgman@candle.pha.pa.us) - Perevel na russkij: Viktor Vislobokov (corochoone@perm.ru) + Pereviol na russkij: Viktor Vislobokov (corochoone@perm.ru) Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na http://www.PostgreSQL.org/files/documentation/faqs/FAQ.html. @@ -30,6 +30,7 @@ 1.10) Kak nauchit'sya SQL? 1.11) Kak prisoedinitsya k komande razrabotchikov? 1.12) Kak sravnivat' PostgreSQL s drugimi SUBD? + 1.13) Kto upravlyaet PostgreSQL? Voprosy pol'zovatelej po klientskoj chasti @@ -70,8 +71,8 @@ 4.8) 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.9) Kak ya mogu opredelit', chto znachenie polya ravno NULL v - kakom-libo zaprose? + 4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo + zaprose? Mogu ya otsortirovat' polya NULL ili net? 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? @@ -80,36 +81,25 @@ 4.11.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.12) CHto takoe OID? CHto takoe TID? + 4.12) CHto takoe OID? CHto takoe CTID? 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in AllocSetAlloc()"? 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - 4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku - "invalid large obj descriptor"? - 4.16) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' + 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' tekuschee vremya? - 4.17) Kak vypolnit' vneshnee svyazyvanie? - 4.18) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - 4.19) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - 4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts' - k vremennym tablicam v funkciyah PL/PgSQL? - 4.21) 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 stroku tablicy? - 5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne - vizhu izmenenij? + 4.16) Kak vypolnit' vneshnee svyazyvanie? + 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? + 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? + 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne + suschestvuet", kogda obraschayuts' k vremennym tablicam v funkciyah + PL/PgSQL? + 4.20) Kakie est' resheniya dlya replikacii? _________________________________________________________________ Obschie voprosy - 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? - + 1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? + PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El), takzhe chasto govoryat prosto Postgres. @@ -125,8 +115,8 @@ Podrobnosti smotrite v FAQ dlya razrabotchikov, http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html - 1.2) Kakovy avtorskie prava na PostgreSQL? - + 1.2) Kakovy avtorskie prava na PostgreSQL? + PostgreSQL rasprostranyaetsya po klassicheskoj licenzii BSD. `Eta licenziya ne soderzhit ogranichenij na to, kak budet ispol'zovat'sya ishodnyj kod. Nam nravitsya `eta licenziya i u nas net namerenij eio @@ -137,7 +127,8 @@ Sistema Upravleniya Bazami Dannyh PostgreSQL Portions copyright (c) 1996-2005, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California + Portions Copyright (c) 1994-1996 Regents of the University of + California Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii @@ -161,16 +152,16 @@ PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA ILI IZMENENIYA. - 1.3) Na kakih platformah rabotaet PostgreSQL? - + 1.3) Na kakih 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. - Nachinaya s versii 8.0, PostgreSQL bez vsyakih uhischrenij rabotaet na - operacionnyh sistemah Microsoft Windows, osnovannyh na NT, takih kak - Win2000, WinXP i Win2003. Paket installyatora dostupen po adresu + PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows, + osnovannyh na NT, takih kak Win2000, WinXP i Win2003. Paket + installyatora dostupen po adresu http://pgfoundry.org/projects/pginstaller. Versii Windows, osnovannye na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s pomosch'yu Cygwin. @@ -180,14 +171,13 @@ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre SQL&stype=all&sort=type&dir=%2F. - 1.4) 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.4) Gde mozhno vzyat' PostgreSQL? + + CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez + ftp, ispol'zuya ftp://ftp.PostgreSQL.org/pub/. - 1.5) Gde poluchit' podderzhku? - + 1.5) Gde poluchit' podderzhku? + Soobschestvo PostgreSQL predostavlyaet pomosch' mnozhestvu pol'zovatelej cherez E-mail. Osnovnoj web-sajt dlya podpiski na spiski rassylki po E-mail `eto: http://www.postgresql.org/community/lists/. @@ -205,22 +195,23 @@ Spisok kommercheskoj podderzhki kompanij dostupen na http://techdocs.postgresql.org/companies.php. - 1.6) Kak mne soobschit' ob oshibke? - + 1.6) Kak mne soobschit' ob oshibke? + Posetite stranichku so special'noj formoj otchiota ob oshibke v PostgreSQL po adresu: http://www.postgresql.org/support/submitbug. Takzhe prover'te nalichie bolee svezhej versii PostgreSQL na nashem - FTP sajte ftp://ftp.PostgreSQL.org/pub. + FTP sajte ftp://ftp.PostgreSQL.org/pub/. - 1.7) Kakaya poslednyaya versiya? - - Poslednij vypusk PostgreSQL - `eto versiya 8.0.1 + 1.7) Kakaya poslednyaya versiya? + + Poslednij vypusk PostgreSQL - `eto versiya 8.0.2 - My planiruem vypuskat' novye versii kazhdye 10-12 mesyacev. + My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie + versii kazhdye neskol'ko mesyacev. - 1.8) Kakaya dokumentaciya imeetsya v nalichii? - + 1.8) Kakaya dokumentaciya imeetsya v nalichii? + PostgreSQL soderzhit mnogo dokumentacii, vklyuchaya bol'shoe rukovodstvo, stranicy `elektronnogo rukovodstva man i nekotorye malen'kie testovye primery. Smotrite v katalog /doc. Vy takzhe mozhete @@ -229,8 +220,10 @@ Suschestvuet dve knigi po PostgreSQL dostupnye po adresam http://www.PostgreSQL.org/docs/books/awbook.html i - http://www.commandprompt.com/ppbook/. Spisok knig po PostgreSQL, - kotorye mozhno kupit' dostupen po adresu + http://www.commandprompt.com/ppbook/. Est' neskol'ko knig po + PostgreSQL, kotorye mozhno kupit'. Odnu iz naibolee populyarnyh + napisal Korri Duglas (Korry Douglas). Spisok obzorov po `etim knigam + 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. @@ -241,48 +234,33 @@ Nash sajt soderzhit esche bol'she informacii. - 1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih - vozmozhnostyah? - + 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/books/awbook.html nauchit SQL. - Suschestvuet drugaya kniga po PostgreSQL na - http://www.commandprompt.com/ppbook. Est' prekrasnyj uchebnik na + 1.10) Kak mne nauchit'sya SQL? + + Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos' + vyshe. 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. + 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) Kak prisoedinitsya k komande razrabotchikov? - - Dlya nachala, skachajte poslednyuyu versiyu ishodnyh tekstov i - prochtite FAQ i dokumentaciyu dlya 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.12) Kak sravnivat' PostgreSQL s drugimi SUBD? - + 1.11) Kak prisoedinitsya k komande razrabotchikov? + + Smotrite FAQ dlya razrabotchikov. + + 1.12) Kak sravnivat' PostgreSQL s drugimi SUBD? + Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya: vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena. @@ -298,15 +276,8 @@ Proizvoditel'nost' Proizvoditel'nost' PostgreSQL shodna s drugimi kommercheskimi SUBD i s SUBD s otkrytym ishodnym kodom. V kakih-to veschah my - bystree, v kakih-to medlennee. V sravnenii s MySQL ili linejnoj - SUBD, my bystree, kogda pol'zovatelej mnogo, a takzhe na - slozhnyh zaprosah i pri 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. + bystree, v kakih-to medlennee. Nasha proizvoditel'nosti obychno + +/-10% po sravneniyu s drugimi SUBD. Nadezhnost' My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona @@ -339,10 +310,23 @@ opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena vyshe. + 1.13) Kto upravlyaet PostgreSQL? + + Esli vy ischite kakogo-to osobennogo cheloveka, central'nyj komitet + ili upravlyayuschuyu kompaniyu, to naprasno --- ih net. U nas est' + yadro komiteta i razrabotchikov, rabotayuschih s CVS, no `eti gruppy + sluzhat bol'she dlya administrativnyh celej, chem dlya upravleniya. + Proekt napryamuyu funkcioniruet s pomosch'yu soobschestva + razrabotchikov i pol'zovatelej, k kotoromu mozhet prisoedinitsya + kazhdyj. Vsio chto nuzhno -- `eto podpisat'sya na spiski rassylki i + uchastvovat' v diskussiyah. (Podrobnosti o tom kak vklyuchit'sya v + razrabotku PostgreSQL smotrite v FAQ dlya razrabotchikov.) + _________________________________________________________________ + Voprosy pol'zovatelej po klientskoj chasti - 2.1) Kakie interfejsy est' dlya PostgreSQL? - + 2.1) Kakie interfejsy est' dlya PostgreSQL? + Ustanovka PostgreSQL vklyuchaet tol'ko C i vstroennyj (embedded) C interfejsy. Vse drugie interfejsy yavlyayutsya nezavisimymi proektami i zagruzhayutsya otdel'no; samostoyatel'nost' proektov pozvolyaet im @@ -354,46 +338,40 @@ Python i mnogih drugih, dostupny na http://gborg.postgresql.org v sekcii Drivers/Interfaces, a takzhe cherez poisk v Internet. - 2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez - Web? - + 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, PHP http://www.php.net yavlyaetsya neplohim interfejsom. - V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i CGI.pm ili mod_perl. - - 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? - - Da, suschestvuet neskol'ko graficheskih interfejsov dlya PostgreSQL. - Oni vklyuchayut PgAdmin III (http://www.pgadmin.org), PgAccess - (http://www.pgaccess.org), RHDB Admin - (http://sources.redhat.com/rhdb/), TORA (http://www.globecom.net/tora/ - chastichno kommercheskoe PO) i Rekall ( - http://www.rekallrevealed.org/). Takzhe est' PhpPgAdmin ( - http://phppgadmin.sourceforge.net/) - interfejs k PostgreSQL, - osnovannyj na Web. + V slozhnyh sluchayah, mnogie pol'zuyutsya Perl i DBD::Pg s CGI.pm ili + mod_perl. + + 2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? + + Da, podrobnosti smotrite v + http://techdocs.postgresql.org/guides/GUITools. _________________________________________________________________ Voprosy administrirovaniya - 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? - + 3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql? + Zadajte opciyu --prefix kogda zapuskaete configure. - 3.2) Kak mne upravlyat' soedineniyami s drugih komp'yuterov? - + 3.2) Kak mne upravlyat' soedineniyami s drugih komp'yuterov? + Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj mashine cherez sokety domena Unix ili TCP/IP soedineniya. Dlya togo, chtoby drugie mashiny smogli podklyuchit'sya k baze vy dolzhny izmenit' listen_addresses v postgresql.conf, razreshit' host-avtorizaciya v fajle $PGDATA/pg_hba.conf i perestartovat' server. - 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya - proizvoditel'nosti? - + 3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti? + Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut uvelichit' proizvoditel'nost': @@ -430,64 +408,27 @@ http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde x.html i http://www.powerpostgresql.com/PerfList/. - 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? - + 3.4) Kakie vozmozhnosti dlya otladki est' v nalichii? + Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na log_*, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty processa, kotoraya ochen' polezna dlya otladki i izmereniya proizvoditel'nosti. - Dlya predostavleniya bolee detal'noj informacii razrabotchikam servera - pri otladke kakoj-libo problemy dolzhny pol'zovat'sya sleduyuschie - instrukcii. - - Takim zhe obrazom mozhno proizvodit' i otladku severa, esli on - rabotaet nepravil'no. 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. - - 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 simvolami, - 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'zuya SELECT - pg_backend_pid(). Ispol'zujte otladchik 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. - - 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.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda - pytayus' podklyuchit'sya k baze? - + 3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda + pytayus' podklyuchit'sya k baze? + Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya na 100 sessij podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' dlya postmaster limit na kolichestvo konkurentnyh backend processov, izmeniv znachenie max_connections v fajle postgresql.conf i perestartovat' postmaster. - 3.6) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov - PostgreSQL? - + 3.6) 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.4 do 7.4.1 ne + podvypuskami. Takim obrazom obnovlenie s versii 7.4.0 do 7.4.1 ne trebuet vypolneniya dump i restore. Odnako pri vyhode ocherednogo vypuska (t.e. pri obnovlenii naprimer, s 7.3 na 7.4) chasto menyaetsya vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya @@ -501,8 +442,8 @@ bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda mozhno ispol'zovat' pg_upgrade dlya `etogo vypuska. - 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? - + 3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'? + Poskol'ku "zhelezo" personal'nyh komp'yuterov yavlyaetsya naibolee sovmestimym, lyudi sklonny verit', chto takoe "zhelezo" imeet odinakovoe kachestvo. `Eto ne tak. Pamyat' ECC, SCSI i kachestvennye @@ -516,15 +457,15 @@ Voprosy `ekspluatacii - 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? - Proizvol'noj stroki? - + 4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa? + Proizvol'noj stroki? + Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih - kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. Esli est' - kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to vozmozhno, chto - ves' zapros vypolnen i ne budet. Esli vy ne znaete kolichestva - neobhodimyh strok na moment vypolneniya SELECT, ispol'zujte kursor i - FETCH. + kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. + Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to + vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete + kolichestva neobhodimyh strok na moment vypolneniya SELECT, + ispol'zujte kursor i FETCH. To SELECT a random row, use: SELECT col @@ -532,10 +473,10 @@ ORDER BY random() LIMIT 1; - 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli - suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya - polucheniya `etoj informacii? - + 4.2) Kak mne najti kakie tablicy, indeksy, bazy dannyh i pol'zovateli + suschestvuyut? Kak mne uvidet' zaprosy, kotorye ispol'zuet psql dlya + polucheniya `etoj informacii? + 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 @@ -555,8 +496,8 @@ mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz sistemnyh tablic bazy dannyh. - 4.3) Kak izmenit' tip dannyh kolonki? - + 4.3) Kak izmenit' tip dannyh kolonki? + V 8.0 i bolee pozdnih versiyah, izmenenie tipa kolonki vypolnyaetsya ochen' legko cherez ALTER TABLE ALTER COLUMN TYPE. @@ -567,9 +508,8 @@ ALTER TABLE tab DROP COLUMN old_col; COMMIT; - 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy - dannyh? - + 4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy dannyh? + Suschestvuyut sleduyuschie ogranicheniya: Maksimal'nyj razmer bazy? neogranichen (suschestvuyut bazy na 32 TB) @@ -595,9 +535,9 @@ byt' uvelicheny v chetyre raza, esli razmer bloka po umolchaniyu budet uvelichen do 32k. - 4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya - dannyh iz obychnogo tekstovogo fajla? - + 4.5) 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. @@ -630,15 +570,15 @@ Znacheniya NULL hranyatsya kak bitovye karty i po`etomu oni zanimayut ochen' malo mesta. - 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi - indeksy? - - 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 strok 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. + 4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut moi + indeksy? + + Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa. Oni ispol'zuyutsya + tol'ko esli tablica bol'she minimal'nogo razmera i zapros vybiraet + tol'ko malen'kij procent strok 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 @@ -665,8 +605,8 @@ 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. + zapustite zapros snova, chtoby uvidet', dejstvitel'no li skanirovanie + indeksov bystree. Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~, indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah: @@ -689,14 +629,14 @@ esli tipy dannyh tochno ne sovpadali s indeksnymi tipami kolonok. `Eto osobenno kasalos' int2, int8 i numeric indeksov kolonok. - 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? - + 4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros? + Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN. - 4.8) 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.8) 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. @@ -710,13 +650,24 @@ esli vy sozdadite indeks vyrazheniya, on budet ispol'zovan: CREATE INDEX tabindex ON tab (lower(col)); - 4.9) 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.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? - + 4.9) Kak mne opredelit', chto znachenie polya ravno NULL v kakom-libo + zaprose? Mogu ya otsortirovat' polya NULL ili net? + + Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL, kak zdes': + SELECT * + FROM tab + WHERE col IS NULL; + + CHtoby otsortirovat' dannye po znacheniyu ispol'zujte modifikatory IS + NULL i IS NOT NULL v vyrazhenii ORDER BY. Kogda oni budut generirovat' + znacheniya istina, to pri sortirovke oni budut vyshe, chem znacheniya + lozh', tak chto zapisi s NULL budut v otsortirovannom spiske sverhu: + SELECT * + FROM tab + ORDER BY (col IS NOT NULL); + + 4.10) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami? + Tip Vnutrennee imya Zamechaniya VARCHAR(n) varchar razmer zadaet maksimal'nuyu dlinu, net zapolneniya CHAR(n) bpchar zapolnyaetsya pustotoj do fiksirovannoj dliny @@ -731,10 +682,9 @@ 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'. + chem oboznachennyj razmer. Odnako, dlinnye znacheniya takzhe + szhimayutsya, 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 @@ -747,8 +697,8 @@ znacheniya kotoryh mogut vklyuchat' NULL bajty. Vse tipy opisannye zdes', imeyut shodnye harakteristiki proizvoditel'nosti. - 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? - + 4.11.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem? + PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet posledovatel'nost'. Naprimer: CREATE TABLE person ( @@ -766,8 +716,8 @@ Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva posvyaschennoj create_sequence. - 4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL? - + 4.11.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 @@ -788,23 +738,23 @@ execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); new_id = execute("SELECT currval('person_id_seq')"); - 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i - nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? - + 4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i + nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami? + Net. currval() vozvraschaet tekuschee znachenie, naznachennoe vashej sessiej, a ne drugimi sessiyami. - 4.11.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.11.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? + Dlya realizacii konkuretnosti, znacheniya posledovatel'nostej, pri neobhodimosti vydayutsya vo vremya zapuska tranzakcij i ne blokiruyutsya do polnogo vypolneniya tranzakcij. `Eto mozhet vyzyvat' razryvy v numeracii pri otmene tranzakcij. - 4.12) CHto takoe OID? CHto takoe TID? - + 4.12) CHto takoe OID? CHto takoe CTID? + Kazhdaya, sozdavaemaya v PostgreSQL tablichnaya stroka, poluchaet unikal'nyj indentifikator OID za isklyucheniem sluchaya kogda ispol'zovalos' WITHOUT OIDS. OID - `eto avtomaticheski naznachaemoe @@ -819,14 +769,16 @@ obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij 8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8. - TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s - blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak - stroki v tablice byli izmeneny ili peregruzheny. TID ispol'zuetsya - indeksnymi zapisyami v kachestve ukazatelya na fizicheskie zapisi. + CTID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej + s blochnymi i offset znacheniyami. CTID izmenyaetsya posle togo kak + stroki v tablice byli izmeneny ili peregruzheny. + + TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na + fizicheskie zapisi. - 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in - AllocSetAlloc()"? - + 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in + AllocSetAlloc()"? + Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes' pered zapuskom postmaster vypolnit' sleduyuschie komandy: @@ -841,36 +793,18 @@ klientom, potomu chto backend vozvraschaet slishkom bol'shoj ob"em dannyh, popytajtes' vypolnit' `etu komandu pered zapuskom klienta. - 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? - + 4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena? + Iz psql, naberite SELECT version(); - 4.15) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku - "invalid large obj descriptor"? - - Vam nuzhno pri ispol'zovanii bol'shogo ob"ekta pomestit' v nachale - BEGIN WORK i v konce COMMIT, a vnutri poluchivshegosya bloka lo_open - ... lo_close. - - V nastoyaschij moment PostgreSQL trebuet, chtoby pri zakrytii - bol'shogo ob"ekta proishodilo vypolnenie tranzakcii. Takim obrazom, - pervaya zhe popytka sdelat' chto-libo s bol'shim ob"ektom, ne - soblyudaya dannogo pravila privedet k soobscheniyu invalid large obj - descriptor, tak kak kod vypolnyayuschij rabotu nad bol'shim ob"ektom - (po krajnej mere v nastoyaschij moment) budet generirovat' soobschenie - ob oshibke esli vy ne ispol'zuete tranzakciyu. - - Esli vy ispol'zuete takoj interfejs klienta kak ODBC, vam vozmozhno - ponadobitsya ustanovit' auto-commit off. - - 4.16) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' - tekuschee vremya? - + 4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat' + tekuschee vremya? + Ispol'zujte CURRENT_TIMESTAMP: CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - 4.17) Kak mne vypolnit' vneshnee svyazyvanie? - + 4.16) Kak mne vypolnit' vneshnee svyazyvanie? + PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj sintaksis SQL. Vot dva primera: SELECT * @@ -888,8 +822,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah. Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya. - 4.18) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? - + 4.17) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh? + Ne suschestvuet sposoba sozdat' zapros k bazam dannyh otlichnym ot tekuschej. Poskol'ku PostgreSQL zagruzhaet sistemnye katalogi specifichnye dlya bazy dannyh, neponyatno dazhe, kak dolzhen sebya @@ -900,14 +834,14 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat' informaciyu iz nih. - 4.19) Kak mne vernut' iz funkcii neskol'ko strok tablicy? - + 4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy? + Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok, http://techdocs.postgresql.org/guides/SetReturningFunctions. - 4.20) Pochemu ya poluchayu oshibku "missing oid", kogda obraschayuts' k - vremennym tablicam v funkciyah PL/PgSQL? - + 4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet", + kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL? + PL/PgSQL k`eshiruet scenarii funkcii i odin iz negativnyh `effektov `etogo sostoit v tom, chto esli funkciya PL/PgSQL obraschaetsya k vremennoj tablice i `eta tablica pozdnee udalyaetsya i peresozdaetsya, @@ -917,50 +851,21 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); EXECUTE dlya dostupa k vremennym tablicam v PL/PgSQL. Ispol'zovanie `etogo operatora zastavit zapros peregenerirovat'sya kazhdyj raz. - 4.21) Kakie opcii shifrovaniya suschestvuyut? - - * contrib/pgcrypto soderzhit mnogo funkcij shifrovaniya dlya - ispol'zovaniya v SQL zaprosah. - * Dlya shifrovaniya peredavaemyh dannyh ot klienta k serveru, na - servere v fajle postgresql.conf, opciya ssl dolzhna byt' - ustanovlena v true, v fajle pg_hba.conf dolzhna byt' - sootvetstvuyuschaya zapis' host ili hostssl i na storone klienta - sslmode ne dolzhen byt' zapreschion cherez disable. (Zametim, chto - takzhe vozmozhno ispol'zovanie nezavisimyh vneshnih shifruyuschih - transportov, takih kak stunnel ili ssh, vmesto sobstvennyh SSL - soedinenij PostgreSQL). - * Paroli pol'zovatelej k baze dannyh avtomaticheski shifruyutsya, - pri sohranenii v sistemnyh tablicah. - * Server mozhno zapustit', ispol'zuya shifrovannuyu fajlovuyu - sistemu. - _________________________________________________________________ - - Rasshireniya PostgreSQL - - 5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya zapuskayu - ee v psql, pochemu ya poluchayu core dump? - - Problema mozhet zaklyuchat'sya v neskol'kih veschah. Popytajtes' - sperva protestirovat' vashu funkciyu v otdel'noj samostoyatel'noj - programme. - - 5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v - PostgreSQL? - - Otprav'te vashi rasshireniya v spisok rassylki pgsql-hackers i oni po - vozmozhnosti budut pomescheny v podkatalog contrib/. - - 5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu stroku tablicy? - - V versiyah PostgreSQL, nachinaya s 7.3, funkcii, vozvraschayuschie - tablicy polnost'yu podderzhivayutsya v C, PL/PgSQL i SQL. Podrobnosti - smotrite v Rukovodstve Programmista. Primer vozvraschayuschej tablicu - funkcii, napisannoj na C, mozhno najti v contrib/tablefunc. - - 5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne vizhu - izmenenij? - - Fajly Makefile ne imeyut pravil'nyh zavisimostej dlya include fajlov. - Vy dolzhny vypolnit' make clean i zatem make. Esli vy ispol'zuete GCC - vy mozhete ispol'zovat' opciyu --enable-depend v configure chtoby - poruchit' kompilyatoru avtomaticheski otslezhivat' zavisimosti. + 4.20) Kakie est' resheniya dlya replikacii? + + Hotya "replikaciya" -- `eto edinyj termin, est' neskol'ko raznyh + tehnologij dlya vypolneniya replikacij s raznymi osobennostyami dlya + kazhdoj. + + Replikaciya Master/slave pozvolyaet imet' odin glavnyj (master) server + dlya vypolneniya zaprosov chteniya/zapisi, v to vremya kak + podchinionnye (slave) servera mogut proizvodit' tol'ko zaprosy + chteniya/SELECT. Naibolee populyarnym resheniem dlya replikacii + master-slave v PostgreSQL yavlyaetsya Slony-I. + + Replikaciya Multi-master pozvolyaet vypolnyat' zaprosy chteniya/zapisi + na neskol'kih, repliciruemyh drug s drugom komp'yuetrah. `Eta + osobennost' takzhe privodit k potere proizvoditel'nosti, potomu chto + neobhodima sinhronizaciya izmenenij mezhdu neskol'kimi serverami. + Naibolee populyarnym resheniem dlya takoj replikacii v PostgreSQL + yavlyaetsya Pgcluster. diff --git a/doc/src/FAQ/FAQ_russian.html b/doc/src/FAQ/FAQ_russian.html index 768271eb848..a4fd9ffb4c2 100644 --- a/doc/src/FAQ/FAQ_russian.html +++ b/doc/src/FAQ/FAQ_russian.html @@ -12,12 +12,12 @@ <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> <H1>Ответы на часто задаваемые вопросы по PostgreSQL</H1> - <P>Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005</P> + <P>Дата последнего обновления: Понедельник 30 мая 09:11:03 EDT 2005</P> <P>Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (<A href= "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> </P> - <P>Перевел на русский: Виктор Вислобоков (<A href= + <P>Перевёл на русский: Виктор Вислобоков (<A href= "mailto:corochoone@perm.ru">corochoone@perm.ru</A>)<BR> </P> @@ -43,6 +43,7 @@ <A href="#1.11">1.11</A>) Как присоединится к команде разработчиков?<BR> <A href="#1.12">1.12</A>) Как сравнивать PostgreSQL с другими <SMALL>СУБД</SMALL>?<BR> + <A href="#1.13">1.13</A>) Кто управляет PostgreSQL?<BR> <H2 align="center">Вопросы пользователей по клиентской части</H2> @@ -87,8 +88,9 @@ <A href="#4.8">4.8</A>) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? Как мне использовать индекс для поиска независимого от регистра букв?<BR> - <A href="#4.9">4.9</A>) Как я могу определить, что значение поля равно - <SMALL>NULL</SMALL> в каком-либо запросе?<BR> + <A href="#4.9">4.9</A>) Как мне определить, что значение поля равно + <SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля + <SMALL>NULL</SMALL> или нет?<BR> <A href="#4.10">4.10</A>) Каковы отличия между разными символьными типами?<BR> <A href="#4.11.1">4.11.1</A>) Как мне создать поле serial/с-авто-увеличением?<BR> @@ -101,38 +103,26 @@ не используются снова при отмене транзакции? Почему создаются разрывы при нумерации в колонке, где я использую последовательность/SERIAL?<BR> <A href="#4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое - <SMALL>TID</SMALL>?<BR> + <SMALL>CTID</SMALL>?<BR> <A href="#4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>?<BR> <A href="#4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL запущена?<BR> - <A href="#4.15">4.15</A>) Почему при работе с моим большим объектом - я получаю ошибку <I>"invalid large obj descriptor"</I>?<BR> - <A href="#4.16">4.16</A>) Как мне создать колонку которая по умолчанию + <A href="#4.15">4.15</A>) Как мне создать колонку которая по умолчанию будет содержать текущее время?<BR> - <A href="#4.17">4.17</A>) Как выполнить внешнее связывание?<BR> - <A href="#4.18">4.18</A>) Как выполнять запросы, использующие несколько + <A href="#4.16">4.16</A>) Как выполнить внешнее связывание?<BR> + <A href="#4.17">4.17</A>) Как выполнять запросы, использующие несколько баз данных?<BR> - <A href="#4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?<BR> - <A href="#4.20">4.20</A>) Почему я получаю ошибку "missing oid", - когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR> - <A href="#4.21">4.21</A>) Какие опции шифрования существуют?<BR> - - <H2 align="center">Расширения PostgreSQL</H2> - <A href="#5.1">5.1</A>) Я написал функцию определяемую пользователем. - Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?<BR> - <A href="#5.2">5.2</A>) Как я могу внести некоторые классные новые - типы и функции в PostgreSQL?<BR> - <A href="#5.3">5.3</A>) Как мне написать C функцию, возвращающую - строку таблицы?<BR> - <A href="#5.4">5.4</A>) Я изменил исходный файл. Почему после - перекомпиляции я не вижу изменений?<BR> - + <A href="#4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?<BR> + <A href="#4.19">4.19</A>) Почему я получаю ошибку "relation with OID #### + не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?<BR> + <A href="#4.20">4.20</A>) Какие есть решения для репликации?<BR> + <HR> <H2 align="center">Общие вопросы</H2> - <H4><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H4> + <H3><A name="1.1">1.1</A>) Что такое PostgreSQL? Как произносится это название?</H3> <P>PostgreSQL произносится <I>Post-Gres-Q-L (Пост-Грес-Кью-Эл)</I>, также часто говорят просто <I>Postgres</I>.</P> @@ -151,7 +141,7 @@ http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html</A> </P> - <H4><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H4> + <H3><A name="1.2">1.2</A>) Каковы авторские права на PostgreSQL?</H3> <P>PostgreSQL распространяется по классической лицензии BSD. Эта лицензия не содержит ограничений на то, как будет использоваться @@ -163,7 +153,7 @@ <P>Система Управления Базами Данных PostgreSQL</P> <P>Portions copyright (c) 1996-2005, PostgreSQL Global Development - Group Portions Copyright (c) 1994-6 Regents of the University of + Group Portions Copyright (c) 1994-1996 Regents of the University of California</P> <P>Предоставляются права на использование, копирование, изменение @@ -187,16 +177,16 @@ "КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.</P> - <H4><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H4> + <H3><A name="1.3">1.3</A>) На каких платформах работает PostgreSQL?</H3> <P>Обычно, PostgreSQL может работать на любой современной платформе совместимой с Unix. В инструкции по установке, вы найдете список тех платформ, на которых были проведены тестовые запуски PostgreSQL к моменту выхода данной версии.</P> - <P>Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на - операционных системах Microsoft Windows, основанных на NT, таких как - Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу + <P>PostgreSQL также работает на операционных системах Microsoft + Windows, основанных на NT, таких как Win2000, WinXP и Win2003. + Пакет инсталлятора доступен по адресу <A href="http://pgfoundry.org/projects/pginstaller"> http://pgfoundry.org/projects/pginstaller</A>. Версии Windows, основанные на MS-DOS (Win95, Win98, WinMe) могут запускать @@ -208,14 +198,13 @@ <A href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</A>.</P> - <H4><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H4> + <H3><A name="1.4">1.4</A>) Где можно взять PostgreSQL?</H3> - <P>Например, воспользовавшись анонимным доступом на ftp сайт - PostgreSQL <A href= - "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. - Список зеркал вы найдете на нашем основном сайте.</P> + <P>Через браузер, используя <a href="http://www.postgresql.org/ftp/"> + http://www.postgresql.org/ftp/</a> и через ftp, используя + <A href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>.</P> - <H4><A name="1.5">1.5</A>) Где получить поддержку?</H4> + <H3><A name="1.5">1.5</A>) Где получить поддержку?</H3> <P>Сообщество PostgreSQL предоставляет помощь множеству пользователей через E-mail. Основной web-сайт для подписки на списки рассылки по @@ -233,28 +222,30 @@ языках. Также существует канал по PostgreSQL на сервере EFNet.</P> <P>Список коммерческой поддержки компаний доступен на - <A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> + <A href="http://techdocs.postgresql.org/companies.php"> + http://techdocs.postgresql.org/companies.php</A>.</P> - <H4><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H4> + <H3><A name="1.6">1.6</A>) Как мне сообщить об ошибке?</H3> <P>Посетите страничку со специальной формой отчёта об ошибке в PostgreSQL по адресу: - <A href="http://www.postgresql.org/support/submitbug"> + <A HREF="http://www.postgresql.org/support/submitbug"> http://www.postgresql.org/support/submitbug</A>.</P> <P>Также проверьте наличие более свежей версии PostgreSQL на нашем - FTP сайте <A href="ftp://ftp.postgresql.org/pub"> - ftp://ftp.PostgreSQL.org/pub</A>.</P> + FTP сайте <A href="ftp://ftp.postgresql.org/pub/"> + ftp://ftp.PostgreSQL.org/pub/</A>. - <H4><A name="1.7">1.7</A>) Какая последняя версия?</H4> + <H3><A name="1.7">1.7</A>) Какая последняя версия?</H3> - <P>Последний выпуск PostgreSQL - это версия 8.0.1</P> + <P>Последний выпуск PostgreSQL - это версия 8.0.2</P> - <P>Мы планируем выпускать новые версии каждые 10-12 месяцев.</P> + <P>Мы планируем выпускать новые старшие версии каждый год, + а младшие версии каждые несколько месяцев.</P> - <H4><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H4> + <H3><A name="1.8">1.8</A>) Какая документация имеется в наличии?</H3> <P>PostgreSQL содержит много документации, включая большое руководство, страницы электронного руководства man и некоторые маленькие тестовые @@ -264,11 +255,13 @@ <P>Существует две книги по PostgreSQL доступные по адресам <A href= "http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> - и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. - Список книг по PostgreSQL, которые можно купить доступен по адресу - <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. - Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a> - вы можете найти коллекцию технических статей посвященных PostgreSQL.</p> + и <a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. + Есть несколько книг по PostgreSQL, которые можно купить. + Одну из наиболее популярных написал Корри Дуглас (Korry Douglas). + Список обзоров по этим книгам доступен по адресу + <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. + Кроме того, по адресу <a href="http://techdocs.postgresql.org">http://techdocs.PostgreSQL.org/</a> + вы можете найти коллекцию технических статей посвященных PostgreSQL.</P> <P>Клиент командной строки <I>psql</I> имеет несколько команд \d для отображения информации по типам, операторам, функциям, агрегатам и т.д. - @@ -276,56 +269,41 @@ <P>Наш сайт содержит еще больше информации.</P> - <H4><A name="1.9">1.9</A>) Как найти информацию об известных ошибках - или отсутствующих возможностях?</H4> + <H3><A name="1.9">1.9</A>) Как найти информацию об известных ошибках + или отсутствующих возможностях?</H3> <P>PostgreSQL поддерживает расширенный подкласс <SMALL>SQL</SMALL>-92. Смотрите наш список <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> на предмет известных ошибок, отсутствующих возможностей и будущих планов.</P> - <H4><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H4> - - <P>Книга по PostgreSQL на <A href= - "http://www.PostgreSQL.org/docs/books/awbook.html">http://www.PostgreSQL.org/docs/books/awbook.html</A> - научит <SMALL>SQL</SMALL>. Существует другая книга по PostgreSQL на - <A href="http://www.commandprompt.com/ppbook/"> - http://www.commandprompt.com/ppbook.</A> - Есть прекрасный учебник на <A href= - "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - на <A href= - "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A> - и на <A href= - "http://sqlcourse.com/">http://sqlcourse.com.</A></P> + <H3><A name="1.10">1.10</A>) Как мне научиться <SMALL>SQL</SMALL>?</H3> - <P>Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition" - (Освой самостоятельно SQL за 21 день, Вторая редакция) - на <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P> - - <P>Многим из наших пользователей нравится книга + <P>Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось + выше. Еще один учебник - это книга "Teach Yourself SQL in 21 Days, + Second Edition" (Освой самостоятельно SQL за 21 день, Вторая редакция) + на <A href="http://members.tripod.com/er4ebus/sql/index.htm"> + http://members.tripod.com/er4ebus/sql/index.htm</A>. + Многим из наших пользователей нравится книга <I>The Practical SQL Handbook</I>, Bowman, Judith S., et al., Addison-Wesley. Другим нравится <I>The Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P> - <H4><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H4> + Есть прекрасный учебник на <A href= + "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> + на <A href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A> + и на <A href="http://sqlcourse.com/">http://sqlcourse.com.</A></P> + - <P>Для начала, скачайте последнюю версию исходных текстов и прочтите - FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в - дистрибутиве. Затем, подпишитесь на списки рассылки <I>pgsql-hackers</I> и - <I>pgsql-patches</I>. Далее, отправляйте исправления (patches) высокого - качества в список pgsql-patches.</P> + <H3><A name="1.11">1.11</A>) Как присоединится к команде разработчиков?</H3> - <P>Существует ограниченный список людей, который имеют привелегию - вносить изменения в <SMALL>CVS</SMALL> архив PostgreSQL. Каждый - из этих людей в свое время отправил так много высококачественных исправлений, - что их было невозможно оставить без внимания и они были удостоены - превилегии вносить изменения, и мы уверены, что те исправления, которые - они внесут будут высокого качества.</P> + <P>Смотрите <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> + FAQ для разработчиков</A>.</P> - <H4><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими - <SMALL>СУБД</SMALL>?</H4> + + <H3><A name="1.12">1.12</A>) Как сравнивать PostgreSQL с другими + <SMALL>СУБД</SMALL>?</H3> <P> Существует несколько методов сравнения программного обеспечения: @@ -348,14 +326,8 @@ <DD>Производительность PostgreSQL сходна с другими коммерческими СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее, - в каких-то медленнее. В сравнении с MySQL или линейной - СУБД, мы быстрее, когда пользователей много, а также на сложных - запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых - SELECT запросов, выполняемых небольшим количеством пользователей. - И разумеется, MySQL не имеет каких-либо возможностей из - перечисленых выше, в секции <I>Возможности</I>. - Мы делаем упор на надежность и расширенные возможности, но мы также - продолжаем увеличивать производительность с каждым выпуском. <BR> + в каких-то медленнее. Наша производительности обычно +/-10% по + сравнению с другими СУБД. <BR> </DD> @@ -396,10 +368,25 @@ </DD> </DL> + <H3><A name="1.13">1.13</A>) Кто управляет PostgreSQL?</H3> + + <P>Если вы ищите какого-то особенного человека, центральный + комитет или управляющую компанию, то напрасно --- их нет. + У нас есть ядро комитета и разработчиков, работающих с CVS, + но эти группы служат больше для административных целей, чем + для управления. Проект напрямую функционирует с помощью + сообщества разработчиков и пользователей, к которому может + присоединится каждый. Всё что нужно -- это подписаться на + списки рассылки и участвовать в дискуссиях. (Подробности о + том как включиться в разработку PostgreSQL смотрите в + <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> + FAQ для разработчиков</A>.)</P> - <H2 align="center">Вопросы пользователей по клиентской части</H2> + <HR> - <H4><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H4> + <H3 align="center">Вопросы пользователей по клиентской части</H3> + + <H3><A name="2.1">2.1</A>) Какие интерфейсы есть для PostgreSQL?</H3> <P>Установка PostgreSQL включает только <small>C</small> и встроенный (embedded) <small>C</small> интерфейсы. Все другие интерфейсы @@ -414,8 +401,8 @@ в секции <i>Drivers/Interfaces</I>, а также через поиск в Интернет.</P> - <H4><A name="2.2">2.2</A>) Какие инструменты существуют для использования - PostgreSQL через Web?</H4> + <H3><A name="2.2">2.2</A>) Какие инструменты существуют для использования + PostgreSQL через Web?</H3> <P>Прекрасное введение во взаимодействие баз данных и Web можно найти на: <A href="http://www.webreview.com">http://www.webreview.com</A></P> @@ -423,33 +410,26 @@ <P>Для интеграции с Web, PHP <A href="http://www.php.net"> http://www.php.net</A> является неплохим интерфейсом.</P> - <P>В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.</P> - - <H4><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс - пользователя?</H4> - - <P>Да, существует несколько графических интерфейсов для PostgreSQL. - Они включают PgAdmin III (<A href="http://www.pgadmin.org/">http://www.pgadmin.org</A>), - PgAccess (<A href="http://www.pgaccess.org/">http://www.pgaccess.org</A>), - RHDB Admin (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>), - TORA (<A href="http://www.globecom.net/tora/">http://www.globecom.net/tora/</A> - частично коммерческое ПО) - и Rekall (<A href="http://www.rekallrevealed.org/"> - http://www.rekallrevealed.org/</A>). Также есть - PhpPgAdmin (<A href="http://phppgadmin.sourceforge.net/"> - http://phppgadmin.sourceforge.net/</A>) - интерфейс к PostgreSQL, - основанный на Web.</P> + <P>В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm + или mod_perl.</P> + + <H3><A name="2.3">2.3</A>) Есть ли у PostgreSQL графический интерфейс + пользователя?</H3> + + <P>Да, подробности смотрите в <a href="http://techdocs.postgresql.org/guides/GUITools"> + http://techdocs.postgresql.org/guides/GUITools</A>.</P> + <HR> <H2 align="center">Вопросы администрирования</H2> - <H4><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное - от <I>/usr/local/pgsql</I>?</H4> + <H3><A name="3.1">3.1</A>) Как мне установить PostgreSQL в место отличное + от <I>/usr/local/pgsql</I>?</H3> <P>Задайте опцию <I>--prefix</I> когда запускаете <I>configure</I>.</P> - <H4><A name="3.2">3.2</A>) Как мне управлять соединениями с других - компьютеров?</H4> + <H3><A name="3.2">3.2</A>) Как мне управлять соединениями с других + компьютеров?</H3> <P>По умолчанию, PostgreSQL разрешает только соединения на локальной машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы @@ -458,8 +438,8 @@ host-авторизация в файле <I>$PGDATA/pg_hba.conf</I> и перестартовать сервер.</P> - <H4><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения - производительности?</H4> + <H3><A name="3.3">3.3</A>) Какие настройки мне нужно сделать для улучшения + производительности?</H3> <P>Существует три главных области, которые потенциально могут увеличить производительность:</P> @@ -510,55 +490,17 @@ </DD> </DL> - <H4><A name="3.4">3.4</A>) Какие возможности для отладки есть в - наличии?</H4> + <H3><A name="3.4">3.4</A>) Какие возможности для отладки есть в + наличии?</H3> <P>Есть множество установок в настройках сервера, начинающихся на <code>log_*</code>, позволяющих протоколировать запросы и статистику работы процесса, которая очень полезна для отладки и измерения производительности.</P> - <P><B>Для предоставления более детальной информации разработчикам - сервера при отладке какой-либо проблемы должны пользоваться - следующие инструкции.</B></P> - - <P>Таким же образом можно производить и отладку севера, если он - работает неправильно. Во-первых, при запуске <I>configure</I> с - опцией --enable-cassert, многие вызовы <I>assert()</I> позволяют - отслеживать работу backend процесса и остановку программы при - возникновении каких-либо неожиданностей.</P> - - <P>Если <I>postmaster</I> не запущен, вы можете запустить - <I>postgres</I> backend из командной строки и ввести ваш оператор - <SMALL>SQL</SMALL> напрямую. Это рекомендуется <B>только</B> для - целей отладки. Заметим, что в этом режиме, запрос завершается символом - новой строки, а не точкой с запятой. Если вы производили компиляцию - с отладочными символами, вы можете использовать любой отладчик, чтобы - посмотреть, что случилось. Поскольку backend запускается не из - <I>postmaster</I>, он не запускается в идентичном окружении и значит - проблемы итераций блокировок/backend не могут быть воспроизведены.</P> - - <P>Если <I>postmaster</I> запущен, запустите <I>psql</I> в одном - окне, затем найдите <SMALL>PID</SMALL> процесса <I>postgres</I>, - используемый <I>psql</I>, используя <CODE>SELECT pg_backend_pid()</CODE>. - Используйте отладчик для подключения к <I>postgres</I> <SMALL>PID</SMALL>. - Вы можете установить точки прерывания в отладчике и запустить запрос - из <I>psql</I>. Если - вы производите отладку запуска <I>postgres</I>, вы можете установить - PGOPTIONS="-W n", и затем запустить <I>psql</I>. Эта опция приводит - к задержке процесса запуска на <I>n</I> секунд, в течение которых - вы можете подключить к процессу отладчик, установить любые точки - прерывания и продолжить запуск.</P> - - <P>Вы также можете скомпилировать PostgreSQL с профилированием для - того, чтобы увидеть какие функции сколько времени выполняются. - Файлы профилирования backend'а находятся в каталоге - <I>pgsql/data/base/dbname</I>. Файл профилирования клиента - будет помещен в текущий каталог клиента. В Linux для выполнения - профилирования требуется компиляции с <I>-DLINUX_PROFILE</I>.</P> - - <H4><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too - many clients"</I> когда пытаюсь подключиться к базе?</H4> + + <H3><A name="3.5">3.5</A>) Почему я получаю сообщение <I>"Sorry, too + many clients"</I> когда пытаюсь подключиться к базе?</H3> <P>Вы достигли установленного по умолчанию ограничения на 100 сессий подключения к базе данных. Вам необходимо увеличить для @@ -567,11 +509,11 @@ и перестартовать <I>postmaster</I>.</P> - <H4><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при - обновлении выпусков PostgreSQL?</H4> + <H3><A name="3.6">3.6</A>) Почему необходимо делать dump и restore при + обновлении выпусков PostgreSQL?</H3> <P>Разработчики PostgreSQL делают только небольшие изменения между - подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует + подвыпусками. Таким образом обновление с версии 7.4.0 до 7.4.1 не требует выполнения dump и restore. Однако при выходе очередного выпуска (т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний формат системных таблиц и файлов данных. Эти изменения часто носят @@ -585,8 +527,10 @@ использования dump/restore. Комментарии к выпуску говорит когда можно использовать <i>pg_upgrade</i> для этого выпуска.</P> - <H4><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен - использовать?</H4> + + <H3><A name="3.7">3.7</A>) Какое компьютерное "железо" я должен + использовать?</H3> + <P>Поскольку "железо" персональных компьютеров является наиболее совместимым, люди склонны верить, что такое "железо" имеет одинаковое качество. Это не так. Память ECC, SCSI и качественные материнские платы @@ -600,26 +544,27 @@ <H2 align="center">Вопросы эксплуатации</H2> - <H4><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только - для нескольких первых строчек запроса? Произвольной строки?</H4> + <H3><A name="4.1">4.1</A>) Как выполнить <SMALL>SELECT</SMALL> только + для нескольких первых строчек запроса? Произвольной строки?</H3> <P>Для получения только нескольких строк, если вы знаете их количество - на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>. + на момент выполнения <SMALL>SELECT</SMALL> используйте <SMALL>LIMIT</SMALL>.</P> Если есть какой-либо индекс, который совпадает с <SMALL>ORDER BY</SMALL>, то возможно, что весь запрос выполнен и не будет. Если вы не знаете количества необходимых строк на момент выполнения <SMALL>SELECT</SMALL>, используйте курсор и <SMALL>FETCH</SMALL>.</P> - <p>To <small>SELECT</small> a random row, use:</p> -<pre> SELECT col + <P>To <small>SELECT</small> a random row, use:</P> +<PRE> SELECT col FROM tab ORDER BY random() LIMIT 1; -</pre> +</PRE> - <H4><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы, + + <H3><A name="4.2">4.2</A>) Как мне найти какие таблицы, индексы, базы данных и пользователи существуют? Как мне увидеть запросы, - которые использует <I>psql</I> для получения этой информации?</H4> + которые использует <I>psql</I> для получения этой информации?</H3> <P>Чтобы просматривать таблицы в <I>psql</I>, используйте команду \dt. Полный список команд в <I>psql</I> вы можете получить, используя \?. @@ -642,7 +587,7 @@ для получения информации из системных таблиц базы данных.</P> - <H4><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H4> + <H3><A name="4.3">4.3</A>) Как изменить тип данных колонки?</H3> <P>В 8.0 и более поздних версиях, изменение типа колонки выполняется очень легко через <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P> @@ -656,13 +601,12 @@ COMMIT; </PRE> - <H4><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице, - таблиц и базы данных?</H4> + <H3><A name="4.4">4.4</A>) Каковы максимальные размеры для строк в таблице, + таблиц и базы данных?</H3> <P>Существуют следующие ограничения:</P> <BLOCKQUOTE> <TABLE> -<TBODY> <TR> <TD>Максимальный размер базы?</TD> <TD>неограничен (существуют базы на 32 TB)</TD> @@ -691,7 +635,6 @@ <TD>Максимальное количество индексов в таблице?</TD> <TD>неограничено</TD> </TR> -</TBODY> </TABLE> </BLOCKQUOTE> <BR> @@ -709,8 +652,8 @@ могут быть увеличены в четыре раза, если размер блока по умолчанию будет увеличен до 32k.</P> - <H4><A name="4.5">4.5</A>) Как много дискового пространства в базе данных - нужно для сохранения данных из обычного текстового файла?</H4> + <H3><A name="4.5">4.5</A>) Как много дискового пространства в базе данных + нужно для сохранения данных из обычного текстового файла?</H3> <P>СУБД PostgreSQL может потребоваться дискового пространства до 5 раз больше для сохранения данных из простого текстового файла.</P> @@ -747,10 +690,10 @@ занимают очень мало места. </P> - <H4><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему - они не используют мои индексы?</H4> + <H3><A name="4.6">4.6</A>) Почему мои запросы работают медлено? Почему + они не используют мои индексы?</H3> - <P>Индексы не используются для каждого запроса автоматически. Они + <P>Индексы не используются для каждого запроса. Они используются только если таблица больше минимального размера и запрос выбирает только маленький процент строк в таблице. Так устроено, потому что доступ к диску с применением рандомизации при сканировании @@ -774,17 +717,18 @@ и в этом случае индекс будет использоваться, поскольку при выполнении будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не используют индексы, но индекс используется при построении запросов с - <SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>:</P> -<pre> + <SMALL>ORDER BY</SMALL> и <SMALL>LIMIT</SMALL>: +<PRE> SELECT col FROM tab ORDER BY col [ DESC ] LIMIT 1; -</pre> +</PRE> <P>Если вам кажется, что оптимизатор некорректно выбирает последовательный перебор, используйте <CODE>SET enable_seqscan TO 'off'</CODE> и - запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее. + запустите запрос снова, чтобы увидеть, действительно ли сканирование + индексов быстрее. </P> <P>Когда используются операции с шаблонами, например <SMALL>LIKE</SMALL> @@ -810,15 +754,15 @@ если типы данных точно не совпадали с индексными типами колонок. Это особенно касалось int2, int8 и numeric индексов колонок.</P> - <H4><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет - мой запрос?</H4> + <H3><A name="4.7">4.7</A>) Как посмотреть на то, как оптимизатор выполняет + мой запрос?</H3> <P>Смотрите страницу руководства посвященную <SMALL>EXPLAIN</SMALL>.</P> - <H4><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения + <H3><A name="4.8">4.8</A>) Как мне выполнить поиск регулярного выражения и поиск независимый от регистра букв поиск регулярного выражения? - Как мне использовать индекс для поиска независимого от регистра букв?</H4> + Как мне использовать индекс для поиска независимого от регистра букв?</H3> <P>Оператор <I>~</I> производит поиск регулярного выражения, а оператор <I>~*</I> производит независимый от регистра букв поиск регулярного @@ -832,23 +776,40 @@ WHERE lower(col) = 'abc'; </PRE> -<P> Эта конструкция не будет использовать стандартный индекс. Однако, если - вы создадите индекс выражения, он будет использован:</P> + Эта конструкция не будет использовать стандартный индекс. Однако, если + вы создадите индекс выражения, он будет использован: <PRE> CREATE INDEX tabindex ON tab (lower(col)); </PRE> - <H4><A name="4.9">4.9</A>) Как я могу определить, что значение поля - равно <SMALL>NULL</SMALL> в каком-либо запросе?</H4> + <H3><A name="4.9">4.9</A>) Как мне определить, что значение поля равно + <SMALL>NULL</SMALL> в каком-либо запросе? Могу я отсортировать поля + <SMALL>NULL</SMALL> или нет?</H3> <P>Вы просто сравниваете значение с <SMALL>IS NULL</SMALL> и - <SMALL>IS NOT NULL</SMALL>.</P> + <SMALL>IS NOT NULL</SMALL>, как здесь:</P> +<PRE> + SELECT * + FROM tab + WHERE col IS NULL; +</PRE> + + <P>Чтобы отсортировать данные по значению <NULL> используйте модификаторы + <SMALL>IS NULL</SMALL> и <SMALL>IS NOT NULL</SMALL> в выражении + <SMALL>ORDER BY</SMALL>. Когда они будут генерировать значения + <I>истина</I>, то при сортировке они будут выше, чем значения + <I>ложь</I>, так что записи с NULL будут в отсортированном списке сверху:</P> - <H4><A name="4.10">4.10</A>) Каковы отличия между разными символьными - типами?</H4> +<PRE> + SELECT * + FROM tab + ORDER BY (col IS NOT NULL); +</PRE> + + <H3><A name="4.10">4.10</A>) Каковы отличия между разными символьными + типами?</H3> <BLOCKQUOTE> <TABLE> -<TBODY> <TR> <TH>Тип</TH> <TH>Внутреннее имя</TH> @@ -879,7 +840,6 @@ <TD>char</TD> <TD>один символ</TD> </TR> -</TBODY> </TABLE> </BLOCKQUOTE> @@ -889,8 +849,7 @@ <P>Первые четыре типа являются "varlena" типами (т.е., первые четыре байта на диске являются длинной, за которой следуют данные). Таким образом, фактически используемое пространство больше, чем - обозначенный размер. Однако, эти типы данных также поддаются сжатию - или могут быть сохранены не в строком виде через <SMALL>TOAST</SMALL>, + обозначенный размер. Однако, длинные значения также сжимаются, так что занимаемое дисковое пространство может также быть и меньше, чем ожидалось.</P> @@ -906,8 +865,8 @@ которых могут включать <SMALL>NULL</SMALL> байты. Все типы описанные здесь, имеют сходные характеристики производительности.</P> - <H4><A name="4.11.1">4.11.1</A>) Как мне создать поле - serial/с-авто-увеличением?</H4> + <H3><A name="4.11.1">4.11.1</A>) Как мне создать поле + serial/с-авто-увеличением?</H3> <P>PostgreSQL поддерживает тип данных <SMALL>SERIAL</SMALL>. Он автоматически создает последовательность. Например:</P> @@ -918,7 +877,7 @@ ); </PRE> -<P> автоматически транслируется в: </P> + автоматически транслируется в: <PRE> CREATE SEQUENCE person_id_seq; CREATE TABLE person ( @@ -930,8 +889,8 @@ Смотрите подробности о последовательностях на странице руководства посвященной <I>create_sequence</I>. - <H4><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке - <SMALL>SERIAL</SMALL>?</H4> + <H3><A name="4.11.2">4.11.2</A>) Как мне получить значение при вставке + <SMALL>SERIAL</SMALL>?</H3> <P>Один из способов состоит в получении следующего значения <SMALL>SERIAL</SMALL> из объекта sequence с помощью функции @@ -960,16 +919,16 @@ </PRE> - <H4><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что + <H3><A name="4.11.3">4.11.3</A>) Не может ли получиться так, что использование <I>currval()</I> и <I>nextval()</I> приведет к - зациклированию с другими пользователями?</H4> + зациклированию с другими пользователями?</H3> <P>Нет. <i>currval()</i> возвращает текущее значение, назначенное вашей сессией, а не другими сессиями.</P> - <H4><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности + <H3><A name="4.11.4">4.11.4</A>) Почему числа из моей последовательности не используются снова при отмене транзакции? Почему создаются разрывы - при нумерации в колонке, где я использую последовательность/SERIAL?</H4> + при нумерации в колонке, где я использую последовательность/SERIAL?</H3> <P>Для реализации конкуретности, значения последовательностей, при необходимости выдаются во время запуска транзакций и не блокируются @@ -977,8 +936,8 @@ нумерации при отмене транзакций.</P> - <H4><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое - <SMALL>TID</SMALL>?</H4> + <H3><A name="4.12">4.12</A>) Что такое <SMALL>OID</SMALL>? Что такое + <SMALL>CTID</SMALL>?</H3> <P>Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный индентификатор <SMALL>OID</SMALL> за исключением случая когда @@ -993,17 +952,17 @@ O<SMALL>ID</SMALL>, потому что последовательности <SMALL>SERIAL</SMALL> уникальны только внутри таблицы и таким образом меньше подвержены переполнению. Для хранения значений 8-ми байтной последовательности - доступен тип <SMALL>SERIAL8</SMALL>.</P> + доступен тип <SMALL>SERIAL8</SMALL>. - <P>T<SMALL>ID</SMALL> используется для идентификации специальных - физических записей с блочными и offset значениями. T<SMALL>ID</SMALL> + <P>C<SMALL>TID</SMALL> используется для идентификации специальных + физических записей с блочными и offset значениями. C<SMALL>TID</SMALL> изменяется после того как строки в таблице были изменены или перегружены. - T<SMALL>ID</SMALL> используется индексными записями в качестве + <P>T<SMALL>ID</SMALL> используется индексными записями в качестве указателя на физические записи.</P> - <H4><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory - exhausted in AllocSetAlloc()"</I>?</H4> + <H3><A name="4.13">4.13</A>) Почему я получаю ошибку <I>"ERROR: Memory + exhausted in AllocSetAlloc()"</I>?</H3> <P>Предположительно у вас закончилась виртуальная память или что ваше ядро имеет маленький лимит на определенные ресурсы. @@ -1022,38 +981,21 @@ клиентом, потому что backend возвращает слишком большой объем данных, попытайтесь выполнить эту команду перед запуском клиента. - <H4><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL - запущена?</H4> + <H3><A name="4.14">4.14</A>) Как мне узнать, какая версия PostgreSQL + запущена?</H3> <P>Из <I>psql</I>, наберите <CODE>SELECT version();</CODE></P> - <H4><A name="4.15">4.15</A>) Почему при работе с моим большим объектом - я получаю ошибку <I>"invalid large obj descriptor"</I>?</H4> - - <P>Вам нужно при использовании большого объекта поместить в начале - <CODE>BEGIN WORK</CODE> и в конце <CODE>COMMIT</CODE>, а внутри - получившегося блока <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P> - <P>В настоящий момент PostgreSQL требует, чтобы при закрытии большого - объекта происходило выполнение транзакции. Таким образом, первая же - попытка сделать что-либо с большим объектом, не соблюдая данного правила - приведет к сообщению <I>invalid large obj descriptor</I>, так как - код выполняющий работу над большим объектом (по крайней мере в - настоящий момент) будет генерировать сообщение об ошибке если вы не - используете транзакцию.</P> - - <P>Если вы используете такой интерфейс клиента как <SMALL>ODBC</SMALL>, - вам возможно понадобится установить <CODE>auto-commit off.</CODE></P> - - <H4><A name="4.16">4.16</A>) Как мне создать колонку которая по умолчанию - будет содержать текущее время?</H4> + <H3><A name="4.15">4.15</A>) Как мне создать колонку которая по умолчанию + будет содержать текущее время?</H3> <P>Используйте <I>CURRENT_TIMESTAMP</I>:</P> <PRE> CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); </PRE> - <H4><A name="4.17">4.17</A>) Как мне выполнить внешнее связывание?</H4> + <H3><A name="4.16">4.16</A>) Как мне выполнить внешнее связывание?</H3> <P>PostgreSQL поддерживает внешнее связывание, используя стандартный синтаксис SQL. Вот два примера:</P> @@ -1077,8 +1019,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); <SMALL>RIGHT</SMALL> и <SMALL>FULL</SMALL> связываниях. Обычные связывания называются <SMALL>INNER</SMALL> связывания.</P> - <H4><A name="4.18">4.18</A>) Как выполнять запросы, использующие несколько - баз данных?</H4> + <H3><A name="4.17">4.17</A>) Как выполнять запросы, использующие несколько + баз данных?</H3> <P>Не существует способа создать запрос к базам данных отличным от текущей. Поскольку PostgreSQL загружает системные каталоги специфичные для базы @@ -1089,14 +1031,16 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); соедиенения с различными базами данных и таких образом объединять информацию из них.</P> - <H4><A name="4.19">4.19</A>) Как мне вернуть из функции несколько строк таблицы?</H4> + <H3><A name="4.18">4.18</A>) Как мне вернуть из функции несколько строк таблицы?</H3> <P>Вы можете легко использовать функции, возвращающие список, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P> - <H4><A name="4.20">4.20</A>) Почему я получаю ошибку "missing oid", - когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H4> + + <H3><A name="4.19">4.19</A>) Почему я получаю ошибку "relation with OID #### + не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?</H3> + <P>PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого состоит в том, что если функция PL/PgSQL обращается к временной таблице и эта таблица позднее удаляется и пересоздается, а функция затем вызывается @@ -1106,53 +1050,26 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); таблицам в PL/PgSQL. Использование этого оператора заставит запрос перегенерироваться каждый раз.</P> - <h4><a name="4.21">4.21</a>) Какие опции шифрования существуют? - </h4> - <ul> - <li><i>contrib/pgcrypto</i> содержит много функций шифрования для - использования в <small>SQL</small> запросах.</li> - <li>Для шифрования передаваемых данных от клиента к серверу, на сервере - в файле <i>postgresql.conf</i>, опция <i>ssl</i> должна быть установлена - в <i>true</i>, в файле <i>pg_hba.conf</i> должна быть соответствующая - запись <i>host</i> или <i>hostssl</i> и на стороне клиента <i>sslmode</i> - не должен быть запрещён через <i>disable</i>. (Заметим, что также - возможно использование независимых внешних шифрующих транспортов, таких - как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).</li> - <li>Пароли пользователей к базе данных автоматически шифруются, при - сохранении в системных таблицах.</li> - <li>Сервер можно запустить, используя шифрованную файловую систему.</li> - </ul> - <HR> - - <H2 align="center">Расширения PostgreSQL</H2> - - <H4><A name="5.1">5.1</A>) Я написал функцию определяемую пользователем. - Когда я запускаю ее в <I>psql</I>, почему я получаю core dump?</H4> - - <P>Проблема может заключаться в нескольких вещах. Попытайтесь сперва - протестировать вашу функцию в отдельной самостоятельной программе.</P> - - <H4><A name="5.2">5.2</A>) Как я могу внести некоторые классные новые - типы и функции в PostgreSQL?</H4> - <P>Отправьте ваши расширения в список рассылки <I>pgsql-hackers</I> - и они по возможности будут помещены в подкаталог <I>contrib/</I>.</P> + <H3><A name="4.20">4.20</a>) Какие есть решения для репликации?</H3> - <H4><A name="5.3">5.3</A>) Как мне написать C функцию, возвращающую - строку таблицы?</H4> - - <P>В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы - полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в - Руководстве Программиста. Пример возвращающей таблицу функции, - написанной на C, можно найти в <i>contrib/tablefunc</i>.</P> - - <H4><A name="5.4">5.4</A>) Я изменил исходный файл. Почему после - перекомпиляции я не вижу изменений?</H4> - - <P>Файлы <I>Makefile</I> не имеют правильных зависимостей для include - файлов. Вы должны выполнить <I>make clean</I> и затем <I>make</I>. - Если вы используете <SMALL>GCC</SMALL> вы можете использовать опцию - <I>--enable-depend</I> в <I>configure</I> чтобы поручить компилятору - автоматически отслеживать зависимости.</P> + <P>Хотя "репликация" -- это единый термин, есть несколько разных технологий + для выполнения репликаций с разными особенностями для каждой.</P> + + <P>Репликация Master/slave позволяет иметь один главный (master) сервер + для выполнения запросов чтения/записи, в то время как подчинённые + (slave) сервера могут производить только запросы + чтения/<SMALL>SELECT</SMALL>. Наиболее популярным решением для репликации + master-slave в PostgreSQL является + <A href="http://gborg.postgresql.org/project/slony1/projdisplay.php"> + Slony-I</A>.</P> + + <P>Репликация Multi-master позволяет выполнять запросы чтения/записи + на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность + также приводит к потере производительности, потому что необходима + синхронизация изменений между несколькими серверами. Наиболее + популярным решением для такой репликации в PostgreSQL является + <A href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</A>. + </BODY> </HTML> |