aboutsummaryrefslogtreecommitdiff
path: root/doc/FAQ_russian
blob: 6243fca042a1ce665016f62990241e8a71d526f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
               Otvety na chasto zadavaemye voprosy po PostgreSQL
                                       
   Data poslednego obnovleniya: Voskresen'e 20 Oktyabrya 20:47:14 EDT
   2002
   
   Anglijskij variant soprovozhdaet: Bryus Mom'yan (Bruce Momjian)
   (pgman@candle.pha.pa.us)
   
   Perevel na russkij: Viktor Vislobokov (victor_v@permonline.ru)
   
   Samuyu svezhuyu anglijskuyu versiyu dokumenta mozhno najti na
   http://www.PostgreSQL.org/docs/faq-english.html.
   
   Otvety na voprosy specifichnye dlya konkretnyh platform mozhno najti
   na http://www.PostgreSQL.org/users-lounge/docs/faq.html.
     _________________________________________________________________
   
                              Obschie voprosy
                                      
   1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie?
   1.2) Kakovy avtorskie prava na PostgreSQL?
   1.3) Na kakih Unix platformah rabotaet PostgreSQL?
   1.4) Suschestvuyut li versii portirovannye ne na Unix sistemy?
   1.5) Gde mozhno vzyat' PostgreSQL?
   1.6) Gde poluchit' podderzhku?
   1.7) Kakaya poslednyaya versiya?
   1.8) Kakaya dokumentaciya imeetsya v nalichii?
   1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
   vozmozhnostyah?
   1.10) Kak nauchit'sya SQL?
   1.11) Reshena li v PostgreSQL problema 2000-go goda (Y2K)?
   1.12) Kak prisoedinitsya k komande razrabotchikov?
   1.13) Kak otravit' soobschenie ob oshibke?
   1.14) Kak sravnivat' PostgreSQL s drugimi SUBD?
   1.15) Kak okazat' finansovuyu pomosch' PostgreSQL?
   
                 Voprosy pol'zovatelej po klientskoj chasti
                                      
   2.1) Suschestvuyut li ODBC drajvera dlya PostgreSQL?
   2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL
   cherez Web?
   2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya?
   Generator otchetov? Vstroennyj interfejs dlya yazyka zaprosov?
   2.4) Kakie yazyki mogut vzaimodejstvovat' s PostgreSQL?
   
                         Voprosy administrirovaniya
                                      
   3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot
   /usr/local/pgsql?
   3.2) Kogda ya zapuskayu postmaster, ya poluchayu soobschenie Bad
   System Call ili soobschenie core dumped. Pochemu?
   3.3) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki
   IpcMemoryCreate. Pochemu?
   3.4) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki
   IpcSemaphoreCreate. Pochemu?
   3.5) Kak mne upravlyat' soedineniyami s drugih komp'yuterov?
   3.6) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
   proizvoditel'nosti?
   3.7) Kakie vozmozhnosti dlya otladki est' v nalichii?
   3.8) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
   pytayus' podklyuchit'sya k baze?
   3.9) CHto nahoditsya v kataloge pgsql_tmp?
   3.10) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov
   PostgreSQL?
   
                           Voprosy `ekspluatacii
                                      
   4.1) V chem otlichie mezhdu binarnym i normal'nym kursorom?
   4.2) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek
   zaprosa?
   4.3) Kak poluchit' spisok tablic ili drugih komponentov v psql?
   4.4) Kak udalit' kolonku iz tablicy?
   4.5) Kakovy maksimal'nye razmery dlya zapisej, tablic i bazy dannyh?
   4.6) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya
   sohraneniya dannyh iz obychnogo tekstovogo fajla?
   4.7) Kak mne ubedit'sya, chto suschestvuyut nuzhnye mne tablicy,
   indeksy, bazy dannyh i pol'zovateli?
   4.8) U menya medlenno rabotayut zaprosy ili ne proishodit
   ispol'zovaniya indeksov. Pochemu?
   4.9) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
   4.10) CHto takoe R-tree indeks?
   4.11) CHto takoe Genetic Query Optimizer?
   4.12) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk
   nezavisimyj ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne
   ispol'zovat' indeks dlya poiska nezavisimogo ot registra bukv?
   4.13) Kak ya mogu opredelit', chto znachenie polya ravno NULL v
   kakom-libo zaprose?
   4.14) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
   4.15.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
   4.15.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
   4.15.3) Ne mozhet li poluchit'sya tak, chto ispol'zovanie currval() i
   nextval() privedet k zaciklirovaniyu s drugimi pol'zovatelyami?
   4.15.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya
   snova pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii
   v kolonke, gde ya ispol'zuyu posledovatel'nost'/SERIAL?
   4.16) CHto takoe OID? CHto takoe TID?
   4.17) CHto oznachayut nekotorye terminy ispol'zuemye v PostgreSQL?
   4.18) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
   AllocSetAlloc()"?
   4.19) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
   4.20) Pochemu pri rabote s moim bol'shim ob"ektom ya poluchayu oshibku
   "invalid large obj descriptor"?
   4.21) Kak mne sozdat' kolonku kotoraya po umolchaniyu budet soderzhat'
   tekuschee vremya?
   4.22) Pochemu moi podzaprosy, ispol'zuyuschie IN tak medlenno
   rabotaeyut?
   4.23) Kak vypolnit' vneshnee svyazyvanie?
   4.24) Kak vypolnyat' zaprosy, ispol'zuyuschie neskol'ko baz dannyh?
   4.25) Kak mne vernut' iz funkcii neskol'ko zapisej?
   4.26) Pochemu ya ne mogu nadezhno sozdavat'/udalyat' vremennye tablicy
   v funkciyah PL/PgSQL?
   4.27) Kakie opcii replikacii suschestvuyut?
   4.28) Kakie opcii shifrovaniya suschestvuyut?
   
                          Rasshireniya PostgreSQL
                                      
   5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya
   zapuskayu ee v psql, pochemu ya poluchayu dump core?
   5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v
   PostgreSQL?
   5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu zapis'?
   5.4) YA izmenil ishodnyj fajl. Pochemu posle perekompilyacii ya ne
   vizhu izmenenij?
     _________________________________________________________________
   
                              Obschie voprosy
                                      
    1.1) CHto takoe PostgreSQL? Kak proiznositsya `eto nazvanie?
    
   PostgreSQL proiznositsya Post-Gres-Q-L (Post-Gres-K'yu-`El).
   
   PostgreSQL - `eto rasshirenie SUBD POSTGRES, issledovatel'skij
   prototip novogo pokoleniya SUBD. PostgreSQL odnovremenno sohranyaet
   moschnuyu model' dannyh i obschirnoe kolichestvo tipov POSTGRES, i
   zameschaet yazyk zaprosov PostQuel na rasshirennoe podmnozhestvo SQL.
   PostgreSQL - `eto svobodnoe i polnost'yu otkrytoe programmnoe
   obespechenie.
   
   Razrabotku PostgreSQL vypolnyaet komanda razrabotchikov, vse
   uchastniki kotoroj podpisany na spisok rassylki razrabotchikov. V
   nastoyaschee vremya, ih koordinatorom yavlyaetsya Mark Fornaj (Marc G.
   Fournier) (scrappy@PostgreSQL.org). (Sm. sekciyu 1.6 o tom, kak
   podklyuchit'sya k razrabotke). `Eta komanda teper' otvechaet za vsyu
   razrabotku PostgreSQL.
   
   Avtorami PostgreSQL 1.01 yavlyayutsya `Endryu YU (Andrew Yu) i Dzholi
   CHen (Jolly Chen). Mnogie drugie vnesli svoj vklad v perenos na drugie
   platformy, testirovanie, otladku i rasshirenie `etogo koda.
   Pervonachal'nyj kod Postgres, iz kotorogo poyavilsya PostgreSQL, byl
   itogom usilij mnogih akademicheskih studentov, neakademicheskih
   studentov i mnozhestva raznyh programmistov, rabotavshih pod
   rukovodstvom professora Majkla Stounbrejkera (Michael Stonebraker) v
   Kalifornijskom universitete, Berkli.
   
   Pervonachal'noe imya, dannoe v Berkli, bylo Postgres. Kogda v 1995
   godu byla dobavlena funkcional'nost' SQL, `eto imya bylo izmeneno na
   Postgres95. No i `eto imya bylo izmeneno v konce 1996 na PostgreSQL.
   
    1.2) Kakovy avtorskie prava na PostgreSQL?
    
   PostgreSQL popadaet pod dejstvie sleduyuschego COPYRIGHT:
   
   Sistema Upravleniya Bazami Dannyh PostgreSQL
   
   Portion copyright (c) 1996-2002, PostgreSQL Global Development Group
   Portions Copyright (c) 1994-6 Regents of the University of California
   
   Predostavlyayutsya prava na ispol'zovanie, kopirovanie, izmenenie i
   rasprostranenie dannogo programmnogo obespecheniya i ego dokumentacii
   dlya lyubyh celej, besplatno i bez podpisaniya kakogo-libo
   soglasheniya, pri uslovii chto dlya kazhdoj kopii budut predostavleny
   dannoe vyshe zamechanie ob avtorskih pravah, tekuschij paragraf i dva
   sleduyuschih paragrafa.
   
   KALIFORNIJSKIJ UNIVERSITET NE NESET NIKAKOJ OTVETSTVENNOSTI ZA LYUBYE
   POVREZHDENIYA, VKLYUCHAYA POTERYU DOHODA, NANESENNYE PRYAMYM ILI
   NEPRYAMYM, SPECIAL'NYM ILI SLUCHAJNYM ISPOL'ZOVANIEM DANNOGO
   PROGRAMMNOGO OBESPECHENIYA ILI EGO DOKUMENTACII, DAZHE ESLI
   KALIFORNIJSKIJ UNIVERSITET BYL IZVESCHEN O VOZMOZHNOSTI TAKIH
   POVREZHDENIJ.
   
   KALIFORNIJSKIJ UNIVERSITET SPECIAL'NO OTKAZYVAZYVAETSYA PREDOSTAVLYAT'
   LYUBYE GARANTII, VKLYUCHAYA, NO NE OGRANICHIVAYAS' TOL'KO `ETIMI
   GARANTIYAMI: NEYAVNYE GARANTII PRIGODNOSTI TOVARA ILI PRIGODNOSTI DLYA
   OTDEL'NOJ CELI. DANNOE PROGRAMMNOE OBESPECHENIE PREDOSTAVLYAETSYA NA
   OSNOVE PRICIPA "KAK EST'" I KALIFORNIJSKIJ UNIVERSITET NE OBYAZAN
   PREDOSTAVLYAT' SOPROVOZHDENIE, PODDERZHKU, OBNOVLENIYA, RASSHIRENIYA
   ILI IZMENENIYA.
   
   Vysheizlozhennoe yavlyaetsya BSD licenziej, klassicheskoj licenziej
   programmnogo obespecheniya s otkrytym kodom. `Eta licenziya ne
   nakladyvaet ogranichenij na ispol'zovanie ishodnogo koda. Nam
   nravitsya `eta licenziya i my ne sobiraemsya eio menyat'.
   
    1.3) Na kakih Unix platformah rabotaet PostgreSQL?
    
   Obychno, PostgreSQL mozhet rabotat' na lyuboj sovremennoj platforme
   sovmestimoj s Unix. V instrukcii po ustanovke, vy najdete spisok teh
   platform, na kotoryh byli provedeny testovye zapuski PostgreSQL k
   momentu vyhoda dannoj versii.
   
    1.4) Suschestvuyut li versii perenesennye ne na Unix sistemy?
    
   Klient
   
   Dlya zapuska na platformah MS Windows vozmozhna kompilyaciya C
   biblioteki libpq, psql, drugih interfesov i klientskih prilozhenij. V
   `etom sluchae, klient zapuskaetsya na MS Windows i svyazyvaetsya po
   TCP/IP s serverom, zapuschennym na odnoj iz podderzhivaemyh Unix
   platform. V distributiv vklyuchaetsya fajl win32.mak dlya togo, chtoby
   mozhno bylo provesti sborku biblioteki libpq i psql dlya Win32.
   PostgreSQL takzhe rabotaet cherez ODBC.
   
   Server
   
   Server BD mozhet byt' zapuschen na Windows NT i Win2k, ispol'zuya
   biblioteku Cygwin, razrabotannuyu dlya perenosa programmnogo
   obespecheniya Unix v NT. Smotrite pgsql/doc/FAQ_MSWIN v distributive
   ili MS Windows FAQ na http://www.PostgreSQL.org/docs/faq-mswin.html.
   
   PostgreSQL, sportirovannyj special'no dlya MS Win NT/2000/XP v
   nastoyaschij moment nachal rabotat'.
   
    1.5) Gde mozhno vzyat' PostgreSQL?
    
   Naprimer, vospol'zovavshis' anonimnym dostupom na ftp sajt PostgreSQL
   ftp://ftp.PostgreSQL.org/pub. Spisok zerkal vy najdete na nashem
   osnovnom sajte.
   
    1.6) Gde poluchit' podderzhku?
    
   Osnovnoj spisok rassylki: pgsql-general@PostgreSQL.org. V nem mozhno
   obsuzhdat' lyubye temy, kasayuschiesya PostgreSQL. CHtoby
   podpisat'sya, otprav'te pis'mo po `elektronnoj pochte, v kotorom v
   tele pis'ma (ne v teme) napishite sleduyuschie stroki:
    subscribe
    end

   na adres pgsql-general-request@PostgreSQL.org.
   
   Suschestvuet dajzhest spisok. CHtoby podpisat'sya na nego, otprav'te
   pis'mo po `elektronnoj pochte na adres:
   pgsql-general-digest-request@PostgreSQL.org i v tele pis'ma napishite
   strochki strochki:
    subscribe
    end

   Dajzhesty otpravlyayutsya podpischikam, kogda v osnovnom spiske
   rassylki nakopitsya okolo 30 kilobajt soobschenij.
   
   Dostupen i spisok rassylki soobschenij ob oshibkah. CHtoby
   podpisat'sya na `etot spisok, otprav'te po `elektronnoj pochte pis'mo
   na adres pgsql-bugs-request@PostgreSQL.org i v tele pis'ma napishite
   strochki strochki:
    subscribe
    end

   Takzhe imeetsya spisok rassylki s diskussiyami razrabotchikov. CHtoby
   podpisat'sya na `etot spisok, otprav'te po `elektronnoj pochte pis'mo
   na adres pgsql-hackers-request@PostgreSQL.org i v tele pis'ma
   napishite strochki strochki:
    subscribe
    end

   Dopolnitel'nye spiski rassylki i infomaciyu o PostgreSQL mozhno najti
   na domashnej stranichke PostgreSQL po adresu:
   
     http://www.PostgreSQL.org
     
   Esche suschestvuet IRC kanal na EFNet, s nazvaniem #PostgreSQL. YA
   ispol'zuyu dlya podklyucheniya k `etomu kanalu komandu Unix irc -c
   '#PostgreSQL' "$USER" irc.phoenix.net.
   
   Spisok kommercheskoj podderzhki kompanij dostupen na
   http://www.PostgreSQL.org/users-lounge/commercial-support.html.
   
    1.7) Kakaya poslednyaya versiya?
    
   Poslednij vypusk PostgreSQL - `eto versiya 7.2.3.
   
   My planiruem vypuskat' novye versii kazhdye chetyre mesyaca.
   
    1.8) Kakaya dokumentaciya imeetsya v nalichii?
    
   V distributiv vklyuchayutsya razlichnye rukovodstva, stranicy
   `elektronnogo rukovodstva man i nekotorye malen'kie testovye primery.
   Smotrite v katalog /doc. Vy takzhe mozhete prosmatrivat' dokumentaciyu
   v Internet po adresu http://www.PostgreSQL.org/users-lounge/docs/.
   
   Suschestvuet dve knigi po PostgreSQL dostupnye po adresam
   http://www.PostgreSQL.org/docs/awbook.html i
   http://www.commandprompt.com/ppbook/. Spisok knig po PostgreSQL,
   kotorye mozhno kupit' dostupen po adresu
   http://www.ca.PostgreSQL.org/books/. Krome togo, po adresu
   http://techdocs.PostgreSQL.org/ vy mozhete najti kollekciyu
   tehnicheskih statej posvyaschennyh PostgreSQL.
   
   psql imeet neskol'ko prekrasnyh komand \d dlya otobrazheniya
   informacii po tipam, operatoram, funkciyam, agregatam i t.d.
   
   Nash sajt soderzhit esche bol'she informacii.
   
    1.9) Kak najti informaciyu ob izvestnyh oshibkah ili otsutstvuyuschih
    vozmozhnostyah?
    
   PostgreSQL podderzhivaet rasshirennyj podklass SQL-92. Smotrite nash
   spisok TODO na predmet izvestnyh oshibok, otsutstvuyuschih
   osobennostyah i buduschih planov.
   
    1.10) Kak mne nauchit'sya SQL?
    
   Kniga po PostgreSQL na http://www.PostgreSQL.org/docs/awbook.html
   nauchit SQL. Suschestvuet drugaya kniga po PostgreSQL na
   http://www.commandprompt.com/ppbook. Est' prekrasnyj uchebnik na
   http://www.intermedia.net/support/sql/sqltut.shtm, na
   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
   i na http://sqlcourse.com.
   
   Esche odin uchebnik - `eto kniga "Teach Yourself SQL in 21 Days,
   Second Edition" (Osvoj samostoyatel'no SQL za 21 den', Vtoraya
   redakciya) na http://members.tripod.com/er4ebus/sql/index.htm
   
   Mnogim iz nashih pol'zovatelej nravitsya kniga The Practical SQL
   Handbook, Bowman, Judith S., et al., Addison-Wesley. Drugim nravitsya
   The Complete Reference SQL, Groff et al., McGraw-Hill.
   
    1.11) Reshena li v PostgreSQL problema 2000-go goda (Y2K)?
    
   Da, my legko manipuliruem datami posle 2000 goda i pered 2000 godom.
   
    1.12) Kak prisoedinitsya k komande razrabotchikov?
    
   Dlya nachala, skachajte poslednyuyu versiyu ishodnyh tekstov i
   prochtite dokumentaciyu razrabotchikov PostgreSQL na nashem sajte ili
   v distributive. Zatem, podpishites' na spiski rassylki pgsql-hackers i
   pgsql-patches. Dalee, otpravlyajte ispravleniya (patches) vysokogo
   kachestva v spisok pgsql-patches.
   
   Suschestvuet ogranichennyj spisok lyudej, kotoryj imeyut privelegiyu
   vnosit' izmeneniya v CVS arhiv PostgreSQL. Kazhdyj iz `etih lyudej v
   svoe vremya otpravil tak mnogo vysokokachestvennyh ispravlenij, chto
   ih bylo nevozmozhno ostavit' bez vnimaniya i oni byli udostoeny
   previlegii vnosit' izmeneniya, i my uvereny, chto te ispravleniya,
   kotorye oni vnesut budut vysokogo kachestva.
   
    1.13) Kak otravit' soobschenie ob oshibke??
    
   Pozhalujsta posetite stranichku PostgreSQL BugTool na
   http://www.PostgreSQL.org/bugs/bugs.php, na kotoroj predostavleny
   detal'nye instrukcii o tom kak otpravit' soobschenie ob oshibke.
   
   Takzhe ne zabud'te posmotret' na ftp://ftp.PostgreSQL.org/pub na
   predmet bolee svezhih versij PostgreSQL ili zaplat.
   
    1.14) Kak sravnivat' PostgreSQL s drugimi SUBD?
    
   Suschestvuet neskol'ko metodov sravneniya programmnogo obespecheniya:
   vozmozhnosti, proizvoditel'nost', nadezhnost', podderzhka i cena.
   
   Vozmozhnosti
          PostgreSQL imeet bol'shinstvo vozmozhnostej predstavlennyh v
          bol'shih kommercheskih SUBD, takie kak: tranzakcii, podzaprosy,
          triggery, obzory (views), vneshnij klyuch ssylochnoj
          celostnosti i raznye blokirovki. U nas est' nekotorye
          vozmozhnosti, kotoryh net u nih: tipy, opredelyaemye
          pol'zovatelem, mehanizm nasledovaniya, pravila i konkuretnoe
          mnogoversionnoe upravlenie dlya raboty s soderzhimym
          blokirovok.
          
   Proizvoditel'nost'
          PostgreSQL imeet proizvoditel'nost' shozhuyu s drugimi
          kommercheskimi SUBD i s SUBD s otkrytym ishodnym kodom, v
          kakih-to aspektah rabotaya bystree chem oni, v kakih-to
          medlenee. V sravnenii s MySQL ili linejnymi SUBD, my medlenee
          pri operaciyah vstavki/obnovleniya, potomu chto upravlyaem
          tranzakciyami. I razumeetsya, MySQL ne imeet kakih-libo
          vozmozhnostej iz perechislenyh vyshe, v sekcii Vozmozhnosti. My
          delaem upor na nadezhnost' i rasshirennye vozmozhnosti, no my
          takzhe prodolzhaem uvelichivat' proizvoditel'nost' s kazhdym
          vypuskom. Suschestvuet interesnaya stranichka v Internet,
          sravnivayuschaya PostgreSQL i MySQL na
          http://openacs.org/philosophy/why-not-mysql.html
          
   Nadezhnost'
          My ponimali, chto nasha SUBD dolzhna byt' nadezhnoj ili ona
          nichego ne budet stoit'. My staraemsya vypuskat' horosho
          proverennyj, stabil'nyj kod, kotoryj soderzhit minimum oshibok.
          Kazhdyj vypusk prohodit stadiyu beta-testirovaniya po krajnej
          mere v techenii odnogo mesyaca i nasha istoriya vypuskov
          pokazyvaet chto my mozhem predostavlyat' stabil'nye, monolitnye
          vypuski, kotorye gotovy k produktivnomu ispol'zovaniyu. My
          verim, chto my proizvodim proverku ne huzhe, chem u drugih
          SUBD.
          
   Podderzhka
          Nash spisok rassylki predostavlyaet vozmozhmozhnost' obscheniya
          s bol'shoj gruppoj razrabotchikov i pol'zovatelej, kotorye
          mogut pomoch' reshit' lyubye voznikshie problemy. V to zhe
          vremya, my ne garantiruem kakie-libo ispravleniya, no i
          razrabotchiki kommercheskih SUBD ne vsegda delayut
          ispravleniya. Pryamoj dostup k razrabotchikam, soobschestvu
          pol'zovatelej, rukovodstvam i ishodnym tekstam chasto delayut
          podderzhku PostgreSQL prevoshodyaschej drugie SUBD.
          Suschestvuet kommercheskaya podderzhka po rezul'tam voznikshih
          incidentov, kotoraya dostupna dlya teh komu ona nuzhna.
          (Smotrite Sekciyu 1.6.)
          
   Cena
          Nash produkt besplaten kak dlya kommercheskogo tak, i ne dlya
          kommercheskogo ispol'zovaniya. Vy mozhete dobavlyat' svoj kod v
          nash produkt bez ogranichenij, za isklyucheniem teh, chto
          opisyvayutsya v nashej licenzii stilya BSD, kotoraya privedena
          vyshe.
          
    1.15) Kak okazat' finansovuyu pomosch' PostgreSQL?
    
   PostgreSQL imeet odnorangovuyu infrastrukturu s togo samogo vremeni
   kak my nachali razrabotku v 1996 godu. My dolzhny blagodarit' za `eto
   Marka Fonaya (Marc Fournier), kotoryj sozdal `etu infrastrukturu i
   upravlyaet ej na protyazhenii `etih let.
   
   Kachestvennaya infrastruktura ochen' vazhna dlya proektov s otkrytym
   ishodnym kodom. Ona predotvraschaet raskoly, kotorye mogut sil'no
   zaderzhat' postupatel'noe dvizhenie proekta.
   
   Razumeetsya, `eta infrastruktura ne yavlyaetsya deshevoj. Suschestvuet
   nekotoroe kolichestvo ezhemesyachnyh i odnorazovyh rashodov, kotorye
   trebuyut deneg. Esli vy ili vasha kompaniya imeet den'gi, kotorye
   mozhno peredat' v pomosch' nashim usiliyam, pozhalujsta posetite
   stranichku https://store.pgsql.com/shopping/ i sdelajte svoj vklad.
   
   Hotya na stranichke govoritsya o PostgreSQL, Inc, punkt
   "contributions" prednaznachen isklyuchitel'no dlya podderzhki proekta
   PostgreSQL i ne peredaetsya kakoj-libo konkretnoj kompanii. Esli
   hotite, to mozhete `eto proverit', napisav pis'mo na kontaktnyj adres.
     _________________________________________________________________
   
                 Voprosy pol'zovatelej po klientskoj chasti
                                      
    2.1) Suschestvuyut li ODBC drajvera dlya PostgreSQL?
    
   Suschestvuet dva ODBC drajvera, PsqlODBC i OpenLink ODBC.
   
   PsqlODBC vklyuchaetsya v distributiv. Bol'she informacii ob `etom
   drajvere mozhno najti na ftp://ftp.PostgreSQL.org/pub/odbc/.
   
   OpenLink ODBC mozhno vzyat' na http://www.openlinksw.com. `Etot
   drajver rabotaet s ih standartnym klientskim programmnym
   obespecheniem, ispol'zuyuschim ODBC, i takim obrazom, ODBC drajvery
   dlya PostgreSQL dostupny dlya kazhdoj iz podderzhivaemyh imi platform
   (Win, Mac, Unix, VMS).
   
   Vozmozhno oni budut prodavat' svoj produkt tem komu nuzhna
   kommercheskaya podderzhka, no besplatnaya versiya vsegda budet
   dostupna. Pozhalujsta, napravlyajte voprosy na adres
   postgres95@openlink.co.uk.
   
   Takzhe posmotrite ODBC razdel v rukovodstve programmista.
   
    2.2) Kakie instrumenty suschestvuyut dlya ispol'zovaniya PostgreSQL cherez
    Web?
    
   Prekrasnoe vvedenie vo vzaimodejstvie baz dannyh i Web mozhno najti
   na: http://www.webreview.com
   
   Dlya integracii s Web, odnim iz prevoshodnyh instrumentov yavlyaetsya
   PHP. Domashnyaya stanichka http://www.php.net.
   
   Dlya kompleksnyh reshenij, mnogie pol'zuyutsya Perl interfejsom i
   CGI.pm ili mod_perl.
   
    2.3) Est' li u PostgreSQL graficheskij interfejs pol'zovatelya? Generator
    otchetov? Vstroennyj interfejs dlya yazyka zaprosov?
    
   U nas est' prekrasnyj goraficheskij interfejs, nazyvaemyj PgAccess,
   kotoryj takzhe mozhno ispol'zovat' kak generator otchetov. Ego
   stranichka http://www.pgaccess.org/
   
   My takzhe vklyuchaem ecpg, kotoryj predostavlyaet vstroennyj interfejs
   k yazyku zaprosov SQL iz C.
   
    2.4) Kakie yazyki mogut vzaimodejstvovat' s PostgreSQL?
    
   Vot `eti:
     * C (libpq)
     * C++ (libpq++)
     * Embedded C (ecpg)
     * Java (jdbc)
     * Perl (DBD::Pg i perl5)
     * ODBC (odbc)
     * Python (PyGreSQL)
     * TCL (libpgtcl)
     * C Easy API (libpgeasy)
     * PHP ('pg_' functions, Pear::DB)
       
   Dopolnitel'nye interfejsy dostupny po adresu
   http://www.PostgreSQL.org/interfaces.html. i
   http://gborg.PostgreSQL.org.
     _________________________________________________________________
   
                         Voprosy administrirovaniya
                                      
    3.1) Kak mne ustanovit' PostgreSQL v mesto otlichnoe ot /usr/local/pgsql?
    
   Zadajte opciyu --prefix kogda zapuskaete configure.
   
    3.2) Kogda ya zapuskayu postmaster, ya poluchayu soobschenie Bad System
    Call ili soobschenie core dumped. Pochemu?
    
   `Eto mozhet byt' vyzvano raznymi problemami, no pervoe, chto nuzhno
   sdelat' - `eto ubedit'sya v tom, chto v vashem yadre ustanovleno
   rasshirenie System V. PostgreSQL trebuet, chtoby yadro podderzhivalo
   razdelyaemuyu pamyat' i semafory.
   
    3.3) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki
    IpcMemoryCreate. Pochemu?
    
   Libo u vas v yadre nepravil'nye nastrojki razdelyaemoj pamyati, libo
   vashemu yadru nuzhno bol'shee kolichestvo dostupnoj razdelyaemoj
   pamyati. Te konkretnye dejstviya, kotorye vam nuzhno proizvesti
   zavisyat ot arhitektury vashej mashiny i ot togo kak mnogo buferov i
   backend processov vy nastroili dlya postmaster. Dlya bol'shinstva
   sistem, s kolichestvom buferov i processov po umolchaniyu, neobhodimyj
   minimum - `eto okolo 1 megabajta. Podrobnosti o razdelyaemoj pamyati i
   semaforah smotrite v Rukovodstve administratora PostgreSQL.
   
    3.4) Kogda ya pytayus' zapustit' postmaster, ya poluchayu oshibki
    IpcSemaphoreCreate. Pochemu?
    
   Esli `eto soobschenie IpcSemaphoreCreate: semget failed (No space left
   on device) to nastrojki vashego yadra takovy, chto emu ne hvataet
   semaforov. Postgres trebuet odin semafor na potencial'nyj backend
   process. Vremennym resheniem yavlyaetsya zapusk postmaster s
   nastrojkami na mesh'shee kolichestvo backend processov. Ispol'zujte -N
   s znacheniem men'shim chem 32, kotoroe prinyato po umolchaniyu. Bolee
   pravil'noe reshenie - `eto uvelichit' znacheniya SEMMNS i SEMMNI v
   nastrjkah yadra.
   
   Neispravnye semafory takzhe mogut privesti k padeniyu SUBD vo vremya
   dostupa k baze dannyh.
   
   Esli vy poluchili kakoe-libo drugoe soobschenie ob oshibke, to vpolne
   vozmozhno, chto v vashem yadre voobsche ne nastroena podderzhka
   semaforov. Smotrite podrobnosti o razdelyaemoj pamyati i semaforah v
   Rukovodstve Administratora PostgreSQL.
   
    3.5) Kak mne upravlyat' soedineniyami s drugih komp'yuterov?
    
   Po umolchaniyu, PostgreSQL razreshaet tol'ko soedineniya na lokal'noj
   mashine cherez sokety domena Unix. Drugie mashiny ne smogut
   podklyuchit'sya k baze poka dlya postmaster ne budet zadan flag -i i
   poka ne budet razreshena host-avtorizaciya v fajle
   $PGDATA/pg_hba.conf. `Eti dejstviya delayut vozmozhnymi TCP/IP
   soedineniya.
   
    3.6) Kakie nastrojki mne nuzhno sdelat' dlya uluchsheniya
    proizvoditel'nosti?
    
   Nesomnenno, indeksy mogut uvelichit' skorost' vypolneniya zaprosov.
   Komanda EXPLAIN pozvolyaet vam posmotret' kak PostgreSQL
   interpretiruet vash zapros i kakie indeksy ispol'zuyutsya.
   
   Esli vy vypolnyaete mnogo operatorov INSERT, rassmotrite vozmozhnost'
   vypolnyat' ih v bol'shoj pachke, ispol'zuya komandu COPY. `Eto
   znachitel'no bystree, chem otdel'nye INSERT. Vo-vtoryh, operatory vne
   bloka tranzakcii BEGIN WORK/COMMIT sami vypolnyayut tranzakciyu.
   Podumajte nad vypolneniem neskol'kih operatorov v odnom bloke
   tranzakcii. `Eto umen'shit kolichestvo tranzakcij. Takzhe, zadumajtes'
   nad udaleniem i peresozdaniem indeksov, kogda vy vypolnyaete bol'shie
   izmeneniya dannyh.
   
   Suschestvuet neskol'ko opcij nastrojki. Vy mozhete zapretit' fsync()
   pri starte postmaster s opciej -o -F. `Eto predotvratit vyzovy
   fsync(), kotorye privodyat k sbrosu dannyh na disk posle kazhdoj
   tranzakcii.
   
   Vy mozhete takzhe ispol'zovat' dlya postmaster opciyu -B dlya
   uvelicheniya kolichestva buferov razdelyaemoj pamyati, kotoraya
   ispol'zuetsya backend processami. Esli vy sdelaete znachenie `etogo
   parametra slishkom bol'shim, to postmaster mozhet ne zapustitsya
   potomu chto vy ischerpaete ogranichenie yadra na ob"em razdelyaemoj
   pamyati. Kazhdyj bufer imeet razmer v 8 kilobajt i po umolchaniyu
   vydelyaetsya 64 bufera.
   
   Vy mozhete takzhe ispol'zovat' backend opciyu -S dlya uvelicheniya
   maksimal'nogo kolichestva pamyati, kotoroe ispol'zuetsya backend
   processom dlya vremennyh sortirovok. Znachenie dlya opcii -S zadaetsya
   v kilobajtah i po umolchaniyu ravno 512 (t.e. 512K).
   
   Vy takzhe mozhete ispol'zovat' komandu CLUSTER dlya gruppirovki dannyh
   v tablicah na sovpadayuschij indeks. Podrobnosti smotrite na stranice
   rukovodstva po komande CLUSTER.
   
    3.7) Kakie vozmozhnosti dlya otladki est' v nalichii?
    
   PostgreSQL imeet neskol'ko vozmozhnostej, pozvolyayuschie poluchit'
   informaciyu o sostoyanii, kotoraya mozhet byt' ispol'zovana v
   otladochnyh celyah.
   
   Vo-pervyh, pri zapuske configure s opciej --enable-cassert, mnogie
   vyzovy assert() pozvolyayut otslezhivat' rabotu backend processa i
   ostanovku programmy pri vozniknovenii kakih-libo neozhidannostej.
   
   I postmaster, i postgres imeyut neskol'ko otladochnyh opcij.
   Vo-pervyh, pri zapuske postmaster, ubedites', chto standartnyj vyvod i
   vyvod oshibok osuschestvlyayutsya v fajl zhurnala:
    cd /usr/local/pgsql
    ./bin/postmaster >server.log 2>&1 &

   `Eto privedet k poyavleniyu fajla server.log v glavnom kataloge
   PostgreSQL. `Etot fajl soderzhit poleznuyu informaciyu o problemah ili
   oshibkah, voznikshih na servere. Postmaster imeet opciyu -d, kotoraya
   pozvolyaet poluchat' pri protokolirovanii bolee detal'nuyu infrmaciyu.
   Dlya opcii -d ukazyvaetsya chislo, kotoroe zadaet uroven' otladki.
   Bud'te ostorozhny, tak kak vysokij uroven' otladki privodit k
   generacii fajlov zhurnala bol'shogo razmera.
   
   Esli postmaster ne zapuschen, vy mozhete zapustit' postgres backend iz
   komandnoj stroki i vvesti vash operator SQL napryamuyu. `Eto
   rekomenduetsya tol'ko dlya celej otladki. Zametim, chto v `etom
   rezhime, zapros zavershaetsya simvolom novoj stroki, a ne tochkoj s
   zapyatoj. Esli vy proizvodili kompilyaciyu s otladochnymi simvoloami,
   vy mozhete ispol'zovat' lyuboj otladchik, chtoby posmotret', chto
   sluchilos'. Poskol'ku backend zapuskaetsya ne iz postmaster, on ne
   zapuskaetsya v identichnom okruzhenii i znachit problemy iteracij
   blokirovok/backend ne mogut byt' vosproizvedeny.
   
   Esli postmaster zapuschen, zapustite psql v odnom okne, zatem najdite
   PID processa postgres, ispol'zuemyj psql. Ispol'zujte otdadchik dlya
   podklyucheniya k postgres PID. Vy mozhete ustanovit' tochki
   preryvaniya v otladchike i zapustit' zapros iz psql. Esli vy
   proizvodite otladku zapuska postgres, vy mozhete ustanovit'
   PGOPTIONS="-W n", i zatem zapustit' psql. `Eta opciya privodit k
   zaderzhke processa zapuska na n sekund, v techenie kotoryh vy mozhete
   podklyuchit' k processu otladchik, ustanovit' lyubye tochki
   preryvaniya i prodolzhit' zapusk.
   
   Programma postgres imeet opcii -s, -A, i -t kotorye mogut byt' ochen'
   poleznymi dlya otladki i izmereniya proizvoditel'nosti.
   
   Vy takzhe mozhete skompilirovat' PostgreSQL s profilirovaniem dlya
   togo, chtoby uvidet' kakie funkcii skol'ko vremeni vypolnyayutsya.
   Fajly profilirovaniya backend'a nahodyatsya v kataloge
   pgsql/data/base/dbname. Fajl profilirovaniya klienta budet pomeschen v
   tekuschij katalog klienta. V Linux dlya vypolneniya profilirovaniya
   trebuetsya kompilyacii s -DLINUX_PROFILE.
   
    3.8) Pochemu ya poluchayu soobschenie "Sorry, too many clients" kogda
    pytayus' podklyuchit'sya k baze?
    
   Vam nuzhno uvelichit' ogranichenie na kolichestvo konkuretnyh backend
   processov pri zapuske postmaster.
   
   Po umolchaniyu ustanovlen limit na 32 processa. Vy mozhete uvelichit'
   `etot limit perezapustiv postmaster s nuzhnym znacheniem processov,
   kotoroe ukazyvaetsya v opcii -N ili izmeniv fajl postgresql.conf.
   
   Zametim, chto esli vy zadadite v opcii -N znachenie bol'she 32, to vy
   takzhe dolzhny uvelichit' znachenie v opcii -B kotoroe po umolchaniyu
   ustanovleno v 64; Znachenie opcii -B dolzhno byt' po krajnej mere
   vdvoe bol'she znacheniya opcii -N, i vozmozhno eschio bol'she dlya
   luchshej proizvoditel'nosti. Dlya bol'shego kolichestva backend
   processov, vam takzhe neploho bylo by uvelichit' nekotorye parametry
   yadra Unix. `Eto takie parametry, kak maksimal'noe kolichestvo blokov
   razdelyaemoj pamyati, SHMMAX; maksimal'noe kolichestvo semaforov,
   SEMMNS i SEMMNI; maksimal'noe kolichestvo processov, NPROC;
   maksimal'noe kolichestvo processov na pol'zovatelya, MAXUPRC; i
   maksimal'noe kolichestvo otkrytyh fajlov, NFILE i NINODE. Prichina
   sozdaniya ogranicheniya na kolichestvo backend processov kak raz i
   sostoit v tom, chtoby vashej sisteme hvatilo resursov.
   
   V PostgreSQL do versii 6.5, maksimal'noe kolichestvo backend processov
   bylo 64, i izmenenie `etogo kolichestva trebovalo perekompilyacii
   posle ustanovki konstanty MaxBackendId v include/storage/sinvaladt.h.
   
    3.9) CHto nahoditsya v kataloge pgsql_tmp?
    
   Dannyj katalog soderzhit vremennye fajly, generiruemye obrabotchikom
   zaprosa. Naprimer, esli dlya vypolneniya ORDER BY nuzhna sortirovka i
   `eta sortirovka trebuet pamyati bol'she, chem dopuskaet parametr -S u
   backend'a, to dlya hraneniya dopolnitel'nyh dannyh sozdayutsya
   vremennye fajly.
   
   `Eti vremennye fajly dolzhny udalyat'sya avtomaticheski, no `etogo
   mozhet ne proizojti, esli backend ruhnul vo vremya sortirovki. Ostanov
   i zapusk servernogo processa obespechit ih udalenie iz kataloga.
   
    3.10) Pochemu neobhodimo delat' dump i restore pri obnovlenii vypuskov
    PostgreSQL?
    
   Razrabotchiki PostgreSQL delayut tol'ko nebol'shie izmeneniya mezhdu
   podvypuskami. Takim obrazom obnovlenie s versii 7.2 do 7.2.1 ne
   trebuet vypolneniya dump i restore. Odnako pri vyhode ocherednogo
   vypuska (t.e. pri obnovlenii naprimer, s 7.2 na 7.3) chasto menyaetsya
   vnutrennij format sistemnyh tablic i fajlov dannyh. `Eti izmeneniya
   chasto nosyat kompleksnyj harakter, tak chto net vozmozhnosti
   obespechit' obratnuyu sovmestimost' fajlov dannyh. Vypolenie dump
   pozvolyaet poluchit' dannye v obschem formate, kotoryj zatem mozhet
   byt' zagruzhen pri ispol'zovanii novogo vnutrennego formata.
   
   V teh vypuskah, gde format dannyh na diske ne menyaetsya, dlya
   provedeniya obnovleniya mozhet byt' ispol'zovan scenarij pg_upgrade
   bez ispol'zovaniya dump/restore. Kommentarii k vypusku govorit kogda
   mozhno ispol'zovat' pg_upgrade dlya `etogo vypuska.
     _________________________________________________________________
   
                           Voprosy `ekspluatacii
                                      
    4.1) V chem otlichie mezhdu binarnym i normal'nym kursorom?
    
   Smotrite opisanie na stranicah rukovodstva posvyaschennym DECLARE.
   
    4.2) Kak vypolnit' SELECT tol'ko dlya neskol'kih pervyh strochek zaprosa?
    
   Smotrite stanicu rukovodstva posvyaschennuyu FETCH ili ispol'zujte
   SELECT ... LIMIT....
   
   Dazhe esli vy hotite poluchit' tol'ko pervye neskol'ko zapisej, budet
   vypolnen ves' zapros. Rassmotrim zapros, kotoryj imeet ORDER BY. Esli
   est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, PostgreSQL
   mozhet vydat' tol'ko neskol'ko pervyh zaproshennyh zapisej ili mozhet
   vypolnyat' zapros poka ne budut vydany zhelaemye zapisi.
   
    4.3) Kak poluchit' spisok tablic ili drugih komponentov v psql?
    
   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 moezhete zapustit' psql s opciej -E tak,
   chtoby `eta programma vydavala zaprosy, kotorye ona ispol'zuet dlya
   vypolneniya zadannyh vami komand.
   
    4.4) Kak udalit' kolonku iz tablicy?
    
   `Eta funkcional'nost' byla dobavlena v vypusk 7.3 s operatorom ALTER
   TABLE DROP COLUMN. V rannih versiyah, mozhno sdelat' tak:
    BEGIN;
    LOCK TABLE old_table;
    SELECT ...  -- vyborka vseh kolonok za isklyucheniem toj, kotoruyu hotite u
dalit'
    INTO TABLE new_table
    FROM old_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
    COMMIT;

    4.5) Kakovy maksimal'nye razmery dlya zapisej, tablic i bazy dannyh?
    
   Suschestvuyut sleduyuschie ogranicheniya:
    Maksimal'nyj razmer bazy?              neogranichen (suschestvuyut bazy na
1 TB)
    Maksimal'nyj razmer tablicy?           16 TB
    Maksimal'nyj razmer zapisi?            1.6 TB
    Maksimal'nyj razmer polya?              1 GB
    Maksimal'noe kolichestvo zapisej v tablice?      neogranicheno
    Maksimal'noe kolichestvo kolonok v tablice?    250-1600 v zavisimosti ot ti
pa
    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 16 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, esli razmer bloka po umolchaniyu budet uvelichen do
   32k.
   
    4.6) Kak mnogo diskovogo prostranstva v baze dannyh nuzhno dlya sohraneniya
    dannyh iz obychnogo tekstovogo fajla?
    
   SUBD PostgreSQL mozhet potrebovat'sya diskovogo prostranstva do 5 raz
   bol'she dlya sohraneniya dannyh iz prostogo tekstovogo fajla.
   
   V kachestve primera, rassmotrim fajl v 100,000 strok v kazhdoj, iz
   kotoryh celoe chislo i tekstovoe opisanie. Pri `etom dlina teksta, v
   srednem, sostavlyaet 20 bajt. Razmer prostogo fajla sostavit 2.8 MB.
   Razmer bazy PostgreSQL, soderzhaschej `eti zhe dannye sostavit
   priblizitel'no 6.4 MB iz kotoryh:
    36 bajt: na kazhdyj zagolovok zapisi (priblizitel'no)
  + 24 bajta: odno pole s celochislennym tipom i odno tekstovoe pole
   + 4 bajta: ukazatel' na stranice dlya vsej zapisi
   ----------------------------------------
    64 bajt na zapis'

   Razmer stranicy dannyh v PostgreSQL sostavlyaet 8192 bajt (8 KB), tak chto:

   8192 bajt na stranicu
   -------------------   =  128 zapisej na stranicu BD (s okrugleniem)
     64 bajt na zapis'

   100000 strok dannyh
   --------------------  =  782 stranicy v BD
  128 zapisej na stranicu

782 stranicy BD * 8192 bajt na stranicu  =  6,406,144 bajt (6.4 MB)

   Indeksy ne trebuyut tak mnogo, no poskol'ku oni sozdayutsya dlya
   bol'shogo kolichestva dannyh, oni takzhe mogut byt' veliki.
   
   Znacheniya NULL sohranyayutsya v bitah i po`etomu oni zanimayut ochen'
   malo mesta.
   
    4.7) Kak mne ubedit'sya, chto suschestvuyut nuzhnye mne tablicy, indeksy,
    bazy dannyh i pol'zovateli?
    
   psql imeet neskol'ko komand, nachinayuschihsya s obratnoj kosoj
   cherty, dlya togo chtoby prosmatrivat' takuyu informaciyu. Ispol'zujte
   \? dlya togo, chtoby uvidet' `eti komandy. Takzhe suschestvuyut
   sistemnye tablicy, imya kotoryh nachinaetsya na pg_ i v kotoryh takzhe
   soderzhitsya `eta informaciya. Eschio, psql -l pokazhet spisok vseh
   baz dannyh.
   
   Takzhe smotrite fajl pgsql/src/tutorial/syscat.source. V nem
   predstavleny mnogie operatory SELECT kotorye nuzhny dlya polucheniya
   informacii iz sistemnyh tablic bazy dannyh.
   
    4.8) U menya medlenno rabotayut zaprosy ili ne proishodit ispol'zovaniya
    indeksov. Pochemu?
    
   Indeksy ne ispol'zuyutsya dlya kazhdogo zaprosa avtomaticheski. Oni
   ispol'zuyutsya tol'ko esli tablica bol'she minimal'nogo razmera i
   zapros vybiraet tol'ko malen'kij procent zapisej v tablice. Tak
   ustroeno, potomu chto dostup k disku s primeneniem randomizacii pri
   skanirovanii indeksov mozhet byt' medlennee, chem prostoe chtenie
   tablicy ili ee posledovatel'noe skanirovanie.
   
   CHtoby opredelit' neobhodimost' ispol'zovaniya indeksa dlya kakoj-libo
   tablicy, PostgreSQL dolzhen imet' statistiku po `etoj tablice. `Eta
   statistika sobiraetsya pri ispol'zovanii VACUUM ANALYZE ili prosto
   ANALYZE. Ispol'zuya statistiku, optimizator uznaet o tom kak mnogo
   zapisej v tablice i esli on dolzhen ispol'zovat' indeksy, to on mozhet
   prinimat' luchshie resheniya. Statistika takzhe vliyaet na opredelenie
   optimal'nogo poryadka svyazyvaniya i metoda svyazyvaniya. Sbor
   statistiki dolzhen periodicheski vypolnyatsya pri izmenenii
   soderzhimogo tablicy.
   
   Obychno indeksy ne ispol'zuyutsya dlya ORDER BY ili dlya vypolneniya
   svyazyvanij. Posledovatel'nyj perebor sleduyuschij za yavnoj
   sortirovkoj obychno bystree, chem poisk po indeksam v bol'shoj
   tablice. Odnako, ORDER BY chasto kombiniruetsya s LIMIT i v `etom
   sluchae indeks budet ispol'zovat'sya, poskol'ku pri vypolnenii budet
   vozvraschat'sya nebol'shaya chast' tablicy. Fakticheski MAX() i MIN()
   ne ispol'zuyut indeksy, no indeks ispol'zuetsya pri postroenii
   zaprosov s ORDER BY i LIMIT:
    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;

   Kogda ispol'zuyutsya operacii s shablonami, naprimer LIKE ili ~,
   indeksy mogut byt' ispol'zovany v sleduyuschih sluchayah:
     * Nachalo stroki poiska dolzhno sovpadat' s nachalom iskomoj stroki,
       t.e.:
          + LIKE shablony ne dolzhny nachinat'sya s %..
          + ~ shablony regulyarnyh vyrazhenij dolzhna nachinat'sya na ^.
     * Stroka poiska ne dolzhna nachinat'sya s simvola klassa, t.e.
       [a-e].
     * Poisk nezavisimyj ot registra, takoj kak ILIKE i ~* ne ispol'zuet
       indeksy. Vmesto nego, ispol'zujte funkcional'nye indeksy, kotorye
       opisyvayutsya v sekcii 4.12.
     * Vo vremya initdb dolzhna ispol'zovat'sya lokal' po umolchaniyu C.
       
    4.9) Kak posmotret' na to, kak optimizator vypolnyaet moj zapros?
    
   Smotrite stranicu rukovodstva posvyaschennuyu EXPLAIN.
   
    4.10) CHto takoe R-tree indeks?
    
   R-tree indeks ispol'zuetsya dlya indeksirovaniya prostranstvennyh
   dannyh. Indeks h`esha ne mozhet upravlyat' poiskami diapazona. B-tree
   indeks upravlyaet tol'ko poiskami diapazona v odnom izmerenii. R-tree
   indeks mozhet upravlyat' mnogorazmernymi dannymi. Naprimer, esli
   R-tree indeks mozhet byt' vstroen v atribut tipa point, to sistema
   mozhet bolee `effektivno otvetit' na zapros tipa "vybrat' vse tochki
   vnutri zadannogo chetyrehugol'nika."
   
   Kanonicheskij istochnik, opisyvayuschij pervonachal'noe sozdanie
   R-tree `eto:
   
   Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
   Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
   Data, 45-57.
   
   Vy mozhete najti `etot dokument v knige Stonebraker'a "Readings in
   Database Systems".
   
   Vstroennnye R-tree mogut upravlyat' poligonami i boksami. V teorii,
   R-tree mogut byt' rasshireny dlya upravleniya bol'shim kolichestvom
   izmerenij. Na praktike, rasshirenie R-tree trebuet nekotoryh usilij i
   u nas, v dannyj moment, net kakoj-libo dokumentacii o tom, kak `eto
   sdelat'.
   
    4.11) CHto takoe Genetic Query Optimizer?
    
   Modul' GEQO proizvodit bystruyu optimizaciyu zaprosa, kogda proishodit
   svyazyvanie mnogih tablic cherez Genetic Algorithm (GA). `Eto
   pozvolyaet upravlyat' bol'shimi zaprosami na svyazyvanie cherez
   neistoschayuschij poisk.
   
    4.12) Kak mne vypolnit' poisk regulyarnogo vyrazheniya i poisk nezavisimyj
    ot registra bukv poisk regulyarnogo vyrazheniya? Kak mne ispol'zovat'
    indeks dlya poiska nezavisimogo ot registra bukv?
    
   Operator ~ proizvodit poisk regulyarnogo vyrazheniya, a operator ~*
   proizvodit nezavisimyj ot registra bukv poisk regulyarnogo
   vyrazheniya. Nezavisimyj ot registra variant LIKE nazyvaetsya ILIKE.
   
   Nezavisimoe ot registra sravnenie obychno vyrazhaetsya tak:
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc';

   `Eta konstrukciya ne budet ispol'zovat' standartnyj indeks. Odnako,
   esli vy sozdadite funkcional'nyj indeks, on budet ispol'zovan:
    CREATE INDEX tabindex ON tab (lower(col));

    4.13) Kak ya mogu opredelit', chto znachenie polya ravno NULL v kakom-libo
    zaprose?
    
   Vy prosto sravnivaete znachenie s IS NULL i IS NOT NULL.
   
    4.14) Kakovy otlichiya mezhdu raznymi simvol'nymi tipami?
    
Tip            Vnutrennee imya   Zamechaniya
--------------------------------------------------
"char"          char            1 simvol
CHAR(n)         bpchar          zapolnyaetsya pustotoj do fiksirovannoj dliny
VARCHAR(n)      varchar         razmer zadaet maksimal'nuyu dlinu, net zapolnen
iya
TEXT            text            net zadavaemogo verhnego ogranicheniya ili dlin
y
BYTEA           bytea           massiv bajt peremennoj dliny (mozhno ispol'zova
t' null-bajt bez opaski)

   Vnutrennee imya vy mozhete uvidet', kogda smotrite sistemnye katalogi
   i v nekotoryh soobscheniyah ob oshibkah.
   
   Poslednie 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'.
   
   CHAR(n) - `eto luchshee reshenie dlya hraneniya strok, kotorye obychno
   imeyut odinakovuyu dlinu. VARCHAR(n) - `eto luchshee reshenie, kogda
   nuzhno hranit' stroki peremennoj dliny, no ne prevyshayuschie
   opredelennogo razmera. TEXT - `eto luchshee reshenie dlya strok
   neogranichennoj dliny, s maksimal'no dopustimoj dlinoj v 1 gigabajt.
   BYTEA dlya hraneniya binarnyh dannyh, znacheniya kotoryh mogut
   vklyuchat' NULL bajty. `Eti tipy imeyut shodnye harakteristiki
   proizvoditel'nosti.
   
    4.15.1) Kak mne sozdat' pole serial/s-avto-uvelicheniem?
    
   PostgreSQL podderzhivaet tip dannyh SERIAL. On avtomaticheski sozdaet
   posledovatel'nost' i indeks dlya kolonki. 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
    );
    CREATE UNIQUE INDEX person_id_key ON person ( id );

   Smotrite podrobnosti o posledovatel'nostyah na stranice rukovodstva
   posvyaschennoj create_sequence. Vy takzhe mozhete ispol'zovat' kazhdoe
   pole OID v zapisi kak unikal'noe znachenie. Odnako, esli vam nuzhen
   damp i perezagruzka bazy dannyh, vam neobhodimo ispol'zovat' komandu
   pg_dump s opciej -o ili opciyu COPY WITH OIDS dlya sohraneniya
   znachenij polya OID.
   
    4.15.2) Kak mne poluchit' znachenie pri vstavke SERIAL?
    
   Odin iz sposobov sostoit v poluchenii sleduyuschego znacheniya SERIAL
   iz ob"ekta sequence s pomosch'yu funkcii nextval() pered vstavkoj i
   zatem vstavlyat' `eto znachenie yavno. Ispol'zujte tablicu-primer v
   4.15.1, primer v psevdoyazyke pokazhet kak `eto delaetsya:
    new_id = execute("SELECT nextval('person_id_seq')");
    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

   Zatem vy dolzhny takzhe sohranit' novoe znachenie v peremennoj new_id
   dlya ego ispol'zovaniya v drugih zaprosah (naprimer takih kak vneshnij
   klyuch dlya tablicy person). Zametim, chto imya avtomaticheski
   sozdannogo ob"ekta SEQUENCE budet <table>_<serialcolumn>_seq, gde
   table i serialcolumn yavlyayutsya sootvetstvenno imenami vashej
   tablicy i vashej kolonki SERIAL.
   
   V kachestve al'ternativy, vy mozhete poluchit' naznachennoe znachenie
   SERIAL s pomosch'yu funkcii currval() posle provedeniya obychnoj
   operacii vstavki, naprimer
    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
    new_id = execute("SELECT currval('person_id_seq')");

   I nakonec, vy mozhete ispol'zovat' znachenie OID, vozraschaemoe iz
   opertora INSERT chtoby uvidet' znachenie po umolchaniyu, chto
   predpolozhitel'no yavlyaetsya naimenee perenosimym na drugie platformy
   resheniem. V Perl, ispol'zuya DBI s modulei Edmund Mergl'ya DBD::Pg,
   znachenie oid stanovitsya dostupnym cherez $sth->{pg_oid_status} posle
   $sth->execute().
   
    4.15.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 vashem
   backend'om, a ne drugimi pol'zovatelyami.
   
    4.15.4) Pochemu chisla iz moej posledovatel'nosti ne ispol'zuyutsya snova
    pri otmene tranzakcii? Pochemu sozdayutsya razryvy pri numeracii v kolonke,
    gde ya ispol'zuyu posledovatel'nost'/SERIAL?
    
   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.16) CHto takoe OID? CHto takoe TID?
    
   Polya OID sluzhat unikal'nymi idetifikatorami zapisej v PostgreSQL.
   Kazhdaya zapis', kotoraya sozdaiotsya v PostgreSQL poluchaet
   unikal'nyj OID. Vse znacheniya OID generiruemye vo vremya initdb
   imeyut znacheniya men'she 16384 (iz include/access/transam.h). Vse
   sozdannye pol'zovatelem OID imeyut bOl'shie znachenie. Po umolchaniyu,
   vse `eti OID yavlyayutsya unikal'nymi ne tol'ko vnutri kakoj-libo
   tablicy ili bazy dannyh, no i vnutri vsej SUBD PostgreSQL.
   
   PostgreSQL ispol'zuet OID v svoih vnutrennih sistemnyh tablicah dlya
   svyazi zapisej i tablic. Znacheniya OID mogut byt' ispol'zovany dlya
   identifikacii zadannyh pol'zovatelem zapisej, a takzhe ispol'zovat'sya
   pri svyazyvaniyah. Rekomenduetsya ispol'zovat' tip kolonki OID dlya
   hraneniya znachenij OID Vy mozhete sozdat' indeks na pole OID dlya
   bolee bystrogo dostupa.
   
   Znacheniya OID naznachayutsya dlya vseh novyh zapisej iz central'noj
   oblasti, kotorye ispol'zuyutsya vsemi vsemi bazami dannyh. Esli vy
   hotite izmenit' OID na kakoe-libo drugoe znachenie ili esli vy hotite
   sozdat' kopiyu tablicy s takimizhe OID, to `eto mozhno sdelat' tak:
        CREATE TABLE new_table(old_oid oid, mycol int);
        SELECT old_oid, mycol INTO new FROM old;
        COPY new TO '/tmp/pgtable';
        DELETE FROM new;
        COPY new WITH OIDS FROM '/tmp/pgtable';

   OID hranitsya kak 4-h bajtnoe celoe i ne mozhet prevyshat' znachenie v
   4 milliarda. Odnako, esche nikto ne soobschil o tom, chto takoe
   proizoshlo, no my planiruem do togo kak `eto sluchit'sya izbavitsya ot
   `etogo ogranicheniya.
   
   TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s
   blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak
   zapisi byli izmeneny ili peregruzheny.
   
   TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
   fizicheskie zapisi.
   
    4.17) CHto oznachayut nekotorye terminy ispol'zuemye v PostgreSQL?
    
   Nekotoryj ishodnyj kod i staraya dokumentaciya ispol'zuyut
   obscheupotrebitel'nye terminy. Vot nekotorye iz nih:
     * table, relation, class
     * row, record, tuple
     * column, field, attribute
     * retrieve, select
     * replace, update
     * append, insert
     * OID, serial value
     * portal, cursor
     * range variable, table name, table alias
       
   Spisok obschih terminov po bazam dannyh mozhno najti na
   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
   /glossary.html
   
    4.18) 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:
    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.19) Kak mne uznat', kakaya versiya PostgreSQL zapuschena?
    
   Iz psql, naberite SELECT version();
   
    4.20) 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.21) 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.22) Pochemu moi podzaprosy, ispol'zuyuschie IN tak medlenno rabotaeyut?
    
   V nastoyaschij moment, my svyazyvaem pozaprosy dlya vneshnih zaprosov
   cherez posledovatel'nyj perebor rezul'tata podzaprosa dlya kazhdoj
   zapisi vneshnego zaprosa. Esli podzapros vozvraschaet tol'ko neskol'ko
   zapisej i vneshnij zapros vozvraschaet mnogo zapisej, IN rabotaet
   naibolee bystro. CHtoby uvelichit' skorost' v drugih zaprosah,
   zamenite IN na EXISTS:
    SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab);

   na:
    SELECT *
    FROM tab
    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);

   CHtoby takaya konstrukciya rabotala bystro, kolonka subcol dolzhna
   byt' proindeksirovana. My nadeemsya ubrat' `eto ogranichenie v
   buduschem vypuske.
   
    4.23) 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 zapisi v t1 (kotorye ne sovpadayut s
   t2). RIGHT svyazyvanie dolzhno dobavit' nesvyazannye zapisi t2. FULL
   svyazyvanie dolzhno vozvratit' sovpavshie zapisi plyus vse
   nesvyazannye zapisi iz t1 i t2. Slovo OUTER yavlyaetsya
   neobyazatel'nym i naznachaetsya v LEFT, RIGHT i FULL svyazyvaniyah.
   Obychnye svyazyvaniya nazyvayutsya INNER svyazyvaniya.
   
   V predyduschih versiyah, vneshnie svyazyvaniya mogli byt' `emulirovany
   ispol'zuya UNION i NOT IN. Naprimer, kogda proishodit svyazyvanie tab1
   i tab2, sleduyuschij zapros vypolnyaet vneshnee svyazyvanie dvuh
   tablic:
    SELECT tab1.col1, tab2.col2
    FROM tab1, tab2
    WHERE tab1.col1 = tab2.col1
    UNION ALL
    SELECT tab1.col1, NULL
    FROM tab1
    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
    ORDER BY col1

    4.24) 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 ustanavlivat'
   soedieneniya s razlichnymi bazami dannyh i takih obrazom ob"edinyat'
   informaciyu iz nih.
   
    4.25) Kak mne vernut' iz funkcii neskol'ko zapisej?
    
   Vy mozhete vozvraschat' iz funkcij PL/pgSQL spiski rezul'tatov,
   ispol'zuya refcursors. Smotrite
   http://www.PostgreSQL.org/idocs/index.php?plpgsql-cursors.html,
   sekciyu 23.7.3.3.
   
    4.26) Pochemu ya ne mogu nadezhno sozdavat'/udalyat' vremennye tablicy v
    funkciyah PL/PgSQL?
    
   PL/PgSQL k`eshiruet soderzhimoe 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.
   
    4.27) Kakie opcii replikacii suschestvuyut?
    
   Est' neskol'ko opcij dlya replikacii tipa master/slave. Oni dopuskayut
   ispol'zovanie tol'ko master servera dlya vneseniya izmenenij v bazu
   dannyh, a slave servery prosto pozvolyayut chitat' dannye iz bazy. Ob
   `etom chitajte zdes':
   http://gborg.PostgreSQL.org/genpage?replication_research. O replikacii
   s neskol'kimi master serverami chitajte zdes':
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
   
    4.28) Kakie opcii shifrovaniya suschestvuyut?
    
     * contrib/pgcrypto soderzhit mnogo funkcij shifrovaniya dlya
       ispol'zovaniya v SQL zaprosah.
     * Est' tol'ko odin sposob shifrovaniya dannyh, peredavaemyh ot
       klienta k serveru, cherez ispol'zovanie hostssl v pg_hba.conf.
     * Paroli pol'zovatelej k baze dannyh avtomaticheski shifruyutsya,
       pri sohranenii v versii 7.3. V predyduschih versiyah, vy dolzhny
       razreshit' opciyu PASSWORD_ENCRYPTION v postgresql.conf.
     * Server mozhno zapustit', ispol'zuya shifrovannuyu fajlovuyu
       sistemu.
     _________________________________________________________________
   
                          Rasshireniya PostgreSQL
                                      
    5.1) YA napisal funkciyu opredelyaemuyu pol'zovatelem. Kogda ya zapuskayu
    ee v psql, pochemu ya poluchayu dump core?
    
   Problema mozhet zaklyuchat'sya v neskol'kih veschah. Popytajtes'
   sperva protestirovat' vashu funkciyu v otdel'noj samostoyatel'noj
   programme.
   
    5.2) Kak ya mogu vnesti nekotorye klassnye novye tipy i funkcii v
    PostgreSQL?
    
   Otprav'te vashi rasshireniya v spisok rassylki pgsql-hackers i oni po
   vozmozhnosti budut pomescheny v podkatalog contrib/.
   
    5.3) Kak mne napisat' C funkciyu, vozvraschayuschuyu zapis'?
    
   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.