mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-11 04:43:29 +02:00
989 lines
45 KiB
Plaintext
989 lines
45 KiB
Plaintext
|
|
Otvety na chasto zadavaemye voprosy po PostgreSQL
|
|
|
|
Data poslednego obnovleniya: Sreda 25 iyunya 23:54:14 EDT 2008
|
|
|
|
Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian)
|
|
(bruce@monjian.us)
|
|
|
|
Pereviol na russkij: Viktor Vislobokov (admin@postgresql.ru.net)
|
|
|
|
Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na
|
|
http://www.postgresql.org/files/documentation/faqs/FAQ.html.
|
|
|
|
Samuyu svezhuyu russkuyu versiyu dokumenta mozhno najti na
|
|
http://postgresql.ru.net/docs/FAQ_russian.html.
|
|
|
|
Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti
|
|
na http://www.postgresql.org/docs/faq/.
|
|
_________________________________________________________________
|
|
|
|
Obschie voprosy
|
|
|
|
1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto
|
|
takoe Postgres?
|
|
1.2) Kto upravlyaet PostgreSQL?
|
|
1.3) Kakovy avtorskie prava na PostgreSQL?
|
|
1.4) Na kakih platformah rabotaet PostgreSQL?
|
|
1.5) Gde mozhno vzyat' PostgreSQL?
|
|
1.6) Kakaya versiya naibolee svezhaya?
|
|
1.7) Gde poluchit' podderzhku?
|
|
1.8) Kak mne soobschit' ob oshibke?
|
|
1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
|
|
vozmozhnostyah?
|
|
1.10) Kakaya dokumentaciya imeetsya v nalichii?
|
|
1.11) Kak nauchit'sya SQL?
|
|
1.12) Kak mne otpravit' ispravlenie ili prisoedinitsya k komande
|
|
razrabotchikov?
|
|
1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL
|
|
byt' vstroennoj?
|
|
1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh
|
|
stranyh, kasayuschimisya dnevnogo vremeni?
|
|
1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak
|
|
izbezhat' polucheniya dubliruyuschihsya soobschenij?
|
|
|
|
Voprosy pol'zovatelej po klientskoj chasti
|
|
|
|
2.1) Kakie interfejsy est' dlya PostgreSQL?
|
|
2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL
|
|
cherez Web?
|
|
2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
|
|
|
|
Voprosy administrirovaniya
|
|
|
|
3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot
|
|
/usr/local/pgsql?
|
|
3.2) Kak mne upravlyat' soedineniyami ot drugih komp'yuterov?
|
|
3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
|
|
proizvoditel'nosti?
|
|
3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
|
|
3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
|
|
pytayus' podklyuchit'sya k baze?
|
|
3.6) Kak vypolnit' obnovlenie PostgreSQL?
|
|
3.7) Kakoe komp'yuternoe "zhelezo" ya dolzhen ispol'zovat'?
|
|
|
|
Voprosy `ekspluatacii
|
|
|
|
4.1) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek
|
|
zaprosa? Dlya proizvol'noj stroki?
|
|
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.3) Kak izmenit' tip dannyh kolonki?
|
|
4.4) Kakovy maksimal'nye razmery dlya strok v tablice, tablic i bazy
|
|
dannyh?
|
|
4.5) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya
|
|
sohraneniya dannyh iz obychnogo tekstovogo fajla?
|
|
4.6) Pochemu moi zaprosy rabotayut medleno? Pochemu oni ne ispol'zuyut
|
|
moi indeksy?
|
|
4.7) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
|
|
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 mne opredelit', chto znachenie polya v kakom-libo zaprose
|
|
ravno NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat'
|
|
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?
|
|
4.11.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
|
|
nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
|
|
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 CTID?
|
|
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
|
|
AllocSetAlloc()"?
|
|
4.14) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
|
|
4.15) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
|
|
tekuschee vremya?
|
|
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?
|
|
4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom
|
|
zaprose? Pochemu ne sohranyayutsya zaglavnye bukvy?
|
|
_________________________________________________________________
|
|
|
|
Obschie voprosy
|
|
|
|
1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie? CHto takoe
|
|
Postgres?
|
|
|
|
PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El). (Dlya
|
|
osobo lyubopytstvuyuschih kak proiznosit' "PostgreSQL", suschestvuet
|
|
audio-fajl).
|
|
|
|
PostgreSQL - `eto ob"ektno-relyacionnaya sistema upravleniya bazami
|
|
dannyh (SUBD), kotoraya imeet tradicionnye vozmozhnosti kommercheskih
|
|
SUBD s rasshireniyami, kotorye est' v SUBD novogo pokoleniya.
|
|
PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe
|
|
obespechenie.
|
|
|
|
Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, razbrosannaya
|
|
po vsemu miru i svyazannaya cherez Internet. Razrabotka yavlyaetsya
|
|
obschestvennym proektom i ne upravlyaetsya kakoj-libo kompaniej.
|
|
Podrobnosti smotrite v FAQ dlya razrabotchikov,
|
|
http://www.postgresql.org/docs/faqs.FAQ_DEV.html
|
|
|
|
Postgres -- `eto shiroko ispol'zuemoe sokraschenie dlya PostgreSQL.
|
|
Pervonachal'nym imenem proekta v Berkli bylo Postgres i `etot nik
|
|
teper' naibolee populyaren v razgovorah o PostgreSQL po sravneniyu s
|
|
drugimi. Esli vam trudno polnost'yu progovarivat' 'PostgreSQL', mozhno
|
|
prosto govorit' 'Postgres'.
|
|
|
|
1.2) 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.)
|
|
|
|
1.3) 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
|
|
menyat'. Vot `eta licenziya BSD, kotoruyu my ispol'zuem:
|
|
|
|
Sistema Upravleniya Bazami Dannyh PostgreSQL
|
|
|
|
Portions copyright (c) 1996-2008, PostgreSQL Global Development Group
|
|
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
|
|
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.
|
|
|
|
1.4) 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.
|
|
|
|
PostgreSQL takzhe rabotaet na operacionnyh sistemah Microsoft Windows,
|
|
osnovannyh na NT, takih kak Win2000 SP4, WinXP i Win2003. Paket
|
|
installyatora dostupen po adresu
|
|
http://www.postgresql.org/download/windows. Versii Windows, osnovannye
|
|
na MS-DOS (Win95, Win98, WinMe) mogut zapuskat' PostgreSQL s
|
|
pomosch'yu Cygwin.
|
|
|
|
Takzhe suschestvuet versiya sportirovannaya pod Novell Netware 6 na
|
|
http://developer.novell.com/wiki/index.php/Postgresql, i versiya dlya
|
|
OS/2 (eComStation) na
|
|
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
|
|
SQL&stype=all&sort=type&dir=%2F.
|
|
|
|
1.5) Gde mozhno vzyat' PostgreSQL?
|
|
|
|
CHerez brauzer, ispol'zuya http://www.postgresql.org/ftp/ i cherez
|
|
ftp, ispol'zuya ftp://ftp.postgresql.org/pub/.
|
|
|
|
1.6) Kakaya versiya naibolee svezhaya?
|
|
|
|
Poslednij vypusk PostgreSQL - `eto versiya 8.3.3
|
|
|
|
My planiruem vypuskat' novye starshie versii kazhdyj god, a mladshie
|
|
versii kazhdye neskol'ko mesyacev.
|
|
|
|
1.7) 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/.
|
|
Horoshim mestom dlya togo, chtoby nachat' zadavat' voprosy
|
|
yavlyayutsya spiski general (obschie voprosy) ili bugs (oshibki).
|
|
|
|
Glavnym IRC kanalom yavlyaetsya #postgreql, raspolozhennyj na servere
|
|
Freenode (irc.freenode.net). CHtoby podklyuchit'sya, vy mozhete
|
|
ispol'zovat' v Unix vyzov programmy irc -c '#postgresql' "$USER"
|
|
irc.freenode.net ili lyuboj drugoj IRC klient. Na `etom zhe servere
|
|
suschestvuyut kanaly na ispanskom (#postgresql-es), francuzskom
|
|
(#postgresqlfr) i brazil'skom (#postgresql-br) yazykah. Takzhe
|
|
suschestvuet kanal po PostgreSQL na servere EFNet.
|
|
|
|
Spisok kommercheskoj podderzhki kompanij dostupen na
|
|
http://www.postgresql.org/support/professional_support.
|
|
|
|
1.8) 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/.
|
|
|
|
Na oshibki, uvedomlenie o kotoryh byli sdelany cherez special'nuyu
|
|
formu ili otpravlennye v kakoj-libo spisok rassylki PostgreSQL,
|
|
obychno generiruetsya odin iz sleduyuschih otvetov:
|
|
* `Eto ne oshibka i pochemu
|
|
* `Eto izvestnaya oshibka i ona uzhe est' v spiske TODO
|
|
* Dannaya oshibka byla ispravlena v tekuschem vypuske
|
|
* Dannaya oshibka byla ispravlena, no ispravlenie poka ne popalo v
|
|
oficial'nyj vypusk
|
|
* Zaprashivaetsya bolee detal'naya informaciya:
|
|
+ Operacionnaya sistema
|
|
+ Versiya PostgreSQL
|
|
+ Test, vosproizvodyaschij oshibku
|
|
+ Otladochnaya informaciya
|
|
+ Vyvod backtrace otladchika
|
|
* `Eto novaya oshibka. Mozhet proizojti sleduyuschee:
|
|
+ Budet sozdano ispravlenie, kotoroe budet vklyucheno v
|
|
sleduyuschij vypusk
|
|
+ Oshibka ne mozhet byt' ispravlena nemedlenno i budet
|
|
dobavlena v spisok TODO
|
|
|
|
1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
|
|
vozmozhnostyah?
|
|
|
|
PostgreSQL podderzhivaet rasshirennyj podklass SQL:2003. Smotrite nash
|
|
spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
|
|
vozmozhnostej i buduschih planov.
|
|
|
|
Na zapros kakoj-libo vozmozhnosti obychno prihodyat sleduyuschie
|
|
otvety:
|
|
* Dannaya vozmozhnost' uzhe est' v spiske TODO
|
|
* Dannaya vozmozhnost' nezhelatel'na potomu chto:
|
|
+ Ona dubliruet suschestvuyuschuyu funkcional'nost', kotoraya
|
|
sleduet standartu SQL
|
|
+ Dannaya vozmozhnost' sil'no uslozhnila by kod, no dala by
|
|
malen'kuyu vygodu
|
|
+ Dannaya vozmozhnost' nebezopasna ili nenadiozhna
|
|
* Dannaya novaya vozmozhnost' dobavlena v spisok TODO
|
|
|
|
PostgreSQL ne ispol'zuet kakuyu-libo sistemu otslezhivaniya oshibok,
|
|
potomu chto my obnaruzhili, chto ispol'zovanie pryamogo obrascheniya
|
|
po `elektronnoj pochte i obnovlyaemogo spiska TODO yavlyaetsya bolee
|
|
`effektivnym. Na praktike, oshibki v programmnom obespechenii
|
|
sohranyayutsya ochen' nedolgo, a oshibki, kotorye vazhny bol'shomu
|
|
kolichestvu pol'zovatelej ispravlyayutsya momental'no. Est' tol'ko
|
|
odno mesto, gde mozhno najti vse izmeneniya, uluchsheniya i
|
|
ispravleniya, sdelannye v vypuske PostgreSQL - `eto zhurnaly
|
|
soobschenij sistemy kontrolya versij CVS. Dazhe zamechaniya k vypuskam
|
|
ne soderzhat vse izmeneniya, sdelannye v programmnom obespechenii.
|
|
|
|
1.10) 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
|
|
prosmatrivat' dokumentaciyu v Internet po adresu
|
|
http://www.postgresql.org/docs.
|
|
|
|
Suschestvuet dve knigi po PostgreSQL dostupnye po adresam
|
|
http://www.PostgreSQL.org/docs/books/awbook.html i
|
|
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://www.postgresql.org/docs/books/. Krome togo,
|
|
po adresu
|
|
http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides
|
|
%2C_and_Documentation vy mozhete najti kollekciyu tehnicheskih statej,
|
|
posveschennyh PostgreSQL.
|
|
|
|
Klient komandnoj stroki psql imeet neskol'ko komand \d dlya
|
|
otobrazheniya informacii po tipam, operatoram, funkciyam, agregatam i
|
|
t.d. - ispol'zujte \? dlya polucheniya spiska dostupnyh komand.
|
|
|
|
Nash sajt soderzhit esche bol'she informacii.
|
|
|
|
1.11) Kak mne nauchit'sya SQL?
|
|
|
|
Vo-pervyh, voz'mite odnu iz knig po PostgreSQL, o kotoryh govorilos'
|
|
vyshe. Mnogim iz nashih pol'zovatelej takzhe nravitsya kniga The
|
|
Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley.
|
|
Drugim nravitsya The Complete Reference SQL, Groff et al.,
|
|
McGraw-Hill.
|
|
|
|
Suschestvuet takzhe mnozhestvo prekrasnyh uchebnikov dostupnyh v
|
|
online:
|
|
* http://www.intermedia.net/support/sql/sqltut.shtm,
|
|
* http://sqlcourse.com.
|
|
* http://www.w3school.com/sql/default.asp
|
|
* http://mysite.verizon.net/Graeme_Birchall/id1.html
|
|
|
|
1.12) Kak mne prislat' ispravlenie ili prisoedinitsya k komande
|
|
razrabotchikov?
|
|
|
|
Smotrite FAQ dlya razrabotchikov.
|
|
|
|
1.13) Kak sravnit' PostgreSQL s drugimi SUBD? Mozhet li PostgreSQL byt'
|
|
vstroennym?
|
|
|
|
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'
|
|
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. Nasha proizvoditel'nosti obychno
|
|
+/-10% po sravneniyu s drugimi SUBD.
|
|
|
|
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.7.)
|
|
|
|
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.
|
|
|
|
PostgreSQL razrabatyvaetsya po arhitekture klient/server, kotoraya
|
|
trebuet otdel'nyh processov dlya kazhdogo klienta i servera, a takzhe
|
|
neskol'ko vspomogatel'nyh processov. Mnogie vstraivaemye arhitektury
|
|
mogut sootvetstvovat' takim trebovaniyam. Odnako, esli vasha
|
|
vstraivaemaya arhitektura trebuet server baz dannyh dlya zapuska
|
|
vnutri prikladnogo processa, vy ne mozhete ispol'zovat' Postgres i vam
|
|
luchshe by vybrat' dlya bazy dannyh kakoe-libo drugoe oblegchennoe
|
|
reshenie.
|
|
|
|
1.14) Budet li PostgreSQL rabotat' s poslednimi izmeneniyami, v raznyh
|
|
stranyh, kasayuschimisya dnevnogo vremeni?
|
|
|
|
Izmeneniya v sohranenii dnevnogo vremeni v SSHA vklyucheny v
|
|
PostgreSQL versii 8.0.[4+] i vo vse sleduyuschie vypuski, naprimer v
|
|
8.1. Izmeneniya po Kanade i Zapadnoj Avstralii vklyucheny v 8.0.[10+],
|
|
8.1.[6+] i vse sleduyuschie vypuski. Vypuski PostgreSQL do 8.0
|
|
ispol'zuyut informaciyu o sohranenii dnevnogo vremeni iz bazy dannyh
|
|
vremennyh zon v operacionnoj sisteme.
|
|
_________________________________________________________________
|
|
|
|
1.15) Kak mne otpisat'sya ot spiskov rassylki PostgreSQL? Kak izbezhat'
|
|
polucheniya dubliruyuschih soobschenij?
|
|
|
|
Stranica Majordomo na sajte PostgreSQL pozvolyaet podpisat'sya ili
|
|
otpisat'sya ot lyubogo iz spiskov rassylki PostgreSQL. (Vam mozhet
|
|
ponadobitsya vash parol' dlya Majordomo, kotoryj otpravlyaetsya na
|
|
vash E-mail, chtoby vojti v upravlenie vashimi podpiskami.)
|
|
|
|
Vse spiski rassylki PostgreSQL nastarivayutsya tak, chtoby gruppovoj
|
|
otvet uhodil na adres spiska i na adres avtora soobscheniya. Tak
|
|
sdelano, chtoby pol'zovateli poluchali otvety na E-mail kak mozhno
|
|
bystree. Esli vy ne hotite poluchat' dubliruyuschie E-mail
|
|
soobscheniya iz spiska, v sluchayah kogda vy uzhe poluchili `eti
|
|
soobscheniya napryamuyu, ustanovite flazhok eliminatecc na stranice
|
|
Change Settings v Majordomo. Vy takzhe mozhete izbezhat' polucheniya
|
|
kopij svoih soobschenij dlya samogo sebya, esli snimite flazhok
|
|
selfcopy.
|
|
_________________________________________________________________
|
|
|
|
Voprosy pol'zovatelej po klientskoj chasti
|
|
|
|
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
|
|
organizovat' sobstvennoe raspisanie vypuskov novyh versij i imet'
|
|
sobstvennuyu komandu razrabotchikov.
|
|
|
|
Nekotorye yazyki programmirovaniya, takie kak PHP vklyuchayut v sebya
|
|
interfejs k PostgreSQL. Interfejsy dlya takih yazykov kak Perl, TCL,
|
|
Python i mnogih drugih, dostupny na http://pgfoundry.org.
|
|
|
|
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 DBD::Pg s CGI.pm ili
|
|
mod_perl.
|
|
|
|
2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
|
|
|
|
Dlya PostgreSQL suschestvuet bol'shoe kolichestvo instrumentov s
|
|
graficheskim interfejsom kak kommercheskih, tak i otkrytyh.
|
|
Podrobnosti mozhno najti v Dokumentacii soobschestva dlya GUI
|
|
istrumentov PostgreSQL
|
|
_________________________________________________________________
|
|
|
|
Voprosy administrirovaniya
|
|
|
|
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 ot 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
|
|
SUBD.
|
|
|
|
3.3) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya proizvoditel'nosti?
|
|
|
|
Suschestvuet tri glavnyh oblasti, kotorye potencial'no mogut
|
|
uvelichit' proizvoditel'nost':
|
|
|
|
Izmenenie zaprosa
|
|
`Eto oznachaet modifikaciyu zaprosov dlya polucheniya luchshej
|
|
proizvoditel'nosti:
|
|
|
|
+ Sozdanie indeksov, vklyuchaya indeksy vyrazhenij i
|
|
chastichnye indeksy
|
|
+ Ispol'zovanie COPY vmesto mnozhestva INSERT
|
|
+ Gruppirovka neskol'kih operatorov v edinuyu tranzakciyu dlya
|
|
umen'sheniya nagruzki pri vypolnenii zaversheniya tranzakcii
|
|
+ Ispol'zovanie CLUSTER, kogda iz indeksa beriotsya mnozhestvo
|
|
strok
|
|
+ Ispol'zovanie LIMIT dlya togo, chtoby vozvraschalas' tol'ko
|
|
chast' vyvoda ot zaprosa
|
|
+ Ispol'zovanie Podgotovlennyh (Prepared) zaprosov
|
|
+ Ispol'zovanie ANALYZE dlya obsluzhivaniya statistiki
|
|
optimizatora
|
|
+ Regulyarnoe ispol'zovanie VACUUM ili pg_autovacuum
|
|
+ Udalenie indeksov vo vremya bol'shih izmenenij dannyh
|
|
|
|
Nastrojka servera
|
|
Nekotorye ustanovki v postgresql.conf vliyayut na
|
|
proizvoditel'nost'. Podrobnyj polnyj spisok ustanovok sm. v
|
|
Administration Guide/Server Run-time Environment/Run-time
|
|
Configuration, a kommentarii sm. v
|
|
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
|
|
nf_e.html i
|
|
http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
|
|
|
|
Vybor "zheleza" - apparatnogo obespecheniya
|
|
Vliyanie "zheleza" na proizvoditel'nost' podrobno opisano v
|
|
http://www.powerpostgresql.com/PerfList/ i
|
|
http://momjian.us/main/writings/pgsql/hw_performance/index.html
|
|
.
|
|
|
|
3.4) Kakie vozmozhnosti dlya otladki est' v nalichii?
|
|
|
|
Est' mnozhestvo ustanovok v nastrojkah servera, nachinayuschihsya na
|
|
log_* na
|
|
http://www.postgresql.org/docs/current/interactive/runtime-config-logg
|
|
ing.html, pozvolyayuschih protokolirovat' zaprosy i statistiku raboty
|
|
processa, kotoraya ochen' polezna dlya otladki i izmereniya
|
|
proizvoditel'nosti.
|
|
|
|
3.5) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
|
|
pytayus' podklyuchit'sya k baze?
|
|
|
|
Vy dostigli ustanovlennogo po umolchaniyu ogranicheniya v 100 sessij
|
|
podklyucheniya k baze dannyh. Vam neobhodimo uvelichit' limit na
|
|
kolichestvo konkurentnyh backend processov dlya vashego servera BD,
|
|
izmeniv znachenie max_connections v fajle postgresql.conf i
|
|
perestartovat' server BD.
|
|
|
|
3.6) Kak vypolnit' obnovlenie PostgreSQL?
|
|
|
|
Sm. informaciyu ob obnovlenii v
|
|
http://www.postgresql.org/support/versioning i special'nye instrukcii
|
|
v
|
|
http://www.postgresql.org/docs/current/static/install-upgrading.html.
|
|
|
|
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
|
|
materinskie platy yavlyayutsya bolee nadiozhnymi i imeyut bolee
|
|
luchshuyu proizvoditel'nost', chem menee dorogoe "zhelezo". PostgreSQL
|
|
budet rabotat' na lyubom "zheleze", no esli dlya vas vazhny
|
|
nadiozhnost' i proizvoditel'nost', to s vashej storony budet mudro
|
|
postavit' sootvetstvuyuschee "zhelezo". Obsudit' raznoe "zhelezo"
|
|
mozhno v nashih spiskah rassylki.
|
|
_________________________________________________________________
|
|
|
|
Voprosy `ekspluatacii
|
|
|
|
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.
|
|
|
|
To SELECT a random row, use:
|
|
SELECT col
|
|
FROM tab
|
|
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?
|
|
|
|
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 SQL
|
|
sovmestimyj s INFORMATION SCHEMA interfejs, s pomosch'yu kotorogo, vy
|
|
mozhete sformirovat' zapros na poluchenie informacii o baze dannyh.
|
|
|
|
Takzhe suschestvuyut sistemnye tablicy, nachinayuschiesya s pg_.
|
|
|
|
Ispol'zujte psql -l dlya polucheniya spiska vseh baz dannyh.
|
|
|
|
Takzhe posmotrite fajl pgsql/src/tutorial/syscat.source. On pokazyvaet
|
|
mnogie iz operatorov SELECT neobhodimyh dlya polucheniya informacii iz
|
|
sistemnyh tablic bazy dannyh.
|
|
|
|
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.
|
|
|
|
V bolee rannih versiyah 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.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)
|
|
Maksimal'nyj razmer tablicy? 32 TB
|
|
Maksimal'nyj razmer stroki? 400 Gb
|
|
Maksimal'nyj razmer polya? 1 GB
|
|
Maksimal'noe kolichestvo strok v tablice? neogranicheno
|
|
Maksimal'noe kolichestvo kolonok v tablice? 250-1600 v zavisimosti ot
|
|
tipa
|
|
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.
|
|
|
|
Suschestvuet ogranichenie, po kotoromu indeksy ne mogut sozdavat'sya
|
|
dlya kolonok dlinnee chem 2,000 simvolov. K schast'yu takie indeksy
|
|
vryad li dejstvitel'no komu-to nuzhny. Unikal'nost' garantiruetsya
|
|
nailuchim obrazom, s pomosch'yu funkcional'nogo indeksa iz h`esha MD5
|
|
dlinnoj kolonki, a polnotekstovoe indeksirovanie pozvolyaet iskat'
|
|
slova vnutri kolonki.
|
|
|
|
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.
|
|
|
|
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 5.2 MB iz kotoryh:
|
|
24 bajt: na kazhdyj zagolovok stroki v tablice (priblizitel'no)
|
|
+ 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole
|
|
+ 4 bajta: ukazatel' na stranice dlya vsej tablichnoj stroki
|
|
----------------------------------------
|
|
56 bajt na stroku v tablice
|
|
|
|
Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto:
|
|
|
|
8192 bajt na stranicu
|
|
--------------------- = 158 strok v tablice na stranicu BD (okruglionno)
|
|
52 bajt na stroku v tablice
|
|
|
|
100000 strok dannyh
|
|
----------------------- = 633 stranic v BD (okruglionno)
|
|
158 strok v tablice na stranicu
|
|
|
|
633 stranic BD * 8192 bajt na stranicu = 5,185,536 bajt (5.2 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.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
|
|
statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto
|
|
ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo
|
|
strok 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. Pri
|
|
izmenenii soderzhimogo tablicy dolzhen periodicheski vypolnyatsya sbor
|
|
statistiki.
|
|
|
|
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.
|
|
|
|
Esli vam kazhetsya, chto optimizator nekorrektno vybiraet
|
|
posledovatel'nyj perebor, ispol'zujte SET enable_seqscan TO 'off' i
|
|
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:
|
|
* 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 indeksy vyrazhenij, kotorye
|
|
opisyvayutsya v sekcii 4.8.
|
|
* Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C,
|
|
potomu chto ne suschestvuet vozmozhnosti uznat' sleduyuschij
|
|
naibol'shij simvol dlya ne-C lokali. Vy mozhete dlya takih
|
|
sluchaev sozdat' special'nyj indeks text_pattern_ops kotoryj
|
|
rabotaet tol'ko dlya LIKE indeksirovaniya. Dlya poiska slov takzhe
|
|
mozhno ispol'zovat' polnotekstovyj indeks.
|
|
|
|
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?
|
|
|
|
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 indeks vyrazheniya, on budet ispol'zovan:
|
|
CREATE INDEX tabindex ON tab (lower(col));
|
|
|
|
Esli vysheukazannyj indeks sozdaiotsya kak UNIQUE, to kolonka, dlya
|
|
kotoroj on sozdaiotsya mozhet hranit' simvoly i v verhnem, i v nizhnem
|
|
registre, indes ne mozhet imet' identichnyh znachenij, kotorye
|
|
otlichayutsya tol'ko registrom. CHtoby v kolonke mozhno bylo hranit'
|
|
simvoly tol'ko v opredelionnom registre, ispol'zujte ogranichenie
|
|
CHECK ili proverku cherez trigger.
|
|
|
|
4.9) Kak mne opredelit', chto znachenie polya v kakom-libo zaprose ravno
|
|
NULL? Kak mne soedinit' vozmozhnye NULL? Mogu ya sortirovat' 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 soedinit' s vozmozhnymi znacheniyami NULL, ispol'zujte
|
|
COALESCE() kak zdes':
|
|
SELECT COALESCE(col1, '') || COALESCE(col2, '')
|
|
FROM tab
|
|
|
|
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
|
|
TEXT text net zadavaemogo verhnego ogranicheniya ili dliny
|
|
BYTEA bytea massiv bajt peremennoj dliny (mozhno ispol'zovat'
|
|
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, 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
|
|
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.11.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
|
|
);
|
|
|
|
Avtomaticheski sozdannaya posledovatel'nost' imeet imya vida
|
|
<tablica>_<kolonka_serial>_seq, gde tablica i kolonka_serial - `eto
|
|
sootvetstvenno imena tablicy i kolonki s tipom SERIAL. Smotrite
|
|
podrobnosti o posledovatel'nostyah na stranice rukovodstva
|
|
posvyaschennoj create_sequence.
|
|
|
|
4.11.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
|
|
|
|
Prostejshij sposob poluchit' naznachennoe znachenie SERIAL `eto
|
|
ispol'zovat' RETURNING. Ispol'zuya dlya primera tablicu v 4.11.1, `eto
|
|
mozhet vyglyadet' tak:
|
|
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
|
|
|
|
Vy takzhe mozhete vyzvat' nextval() i ispol'zovat' `eto znachenie v
|
|
INSERT ili vyzvat' currval() posle INSERT.
|
|
|
|
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?
|
|
|
|
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 CTID?
|
|
|
|
Esli tablica sozdana s WITH OIDS, to kazhdaya stroka poluchaet
|
|
unikal'nyj indentifikator OID. OID - `eto avtomaticheski naznachaemoe
|
|
unikal'noe 4-h bajtovoe celoe chislo, kotoroe unikal'no dlya vsej
|
|
ustanovlennoj SUBD. Odnako, posle togo kak ego znachenie prevysit 4
|
|
milliarda, znacheniya OID nachinayut dublirovat'sya. PostgreSQL
|
|
ispol'zuet OID dlya svyazyvaniya svoih vnutrennih tablic.
|
|
|
|
Dlya unikal'nogo znacheniya v strokah tablicy pol'zovatelya, luchshim
|
|
sposobom yavlyaetsya ispol'zovanie SERIAL vmesto OID, potomu chto
|
|
posledovatel'nosti SERIAL unikal'ny tol'ko vnutri tablicy i takim
|
|
obrazom men'she podverzheny perepolneniyu. Dlya hraneniya znachenij
|
|
8-mi bajtnoj posledovatel'nosti dostupen tip SERIAL8.
|
|
|
|
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()"?
|
|
|
|
Predpolozhitel'no u vas zakonchilas' virtual'naya pamyat' ili chto
|
|
vashe yadro imeet malen'kij limit na opredelennye resursy. Popytajtes'
|
|
pered zapuskom servera BD vypolnit' sleduyuschie komandy:
|
|
ulimit -d 262144
|
|
limit datasize 256m
|
|
|
|
V zavisimosti ot komandnogo interpretatora shell, tol'ko odna iz
|
|
dannyh komand vypolnitsya uspeshno, no ona pozvolit vam ustanovit'
|
|
bol'shij segment dannyh processa i vozmozhno reshit problemu. `Eta
|
|
komanda izmenyaet parametry tekuschego processa i vseh ego potomkov,
|
|
sozdannyh posle eio zapuska. Esli u vas voznikla problema s SQL
|
|
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?
|
|
|
|
Iz psql, naberite SELECT version();
|
|
|
|
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.16) Kak mne vypolnit' vneshnee svyazyvanie?
|
|
|
|
PostgreSQL podderzhivaet vneshnee svyazyvanie, ispol'zuya standartnyj
|
|
sintaksis SQL. Vot dva primera:
|
|
SELECT *
|
|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
|
|
|
ili
|
|
SELECT *
|
|
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
|
|
|
`Eto identichnye zaprosy svyazyvaniya t1.col i t2.col, takzhe
|
|
vozvraschayut lyubye nesvyazannye stroki v t1 (kotorye ne sovpadayut s
|
|
t2). RIGHT svyazyvanie dolzhno dobavit' nesvyazannye stroki t2. FULL
|
|
svyazyvanie dolzhno vozvratit' sovpavshie stroki plyus vse
|
|
nesvyazannye stroki iz t1 i t2. Slovo OUTER yavlyaetsya
|
|
neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah.
|
|
Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya.
|
|
|
|
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
|
|
vesti takoj mezhbazovyj zapros.
|
|
|
|
contrib/dblink pozvolyaet zaprosy mezhdu bazami, ispol'zuya vyzovy
|
|
funkcij. Razumeetsya, klient mozhet odnovremenno takzhe ustanavlivat'
|
|
soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat'
|
|
informaciyu iz nih.
|
|
|
|
4.18) Kak mne vernut' iz funkcii neskol'ko strok tablicy?
|
|
|
|
Vy mozhete legko ispol'zovat' funkcii, vozvraschayuschie spisok,
|
|
http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_
|
|
PL/pgSQL_functions.
|
|
|
|
4.19) Pochemu ya poluchayu oshibku "relation with OID #### ne suschestvuet",
|
|
kogda obraschayuts' k vremennym tablicam v funkciyah PL/PgSQL?
|
|
|
|
V PostgreSQL do versii 8.3, 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, a funkciya zatem vyzyvaetsya snova, to
|
|
ee vyzov privedet k oshibke, potomu chto sk`eshirovannoe soderzhimoe
|
|
funkcii soderzhit ukazatel' na staruyu vremennuyu tablicu. CHtoby
|
|
reshit' `etu problemu, ispol'zujte EXECUTE dlya dostupa k vremennym
|
|
tablicam v PL/PgSQL. Ispol'zovanie `etogo operatora zastavit zapros
|
|
peregenerirovat'sya kazhdyj raz.
|
|
|
|
V PostgreSQL 8.3 i pozdnee, `etoj problemy net.
|
|
|
|
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.
|
|
|
|
4.21) Pochemu imena tablicy i kolonok ne raspoznayutsya v v moiom zaprose?
|
|
Pochemu ne sohranyayutsya zaglavnye bukvy?
|
|
|
|
Naibolee chasto imena neraspoznayutsya iz-za ispol'zovaniya dvojnyh
|
|
kavychek v imeni tablicy ili kolonki pri sozdanii tablicy. Pri
|
|
ispol'zovanii dvojnyh kavychek, imya tablicy i kolonki (kotorye
|
|
nazyvayut identifikatorami) sohranyayutsya v registro-zavisimom vide;
|
|
`eto oznachaet, chto vy dolzhny ispol'zovat' dvojnye kavychki, kogda
|
|
ukazyvaete `eti imena v zaprose. Nekotorye interfejsy, takie kak
|
|
pgAdmin, vo vremya sozdaniya tablicy dobavlyayut dvojnye kavychki
|
|
avtomaticheski. Takim obrazom, chtoby identifikatory raspoznavalis' vy
|
|
dolzhny sledovat' odnomu iz sleduyuschih pravil:
|
|
* Izbegat' ispol'zovaniya dvojnyh kavychek pri sozdanii tablic
|
|
* Ispol'zovat' v identifikatorah tol'ko simvoly nizhnego registra
|
|
* Ispol'zovat' dvojnye kavychki dlya identifikatorov v zaprosah
|