From 1bdec3424bc15a3b0d25b4579870ae05824a63ca Mon Sep 17 00:00:00 2001
From: Bruce Momjian
Date: Fri, 3 Jun 2005 18:17:07 +0000
Subject: [PATCH] Update Russian FAQ.
Viktor Vislobokov
---
doc/FAQ_russian | 525 ++++++++++++++---------------------
doc/src/FAQ/FAQ_russian.html | 503 ++++++++++++++-------------------
2 files changed, 425 insertions(+), 603 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
+ 1.11) Kak prisoedinitsya k komande razrabotchikov?
+
+ Smotrite FAQ dlya razrabotchikov.
- 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.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.
+ 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, 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.
+ 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.
- 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
- AllocSetAlloc()"?
-
+ 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 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.
- _________________________________________________________________
+ 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.
- 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.
+ 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.
- 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.
+ 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 @@
Ответы на часто задаваемые вопросы по PostgreSQL
- Дата последнего обновления: Понедельник 14 февраля 23:35:09 EST 2005
+ Дата последнего обновления: Понедельник 30 мая 09:11:03 EDT 2005
Английский вариант сопровождает: Брюс Момьян (Bruce Momjian) (pgman@candle.pha.pa.us)
- Перевел на русский: Виктор Вислобоков (Перевёл на русский: Виктор Вислобоков (corochoone@perm.ru)
@@ -43,6 +43,7 @@
1.11) Как присоединится к команде разработчиков?
1.12) Как сравнивать PostgreSQL с другими
СУБД?
+ 1.13) Кто управляет PostgreSQL?
Вопросы пользователей по клиентской части
@@ -87,8 +88,9 @@
4.8) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения?
Как мне использовать индекс для поиска независимого от регистра букв?
- 4.9) Как я могу определить, что значение поля равно
- NULL в каком-либо запросе?
+ 4.9) Как мне определить, что значение поля равно
+ NULL в каком-либо запросе? Могу я отсортировать поля
+ NULL или нет?
4.10) Каковы отличия между разными символьными
типами?
4.11.1) Как мне создать поле serial/с-авто-увеличением?
@@ -101,38 +103,26 @@
не используются снова при отмене транзакции? Почему создаются разрывы
при нумерации в колонке, где я использую последовательность/SERIAL?
4.12) Что такое OID? Что такое
- TID?
+ CTID?
4.13) Почему я получаю ошибку "ERROR: Memory
exhausted in AllocSetAlloc()"?
4.14) Как мне узнать, какая версия PostgreSQL
запущена?
- 4.15) Почему при работе с моим большим объектом
- я получаю ошибку "invalid large obj descriptor"?
- 4.16) Как мне создать колонку которая по умолчанию
+ 4.15) Как мне создать колонку которая по умолчанию
будет содержать текущее время?
- 4.17) Как выполнить внешнее связывание?
- 4.18) Как выполнять запросы, использующие несколько
+ 4.16) Как выполнить внешнее связывание?
+ 4.17) Как выполнять запросы, использующие несколько
баз данных?
- 4.19) Как мне вернуть из функции несколько строк таблицы?
- 4.20) Почему я получаю ошибку "missing oid",
- когда обращаютсь к временным таблицам в функциях PL/PgSQL?
- 4.21) Какие опции шифрования существуют?
+ 4.18) Как мне вернуть из функции несколько строк таблицы?
+ 4.19) Почему я получаю ошибку "relation with OID ####
+ не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
+ 4.20) Какие есть решения для репликации?
- Расширения PostgreSQL
- 5.1) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в psql, почему я получаю core dump?
- 5.2) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?
- 5.3) Как мне написать C функцию, возвращающую
- строку таблицы?
- 5.4) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?
-
Общие вопросы
- 1.1) Что такое PostgreSQL? Как произносится это название?
+ 1.1) Что такое PostgreSQL? Как произносится это название?
PostgreSQL произносится Post-Gres-Q-L (Пост-Грес-Кью-Эл),
также часто говорят просто Postgres.
@@ -151,7 +141,7 @@
http://www.PostgreSQL.org/files/documentation/faqs/FAQ_DEV.html
- 1.2) Каковы авторские права на PostgreSQL?
+ 1.2) Каковы авторские права на PostgreSQL?
PostgreSQL распространяется по классической лицензии BSD. Эта
лицензия не содержит ограничений на то, как будет использоваться
@@ -163,7 +153,7 @@
Система Управления Базами Данных PostgreSQL
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
Предоставляются права на использование, копирование, изменение
@@ -187,16 +177,16 @@
"КАК ЕСТЬ" И КАЛИФОРНИЙСКИЙ УНИВЕРСИТЕТ НЕ ОБЯЗАН ПРЕДОСТАВЛЯТЬ
СОПРОВОЖДЕНИЕ, ПОДДЕРЖКУ, ОБНОВЛЕНИЯ, РАСШИРЕНИЯ ИЛИ ИЗМЕНЕНИЯ.
- 1.3) На каких платформах работает PostgreSQL?
+ 1.3) На каких платформах работает PostgreSQL?
Обычно, PostgreSQL может работать на любой современной платформе
совместимой с Unix. В инструкции по установке, вы найдете список
тех платформ, на которых были проведены тестовые запуски PostgreSQL
к моменту выхода данной версии.
- Начиная с версии 8.0, PostgreSQL без всяких ухищрений работает на
- операционных системах Microsoft Windows, основанных на NT, таких как
- Win2000, WinXP и Win2003. Пакет инсталлятора доступен по адресу
+
PostgreSQL также работает на операционных системах Microsoft
+ Windows, основанных на NT, таких как Win2000, WinXP и Win2003.
+ Пакет инсталлятора доступен по адресу
http://pgfoundry.org/projects/pginstaller. Версии Windows,
основанные на MS-DOS (Win95, Win98, WinMe) могут запускать
@@ -208,14 +198,13 @@
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F.
- 1.4) Где можно взять PostgreSQL?
+ 1.4) Где можно взять PostgreSQL?
- Например, воспользовавшись анонимным доступом на ftp сайт
- PostgreSQL ftp://ftp.PostgreSQL.org/pub.
- Список зеркал вы найдете на нашем основном сайте.
+ Через браузер, используя
+ http://www.postgresql.org/ftp/ и через ftp, используя
+ ftp://ftp.PostgreSQL.org/pub/.
- 1.5) Где получить поддержку?
+ 1.5) Где получить поддержку?
Сообщество PostgreSQL предоставляет помощь множеству пользователей
через E-mail. Основной web-сайт для подписки на списки рассылки по
@@ -233,28 +222,30 @@
языках. Также существует канал по PostgreSQL на сервере EFNet.
Список коммерческой поддержки компаний доступен на
- http://techdocs.postgresql.org/companies.php.
+
+ http://techdocs.postgresql.org/companies.php.
- 1.6) Как мне сообщить об ошибке?
+ 1.6) Как мне сообщить об ошибке?
Посетите страничку со специальной формой отчёта об ошибке в
PostgreSQL по адресу:
-
+
http://www.postgresql.org/support/submitbug.
Также проверьте наличие более свежей версии PostgreSQL на нашем
- FTP сайте
- ftp://ftp.PostgreSQL.org/pub.
+ FTP сайте
+ ftp://ftp.PostgreSQL.org/pub/.
- 1.7) Какая последняя версия?
+ 1.7) Какая последняя версия?
- Последний выпуск PostgreSQL - это версия 8.0.1
+ Последний выпуск PostgreSQL - это версия 8.0.2
- Мы планируем выпускать новые версии каждые 10-12 месяцев.
+ Мы планируем выпускать новые старшие версии каждый год,
+ а младшие версии каждые несколько месяцев.
- 1.8) Какая документация имеется в наличии?
+ 1.8) Какая документация имеется в наличии?
PostgreSQL содержит много документации, включая большое руководство,
страницы электронного руководства man и некоторые маленькие тестовые
@@ -264,11 +255,13 @@
Существует две книги по PostgreSQL доступные по адресам http://www.PostgreSQL.org/docs/books/awbook.html
- и http://www.commandprompt.com/ppbook/.
- Список книг по PostgreSQL, которые можно купить доступен по адресу
- http://techdocs.postgresql.org/techdocs/bookreviews.php.
- Кроме того, по адресу http://techdocs.PostgreSQL.org/
- вы можете найти коллекцию технических статей посвященных PostgreSQL.
+ и http://www.commandprompt.com/ppbook/.
+ Есть несколько книг по PostgreSQL, которые можно купить.
+ Одну из наиболее популярных написал Корри Дуглас (Korry Douglas).
+ Список обзоров по этим книгам доступен по адресу
+ http://techdocs.postgresql.org/techdocs/bookreviews.php.
+ Кроме того, по адресу http://techdocs.PostgreSQL.org/
+ вы можете найти коллекцию технических статей посвященных PostgreSQL.
Клиент командной строки psql имеет несколько команд \d для
отображения информации по типам, операторам, функциям, агрегатам и т.д. -
@@ -276,56 +269,41 @@
Наш сайт содержит еще больше информации.
- 1.9) Как найти информацию об известных ошибках
- или отсутствующих возможностях?
+ 1.9) Как найти информацию об известных ошибках
+ или отсутствующих возможностях?
PostgreSQL поддерживает расширенный подкласс SQL-92.
Смотрите наш список TODO
на предмет известных ошибок, отсутствующих возможностей и будущих
планов.
- 1.10) Как мне научиться SQL?
+ 1.10) Как мне научиться SQL?
- Книга по PostgreSQL на http://www.PostgreSQL.org/docs/books/awbook.html
- научит SQL. Существует другая книга по PostgreSQL на
-
- http://www.commandprompt.com/ppbook.
- Есть прекрасный учебник на http://www.intermedia.net/support/sql/sqltut.shtm,
- на
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
- и на http://sqlcourse.com.
-
- Еще один учебник - это книга "Teach Yourself SQL in 21 Days, Second Edition"
- (Освой самостоятельно SQL за 21 день, Вторая редакция)
- на http://members.tripod.com/er4ebus/sql/index.htm
-
- Многим из наших пользователей нравится книга
+
Во-первых, возьмите одну из книг по PostgreSQL, о которых говорилось
+ выше. Еще один учебник - это книга "Teach Yourself SQL in 21 Days,
+ Second Edition" (Освой самостоятельно SQL за 21 день, Вторая редакция)
+ на
+ http://members.tripod.com/er4ebus/sql/index.htm.
+ Многим из наших пользователей нравится книга
The Practical SQL Handbook,
Bowman, Judith S., et al., Addison-Wesley. Другим нравится The
Complete Reference SQL, Groff et al., McGraw-Hill.
- 1.11) Как присоединится к команде разработчиков?
+ Есть прекрасный учебник на http://www.intermedia.net/support/sql/sqltut.shtm,
+ на
+ http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
+ и на http://sqlcourse.com.
- Для начала, скачайте последнюю версию исходных текстов и прочтите
- FAQ и документацию для разработчиков PostgreSQL на нашем сайте или в
- дистрибутиве. Затем, подпишитесь на списки рассылки pgsql-hackers и
- pgsql-patches. Далее, отправляйте исправления (patches) высокого
- качества в список pgsql-patches.
- Существует ограниченный список людей, который имеют привелегию
- вносить изменения в CVS архив PostgreSQL. Каждый
- из этих людей в свое время отправил так много высококачественных исправлений,
- что их было невозможно оставить без внимания и они были удостоены
- превилегии вносить изменения, и мы уверены, что те исправления, которые
- они внесут будут высокого качества.
+ 1.11) Как присоединится к команде разработчиков?
- 1.12) Как сравнивать PostgreSQL с другими
- СУБД?
+ Смотрите
+ FAQ для разработчиков.
+
+
+ 1.12) Как сравнивать PostgreSQL с другими
+ СУБД?
Существует несколько методов сравнения программного обеспечения:
@@ -348,14 +326,8 @@
Производительность PostgreSQL сходна с другими коммерческими
СУБД и с СУБД с открытым исходным кодом. В каких-то вещах мы быстрее,
- в каких-то медленнее. В сравнении с MySQL или линейной
- СУБД, мы быстрее, когда пользователей много, а также на сложных
- запросах и при чтении/записи загрузки запроса. MySQL быстрее для простых
- SELECT запросов, выполняемых небольшим количеством пользователей.
- И разумеется, MySQL не имеет каких-либо возможностей из
- перечисленых выше, в секции Возможности.
- Мы делаем упор на надежность и расширенные возможности, но мы также
- продолжаем увеличивать производительность с каждым выпуском.
+ в каких-то медленнее. Наша производительности обычно +/-10% по
+ сравнению с другими СУБД.
@@ -396,10 +368,25 @@
+ 1.13) Кто управляет PostgreSQL?
+
+ Если вы ищите какого-то особенного человека, центральный
+ комитет или управляющую компанию, то напрасно --- их нет.
+ У нас есть ядро комитета и разработчиков, работающих с CVS,
+ но эти группы служат больше для административных целей, чем
+ для управления. Проект напрямую функционирует с помощью
+ сообщества разработчиков и пользователей, к которому может
+ присоединится каждый. Всё что нужно -- это подписаться на
+ списки рассылки и участвовать в дискуссиях. (Подробности о
+ том как включиться в разработку PostgreSQL смотрите в
+
+ FAQ для разработчиков.)
- Вопросы пользователей по клиентской части
+
- 2.1) Какие интерфейсы есть для PostgreSQL?
+ Вопросы пользователей по клиентской части
+
+ 2.1) Какие интерфейсы есть для PostgreSQL?
Установка PostgreSQL включает только C и встроенный
(embedded) C интерфейсы. Все другие интерфейсы
@@ -414,8 +401,8 @@
в секции Drivers/Interfaces, а также через поиск в Интернет.
- 2.2) Какие инструменты существуют для использования
- PostgreSQL через Web?
+ 2.2) Какие инструменты существуют для использования
+ PostgreSQL через Web?
Прекрасное введение во взаимодействие баз данных и Web можно найти на:
http://www.webreview.com
@@ -423,33 +410,26 @@
Для интеграции с Web, PHP
http://www.php.net является неплохим интерфейсом.
- В сложных случаях, многие пользуются Perl и CGI.pm или mod_perl.
+ В сложных случаях, многие пользуются Perl и DBD::Pg с CGI.pm
+ или mod_perl.
- 2.3) Есть ли у PostgreSQL графический интерфейс
- пользователя?
+ 2.3) Есть ли у PostgreSQL графический интерфейс
+ пользователя?
+
+ Да, подробности смотрите в
+ http://techdocs.postgresql.org/guides/GUITools.
- Да, существует несколько графических интерфейсов для PostgreSQL.
- Они включают PgAdmin III (http://www.pgadmin.org),
- PgAccess (http://www.pgaccess.org),
- RHDB Admin (http://sources.redhat.com/rhdb/),
- TORA (http://www.globecom.net/tora/
- частично коммерческое ПО)
- и Rekall (
- http://www.rekallrevealed.org/). Также есть
- PhpPgAdmin (
- http://phppgadmin.sourceforge.net/) - интерфейс к PostgreSQL,
- основанный на Web.
Вопросы администрирования
- 3.1) Как мне установить PostgreSQL в место отличное
- от /usr/local/pgsql?
+ 3.1) Как мне установить PostgreSQL в место отличное
+ от /usr/local/pgsql?
Задайте опцию --prefix когда запускаете configure.
- 3.2) Как мне управлять соединениями с других
- компьютеров?
+ 3.2) Как мне управлять соединениями с других
+ компьютеров?
По умолчанию, PostgreSQL разрешает только соединения на локальной
машине через сокеты домена Unix или TCP/IP соединения. Для того, чтобы
@@ -458,8 +438,8 @@
host-авторизация в файле $PGDATA/pg_hba.conf и перестартовать
сервер.
- 3.3) Какие настройки мне нужно сделать для улучшения
- производительности?
+ 3.3) Какие настройки мне нужно сделать для улучшения
+ производительности?
Существует три главных области, которые потенциально могут
увеличить производительность:
@@ -510,55 +490,17 @@
- 3.4) Какие возможности для отладки есть в
- наличии?
+ 3.4) Какие возможности для отладки есть в
+ наличии?
Есть множество установок в настройках сервера, начинающихся
на log_*
, позволяющих протоколировать запросы
и статистику работы процесса, которая очень полезна для отладки
и измерения производительности.
- Для предоставления более детальной информации разработчикам
- сервера при отладке какой-либо проблемы должны пользоваться
- следующие инструкции.
-
- Таким же образом можно производить и отладку севера, если он
- работает неправильно. Во-первых, при запуске configure с
- опцией --enable-cassert, многие вызовы assert() позволяют
- отслеживать работу backend процесса и остановку программы при
- возникновении каких-либо неожиданностей.
- Если postmaster не запущен, вы можете запустить
- postgres backend из командной строки и ввести ваш оператор
- SQL напрямую. Это рекомендуется только для
- целей отладки. Заметим, что в этом режиме, запрос завершается символом
- новой строки, а не точкой с запятой. Если вы производили компиляцию
- с отладочными символами, вы можете использовать любой отладчик, чтобы
- посмотреть, что случилось. Поскольку backend запускается не из
- postmaster, он не запускается в идентичном окружении и значит
- проблемы итераций блокировок/backend не могут быть воспроизведены.
-
- Если postmaster запущен, запустите psql в одном
- окне, затем найдите PID процесса postgres,
- используемый psql, используя SELECT pg_backend_pid()
.
- Используйте отладчик для подключения к postgres PID.
- Вы можете установить точки прерывания в отладчике и запустить запрос
- из psql. Если
- вы производите отладку запуска postgres, вы можете установить
- PGOPTIONS="-W n", и затем запустить psql. Эта опция приводит
- к задержке процесса запуска на n секунд, в течение которых
- вы можете подключить к процессу отладчик, установить любые точки
- прерывания и продолжить запуск.
-
- Вы также можете скомпилировать PostgreSQL с профилированием для
- того, чтобы увидеть какие функции сколько времени выполняются.
- Файлы профилирования backend'а находятся в каталоге
- pgsql/data/base/dbname. Файл профилирования клиента
- будет помещен в текущий каталог клиента. В Linux для выполнения
- профилирования требуется компиляции с -DLINUX_PROFILE.
-
- 3.5) Почему я получаю сообщение "Sorry, too
- many clients" когда пытаюсь подключиться к базе?
+ 3.5) Почему я получаю сообщение "Sorry, too
+ many clients" когда пытаюсь подключиться к базе?
Вы достигли установленного по умолчанию ограничения на 100 сессий
подключения к базе данных. Вам необходимо увеличить для
@@ -567,11 +509,11 @@
и перестартовать postmaster.
- 3.6) Почему необходимо делать dump и restore при
- обновлении выпусков PostgreSQL?
+ 3.6) Почему необходимо делать dump и restore при
+ обновлении выпусков PostgreSQL?
Разработчики PostgreSQL делают только небольшие изменения между
- подвыпусками. Таким образом обновление с версии 7.4 до 7.4.1 не требует
+ подвыпусками. Таким образом обновление с версии 7.4.0 до 7.4.1 не требует
выполнения dump и restore. Однако при выходе очередного выпуска
(т.е. при обновлении например, с 7.3 на 7.4) часто меняется внутренний
формат системных таблиц и файлов данных. Эти изменения часто носят
@@ -585,8 +527,10 @@
использования dump/restore. Комментарии к выпуску говорит когда можно
использовать pg_upgrade для этого выпуска.
- 3.7) Какое компьютерное "железо" я должен
- использовать?
+
+ 3.7) Какое компьютерное "железо" я должен
+ использовать?
+
Поскольку "железо" персональных компьютеров является наиболее
совместимым, люди склонны верить, что такое "железо" имеет одинаковое
качество. Это не так. Память ECC, SCSI и качественные материнские платы
@@ -600,26 +544,27 @@
Вопросы эксплуатации
- 4.1) Как выполнить SELECT только
- для нескольких первых строчек запроса? Произвольной строки?
+ 4.1) Как выполнить SELECT только
+ для нескольких первых строчек запроса? Произвольной строки?
Для получения только нескольких строк, если вы знаете их количество
- на момент выполнения SELECT используйте LIMIT.
+ на момент выполнения SELECT используйте LIMIT.
Если есть какой-либо индекс, который совпадает с ORDER BY,
то возможно, что весь запрос выполнен и не будет. Если вы не знаете
количества необходимых строк на момент выполнения SELECT,
используйте курсор и FETCH.
- To SELECT a random row, use:
- SELECT col
+ To SELECT a random row, use:
+ SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
-
+
- 4.2) Как мне найти какие таблицы, индексы,
+
+ 4.2) Как мне найти какие таблицы, индексы,
базы данных и пользователи существуют? Как мне увидеть запросы,
- которые использует psql для получения этой информации?
+ которые использует psql для получения этой информации?
Чтобы просматривать таблицы в psql, используйте команду \dt.
Полный список команд в psql вы можете получить, используя \?.
@@ -642,7 +587,7 @@
для получения информации из системных таблиц базы данных.
- 4.3) Как изменить тип данных колонки?
+ 4.3) Как изменить тип данных колонки?
В 8.0 и более поздних версиях, изменение типа колонки выполняется
очень легко через ALTER TABLE ALTER COLUMN TYPE.
@@ -656,13 +601,12 @@
COMMIT;
- 4.4) Каковы максимальные размеры для строк в таблице,
- таблиц и базы данных?
+ 4.4) Каковы максимальные размеры для строк в таблице,
+ таблиц и базы данных?
Существуют следующие ограничения:
-
Максимальный размер базы? |
неограничен (существуют базы на 32 TB) |
@@ -691,7 +635,6 @@
Максимальное количество индексов в таблице? |
неограничено |
-
@@ -709,8 +652,8 @@
могут быть увеличены в четыре раза, если размер блока по умолчанию будет
увеличен до 32k.
- 4.5) Как много дискового пространства в базе данных
- нужно для сохранения данных из обычного текстового файла?
+ 4.5) Как много дискового пространства в базе данных
+ нужно для сохранения данных из обычного текстового файла?
СУБД PostgreSQL может потребоваться дискового пространства до 5 раз
больше для сохранения данных из простого текстового файла.
@@ -747,10 +690,10 @@
занимают очень мало места.
- 4.6) Почему мои запросы работают медлено? Почему
- они не используют мои индексы?
+ 4.6) Почему мои запросы работают медлено? Почему
+ они не используют мои индексы?
- Индексы не используются для каждого запроса автоматически. Они
+
Индексы не используются для каждого запроса. Они
используются только если таблица больше минимального размера и запрос
выбирает только маленький процент строк в таблице. Так устроено,
потому что доступ к диску с применением рандомизации при сканировании
@@ -774,17 +717,18 @@
и в этом случае индекс будет использоваться, поскольку при выполнении
будет возвращаться небольшая часть таблицы. Фактически MAX() и MIN() не
используют индексы, но индекс используется при построении запросов с
- ORDER BY и LIMIT:
-
+ ORDER BY и LIMIT:
+
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1;
-
+
Если вам кажется, что оптимизатор некорректно выбирает последовательный
перебор, используйте SET enable_seqscan TO 'off'
и
- запустите тесты, чтобы увидеть, не стало-ли сканирование индексов быстрее.
+ запустите запрос снова, чтобы увидеть, действительно ли сканирование
+ индексов быстрее.
Когда используются операции с шаблонами, например LIKE
@@ -810,15 +754,15 @@
если типы данных точно не совпадали с индексными типами колонок. Это
особенно касалось int2, int8 и numeric индексов колонок.
- 4.7) Как посмотреть на то, как оптимизатор выполняет
- мой запрос?
+ 4.7) Как посмотреть на то, как оптимизатор выполняет
+ мой запрос?
Смотрите страницу руководства посвященную EXPLAIN.
- 4.8) Как мне выполнить поиск регулярного выражения
+ 4.8) Как мне выполнить поиск регулярного выражения
и поиск независимый от регистра букв поиск регулярного выражения?
- Как мне использовать индекс для поиска независимого от регистра букв?
+ Как мне использовать индекс для поиска независимого от регистра букв?
Оператор ~ производит поиск регулярного выражения, а оператор
~* производит независимый от регистра букв поиск регулярного
@@ -832,23 +776,40 @@
WHERE lower(col) = 'abc';
-
Эта конструкция не будет использовать стандартный индекс. Однако, если
- вы создадите индекс выражения, он будет использован:
+ Эта конструкция не будет использовать стандартный индекс. Однако, если
+ вы создадите индекс выражения, он будет использован:
CREATE INDEX tabindex ON tab (lower(col));
- 4.9) Как я могу определить, что значение поля
- равно NULL в каком-либо запросе?
+ 4.9) Как мне определить, что значение поля равно
+ NULL в каком-либо запросе? Могу я отсортировать поля
+ NULL или нет?
Вы просто сравниваете значение с IS NULL и
- IS NOT NULL.
+ IS NOT NULL, как здесь:
+
+ SELECT *
+ FROM tab
+ WHERE col IS NULL;
+
- 4.10) Каковы отличия между разными символьными
- типами?
+ Чтобы отсортировать данные по значению используйте модификаторы
+ IS NULL и IS NOT NULL в выражении
+ ORDER BY. Когда они будут генерировать значения
+ истина, то при сортировке они будут выше, чем значения
+ ложь, так что записи с NULL будут в отсортированном списке сверху:
+
+
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL);
+
+
+ 4.10) Каковы отличия между разными символьными
+ типами?
-
Тип |
Внутреннее имя |
@@ -879,7 +840,6 @@
char |
один символ |
-
@@ -889,8 +849,7 @@
Первые четыре типа являются "varlena" типами (т.е., первые
четыре байта на диске являются длинной, за которой следуют данные).
Таким образом, фактически используемое пространство больше, чем
- обозначенный размер. Однако, эти типы данных также поддаются сжатию
- или могут быть сохранены не в строком виде через TOAST,
+ обозначенный размер. Однако, длинные значения также сжимаются,
так что занимаемое дисковое пространство может также быть и меньше,
чем ожидалось.
@@ -906,8 +865,8 @@
которых могут включать NULL байты. Все типы описанные
здесь, имеют сходные характеристики производительности.
- 4.11.1) Как мне создать поле
- serial/с-авто-увеличением?
+ 4.11.1) Как мне создать поле
+ serial/с-авто-увеличением?
PostgreSQL поддерживает тип данных SERIAL. Он
автоматически создает последовательность. Например:
@@ -918,7 +877,7 @@
);
- автоматически транслируется в:
+ автоматически транслируется в:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
@@ -930,8 +889,8 @@
Смотрите подробности о последовательностях на странице руководства
посвященной create_sequence.
- 4.11.2) Как мне получить значение при вставке
- SERIAL?
+ 4.11.2) Как мне получить значение при вставке
+ SERIAL?
Один из способов состоит в получении следующего значения
SERIAL из объекта sequence с помощью функции
@@ -960,16 +919,16 @@
- 4.11.3) Не может ли получиться так, что
+ 4.11.3) Не может ли получиться так, что
использование currval() и nextval() приведет к
- зациклированию с другими пользователями?
+ зациклированию с другими пользователями?
Нет. currval() возвращает текущее значение, назначенное вашей
сессией, а не другими сессиями.
- 4.11.4) Почему числа из моей последовательности
+ 4.11.4) Почему числа из моей последовательности
не используются снова при отмене транзакции? Почему создаются разрывы
- при нумерации в колонке, где я использую последовательность/SERIAL?
+ при нумерации в колонке, где я использую последовательность/SERIAL?
Для реализации конкуретности, значения последовательностей, при
необходимости выдаются во время запуска транзакций и не блокируются
@@ -977,8 +936,8 @@
нумерации при отмене транзакций.
- 4.12) Что такое OID? Что такое
- TID?
+ 4.12) Что такое OID? Что такое
+ CTID?
Каждая, создаваемая в PostgreSQL табличная строка, получает уникальный
индентификатор OID за исключением случая когда
@@ -993,17 +952,17 @@
OID, потому что последовательности SERIAL
уникальны только внутри таблицы и таким образом меньше подвержены
переполнению. Для хранения значений 8-ми байтной последовательности
- доступен тип SERIAL8.
+ доступен тип SERIAL8.
- TID используется для идентификации специальных
- физических записей с блочными и offset значениями. TID
+
CTID используется для идентификации специальных
+ физических записей с блочными и offset значениями. CTID
изменяется после того как строки в таблице были изменены или перегружены.
- TID используется индексными записями в качестве
+
TID используется индексными записями в качестве
указателя на физические записи.
- 4.13) Почему я получаю ошибку "ERROR: Memory
- exhausted in AllocSetAlloc()"?
+ 4.13) Почему я получаю ошибку "ERROR: Memory
+ exhausted in AllocSetAlloc()"?
Предположительно у вас закончилась виртуальная память
или что ваше ядро имеет маленький лимит на определенные ресурсы.
@@ -1022,38 +981,21 @@
клиентом, потому что backend возвращает слишком большой объем данных,
попытайтесь выполнить эту команду перед запуском клиента.
-
4.14) Как мне узнать, какая версия PostgreSQL
- запущена?
+ 4.14) Как мне узнать, какая версия PostgreSQL
+ запущена?
Из psql, наберите SELECT version();
- 4.15) Почему при работе с моим большим объектом
- я получаю ошибку "invalid large obj descriptor"?
- Вам нужно при использовании большого объекта поместить в начале
- BEGIN WORK
и в конце COMMIT
, а внутри
- получившегося блока lo_open
... lo_close.
-
- В настоящий момент PostgreSQL требует, чтобы при закрытии большого
- объекта происходило выполнение транзакции. Таким образом, первая же
- попытка сделать что-либо с большим объектом, не соблюдая данного правила
- приведет к сообщению invalid large obj descriptor, так как
- код выполняющий работу над большим объектом (по крайней мере в
- настоящий момент) будет генерировать сообщение об ошибке если вы не
- используете транзакцию.
-
- Если вы используете такой интерфейс клиента как ODBC,
- вам возможно понадобится установить auto-commit off.
-
- 4.16) Как мне создать колонку которая по умолчанию
- будет содержать текущее время?
+ 4.15) Как мне создать колонку которая по умолчанию
+ будет содержать текущее время?
Используйте CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
- 4.17) Как мне выполнить внешнее связывание?
+ 4.16) Как мне выполнить внешнее связывание?
PostgreSQL поддерживает внешнее связывание,
используя стандартный синтаксис SQL. Вот два примера:
@@ -1077,8 +1019,8 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
RIGHT и FULL связываниях. Обычные
связывания называются INNER связывания.
- 4.18) Как выполнять запросы, использующие несколько
- баз данных?
+ 4.17) Как выполнять запросы, использующие несколько
+ баз данных?
Не существует способа создать запрос к базам данных отличным от текущей.
Поскольку PostgreSQL загружает системные каталоги специфичные для базы
@@ -1089,14 +1031,16 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
соедиенения с различными базами данных и таких образом объединять
информацию из них.
- 4.19) Как мне вернуть из функции несколько строк таблицы?
+ 4.18) Как мне вернуть из функции несколько строк таблицы?
Вы можете легко использовать функции, возвращающие список,
http://techdocs.postgresql.org/guides/SetReturningFunctions.
- 4.20) Почему я получаю ошибку "missing oid",
- когда обращаютсь к временным таблицам в функциях PL/PgSQL?
+
+ 4.19) Почему я получаю ошибку "relation with OID ####
+ не существует", когда обращаютсь к временным таблицам в функциях PL/PgSQL?
+
PL/PgSQL кэширует сценарии функции и один из негативных эффектов этого
состоит в том, что если функция PL/PgSQL обращается к временной таблице
и эта таблица позднее удаляется и пересоздается, а функция затем вызывается
@@ -1106,53 +1050,26 @@ CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
таблицам в PL/PgSQL. Использование этого оператора заставит запрос
перегенерироваться каждый раз.
- 4.21) Какие опции шифрования существуют?
-
-
- - contrib/pgcrypto содержит много функций шифрования для
- использования в SQL запросах.
- - Для шифрования передаваемых данных от клиента к серверу, на сервере
- в файле postgresql.conf, опция ssl должна быть установлена
- в true, в файле pg_hba.conf должна быть соответствующая
- запись host или hostssl и на стороне клиента sslmode
- не должен быть запрещён через disable. (Заметим, что также
- возможно использование независимых внешних шифрующих транспортов, таких
- как stunnel или ssh, вместо собственных SSL соединений PostgreSQL).
- - Пароли пользователей к базе данных автоматически шифруются, при
- сохранении в системных таблицах.
- - Сервер можно запустить, используя шифрованную файловую систему.
-
-
- Расширения PostgreSQL
+ 4.20) Какие есть решения для репликации?
- 5.1) Я написал функцию определяемую пользователем.
- Когда я запускаю ее в psql, почему я получаю core dump?
-
- Проблема может заключаться в нескольких вещах. Попытайтесь сперва
- протестировать вашу функцию в отдельной самостоятельной программе.
-
- 5.2) Как я могу внести некоторые классные новые
- типы и функции в PostgreSQL?
-
- Отправьте ваши расширения в список рассылки pgsql-hackers
- и они по возможности будут помещены в подкаталог contrib/.
-
- 5.3) Как мне написать C функцию, возвращающую
- строку таблицы?
-
- В версиях PostgreSQL, начиная с 7.3, функции, возвращающие таблицы
- полностью поддерживаются в C, PL/PgSQL и SQL. Подробности смотрите в
- Руководстве Программиста. Пример возвращающей таблицу функции,
- написанной на C, можно найти в contrib/tablefunc.
-
- 5.4) Я изменил исходный файл. Почему после
- перекомпиляции я не вижу изменений?
-
- Файлы Makefile не имеют правильных зависимостей для include
- файлов. Вы должны выполнить make clean и затем make.
- Если вы используете GCC вы можете использовать опцию
- --enable-depend в configure чтобы поручить компилятору
- автоматически отслеживать зависимости.
+ Хотя "репликация" -- это единый термин, есть несколько разных технологий
+ для выполнения репликаций с разными особенностями для каждой.
+
+ Репликация Master/slave позволяет иметь один главный (master) сервер
+ для выполнения запросов чтения/записи, в то время как подчинённые
+ (slave) сервера могут производить только запросы
+ чтения/SELECT. Наиболее популярным решением для репликации
+ master-slave в PostgreSQL является
+
+ Slony-I.
+
+ Репликация Multi-master позволяет выполнять запросы чтения/записи
+ на нескольких, реплицируемых друг с другом компьюетрах. Эта особенность
+ также приводит к потере производительности, потому что необходима
+ синхронизация изменений между несколькими серверами. Наиболее
+ популярным решением для такой репликации в PostgreSQL является
+ Pgcluster.
+