-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFAQ_farsi
1256 lines (1222 loc) · 141 KB
/
FAQ_farsi
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
PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
پرسيده مي شوند
تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ùايل: 28 شهریور 1383 هجری
شمسی
نگهدارنده اصلي Ùايل (زبان انگليسي)در Øال
Øاضر : Bruce Momjian [email protected]
نگهدارنده Ùايل به زبان Ùارسي: [email protected]
Ù…Øمود تقي‌زاده مهرجردی
آخرين نسخه اين Ùايل را مي‌توانيد از اين
آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
سوالاتي كه در مورد يك سکوی(پلتÙرم) خاص است در
اين آدرس جواب داده شده اند
http://www.PostgreSQL.org/docs/index.html
سوالات عمومي
1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙظ كرد؟
1.2) قانون كپي رايت‌ (Øقوق معنوي) در مورد
PostgreSQL به چه صورت است؟
1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
مي‌شود؟
1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
اجرا كرد؟
1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
1.6) از كجا خدمات پشتيباني بگيرم؟
1.7) آخرين نسخه اعلام شده چيست؟
1.8) چه مستندات و راهنمائيهايي وجود دارند؟
1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
امكاناتي كه در اين پايگاه داده وجود ندارد
مطلع شوم؟
1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
ملØÙ‚ شوم؟
1.13) چگونه مي‌توانم يك اشكال را به گروه
برنامه نويس اعلام كنم؟
1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
چه صورت است؟
1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
كمك كنم؟
سوالات مربوط به استÙاده از پايگاه داده
2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
صÙØات وب وجود دارد؟
2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
PostgreSQL‌ ارتباط برقرار كرد؟
سوالات مربوط به راهبري
3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
از /usr/local/pgsql/ نصب كنم؟
3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
كنترل كنم؟
3.6) براي كارايي بالاتر و بهتر پايگاه داده من
چه تنظيماتي را بايد انجام دهم؟
3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
دارد؟
3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
3.10) چرا براي به روز كردن نسخه پايگاه داده من
بايد كل داده ها را dump‌ و مجدداً restore كنم؟
3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
سوالات عملياتي
4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
چيزهايي كه در psql‌ وجود دارد را ببينم؟
4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
نوع داده آن را عوض كنيم؟
4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
پايگاه داده چقدر است؟
4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
داده‌‌هاي يك Ùايل متني مورد نياز است؟
4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
شده است؟
4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
چرا از نمايه ها استÙاده نمي‌كنند؟
4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
توسط بهينه‌ساز درخواستها مشاهده كنم؟
4.10) نمايه R-tree‌ چيست؟
4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
Optimizer)
4.12) چگونه از عبارات منظم براي جستجو استÙاده
كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
از نمايه استÙاده كنم؟
4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
كه يك Ùيلد NULL‌ است؟
4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
اÙزايشي ايجاد كنم؟
4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
بدانم؟
4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
شرایط race برای سایر کاربران می شوند؟
4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
شده مجدداً استÙاده نمی شود؟ چرا بین اعداد
سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟
4.16) OID و TID چه هستند؟
4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
استÙاده مي‌شود چيست؟
4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
مي‌گيرم؟
4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
PostgreSQLيي كه من استÙاده مي‌كنم چيست؟
4.20) چرا در Øین اجرای عملیات روی large-objectها
خطای "invalid large obj descriptor"به وجود می آید؟
4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
جاري را به عنوان مقدار پيش‌Ùرض داشته باشد؟
4.22) چرا زير درخواستهايي كه از IN استÙاده
مي‌كنند كند هستند؟
4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
انجام دهم؟
4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
داده توليد كرد؟
4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
يا ستون باشد؟
4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
جداول موقت را ايجاد يا Øذ٠كرد؟
4.27) چه گزينه‌هايي براي تكرار (replication) وجود
دارد؟
4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
توسعه PostgreSQL
5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
داشته باشم.
5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
كه خروجي آن يك ‌tuple (چند تايي) باشد؟
5.4) من يك Ùايل منبع را عوض كرده ام چرا در
عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
سوالات عمومي
1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙظ كرد؟
PostgreSQL به صورت Post-Gres-Q-L‌ تلÙظ مي‌شود. يك Ùايل
صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
كساني كه مايلند تلÙظ صØÙŠØ Ø±Ø§ بشنوند وجود
دارد.
PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
توسعه داده شده است (هنوز هم بعضي مواقع براي
سادگي به آن Postgres Ú¯Ùته مي‌شود) كه يك نمونه
تØقيقاتي از پايگاه داده‌هاي نسل بعد است.
PostgreSQL همان الگوي داده قوي و انواع داده را
ØÙظ كرده است ولي زبان PostQuel را با يك
زيرمجموعه پيشرÙته از SQL جايگزين كرده است.
PostgreSQL متن باز بوده و متن كامل آن در دسترس
است.
PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در
گروه پست الكترونيك برنامه‌نويسان PostgreSQL
عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي
در Øال Øاضر Marc G. Fournier‌ به آدرس [email protected]
مي‌باشد. (براي ديدن Ù†Øوه ملØÙ‚ شدن به اين تيم
قسمت 1.6 را ببينيد). اين تيم در Øاضر مسئوليت
تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را
بر عهده دارد. اين يك پروژه گروهي است Ùˆ تØت
كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در
مورد اين تيم به آدرس
http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد.
اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به
وجود آمد. اÙراد بسياري در توسعه Ùˆ رÙع اشكال Ùˆ
انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
PostgreSQL از روي آن نوشته شده است، توسط تعداد
زيادي دانشجوي كارشناسي ارشدو دانشجوي
كارشناسي Ùˆ تيم برنامه‌نويسي كه تØت نظر
پروÙسور Michael Stonebrake در دانشگاه
بركلي،‌كاليÙرنيا كار مي‌كرده‌اند نوشته
شده است.
نام اصلي نرم اÙزار در دانشگاه بركلي Postgres‌
بود. در سال 1995 بعد از اضاÙÙ‡ شدن SQL نام آن به
Postgres95 تغيير داده شد. در سال 1996 نام آن به
PostgreSQL تغيير داده شد.
1.2) قوانين كپي رايت در مورد PostgreSQL به چه صورت
است؟
PostgreSQL تØت قانون كپي رايت زير قرار دارد:
PostgreSQL Data Base Management System
Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions
Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement is
hereby granted, provided that the above copyright notice and this paragraph and
the following two paragraphs appear in all copies.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
قانون بالا ليسانس BSD كه يك ليسانس كلاسيك
براي متن‌هاي باز است مي‌باشد. هيچ Ù…Øدوديتي
در مورد Ù†Øوه استÙاده از متن در آن ديده
نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
تغيير آن نداريم.
1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
مي‌شود؟
در Øالت كلي PostgreSQL روي هر پلتÙرم (سكوي) سازگار
با يونيكس اجرا مي‌شود. ليست پلتÙرمهايي كه
تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
درقسمت دستورالعملهاي نصب آمده است.
1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
اجرا كرد؟
Client
مي‌توان psql, كتابخانه libpq و ساير واسطها و
برنامه‌هاي كاربردي را طوري كامپيل كرد كه
روي Ù…Øيطهاي ويندوز نيز اجرا شوند. در اين
Øالت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙرم
لينوكس در Øال اجراست ارتباط برقرار
مي‌كند.يك Ùايل win32.mak همراه با كدهاي PostgreSQL
وجود دارد كه براي كامپيل كردن كتابخانه libpq و
برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
ارتباط به صورت ODBC‌ را نيز دارد.
Server
با استÙاده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان
پايگاه داده را روي ويندوز NT و يا Win2K اجرا
كرد.براي ديدن اطلاعات بيشتر Ùايل pgsql/doc/FAQ_MSWIN
‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
ببينيد Ùˆ يا اينكه به اين صÙØÙ‡
http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد.
در Øال Øاضر يك عمليات انتقال PostgreSQL به روي
سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت
اين پروژه به سايت‌هاي
http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ
http://techdocs.postgresql.org/guides/Windows مراجعه كنيد.
همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز
در Øال انجام است كه در سايت http://forge.novell.com
مي‌توانيد اطلاعات بيشتر را ببينيد.
1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub
مي‌توانيد بگيريد. در صÙØÙ‡ اصلي سايت ليست
ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
آنها بگيريد آمده است.
1.6) از كجا خدمات پشتيباني بگيرم؟
گروه پستي اصلي [email protected] مي‌باشد. اين
گروه براي بØØ« در مورد موضوعات مختل٠در زمينه
PostgreSQL است. براي عضو شدن در اين گروه پستي يك
نامه الكترونيكي به آدرس گروه با Ù…Øتوياتی كه
در ادامه آمده است ارسال كنيد. در قسمت Subject
چيزي ننويسيد.
subscribe
end
آدرس گروه: [email protected]
همچنين يك گروه پستي هم به صورت ارسال چكيده
پيامها وجود دارد. براي عضو شدن در اين گروه يك
نامه با Ù…Øتويات زير به این آدرس ارسال كنيد.
subscribe
end
در اين گروه هر موقع Øجم نامه‌ها به 30
كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
گروه پستي بررسي اÙشكالات هم وجود دارد. براي
عضو شدن در اين گروه يك نامه با Ù…Øتويات زير به
[email protected] ارسال كنيد.
subscribe
end
گروه پستي مخصوص توسعه دهندگان
(برنامه‌نويسان) نيز وجوددارد. براي عضويت در
اين گروه يك نامه به آدرس زير با Ù…Øتويات مشخص
شده ارسال كنيد. [email protected]
subscribe
end
گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
دارد كه مي‌توانيد در سايت http://www.postgresql.org
ببينيد.
همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
وجود دارد. شما مي‌توانيد از Ùرمان يونيكسي irc
-c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
irc.freenode.net استÙاده كنيد.
ليست شركتهايي كه از طريق آنها مي‌توانيد
خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙت
كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
موجود است.
1.7) آخرين نسخه اعلام شده چيست؟
آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
ارائه شود.
1.8) چه مستندات و راهنمائيهايي وجود دارند؟
چندين كتابچه Ùˆ صÙØات راهنما Ùˆ مثالهاي كوچك
همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
دارد. براي ديدن صÙØات راهنما مي‌توانيد به
سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
وجود دارد. ليستي از كتابهايي كه قابل خريد
است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
وجود دارد. همچنين ليستي از مقالات Ùني در
مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
دارد.
برنامه psql يك دستور d\ دارد كه اطلاعاتي در
مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها
و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
امكاناتي كه در اين پايگاه داده وجود ندارد
مطلع شوم؟
PostgreSQL يك زير مجموعه پيشرÙته از SQL-92 را
پشتيباني مي‌كند. در ليست TODO اÙشكالات
شناخته شده يا امكاناتي كه وجود ندارد و يا
برنامه‌‌هاي آينده آمده است.
1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
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 در مورد SQL وجود دارد.
كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
استÙاده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
ويرايش دوم" در سايت
http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
تعداد زيادي از كاربران كتاب The Practical SQL را
ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
انتشارات McGraw-Hill مي‌باشد.
1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
مشكلي ندارد.
1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
ملØÙ‚ شوم؟
ابتدا،‌آخرين سورس را دونلود كرده و مستندات
مربوط به برنامه‌نويسي PostgreSQL را در سايت
مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
pgsql-hackers عضو شويد. در مرØله آخر وصله‌هاي با
كيÙيت بالا را به pgsql-patches ارسال كنيد.
تعداد زيادي از برنامه‌نويسان وجود دارند كه
امتياز انجام تغييرات در cvs‌ را دارند. هر
كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت
بالا به گروه ارسال كرده‌اند كه اعتماد
گردانندگان PostgreSQL را به دست آورده‌اند.
1.13) چگونه مي‌توانم يك اÙشكال را به گروه
برنامه نويس اعلام كنم؟
لطÙاً صÙØÙ‡ مربوط به اÙشكالات PostgreSQL را در
سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
اين سايت Ù†Øوه گزارش Ùˆ ارسال يك اشكال توضيØ
داده شده است.
همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
بازديد كنيد.
1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
چه صورت است؟
راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه
نرم‌اÙزارها وجود دارد كه عبارتند از
امكانات، كارايي، قابليت اعتماد، پشتيباني و
قيمت
امكانات
PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
پايگاه داده تجاري بزرگ نظير transactions, subselets,
triggers, views, foreign key referential integrity Ùˆ sophisticated
locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
دارد كه پايگاههاي داده ديگر آن را ندارند
نظير user-defined types‌و Inheritance‌و rules‌و multi-version
concurrency control
كارايي
كارايي PostgreSQL در Øد بقيه سيستم‌هاي
تجاري و متن باز است. در بعضي موارد سريعتر و
در بعضي موارد از آنها كندتر است. در مقايسه
با MySQL براي كاربران بيشتر و درخواست‌هاي
پيچيده و بار زياد خواندن/نوشتن سريعتر است.
در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
البته MySQL خيلي از امكانات PostgreSQL كه در بالا
به آن اشاره شد را ندارد. هد٠اصلي ما امكانات
و قابليت اعتماد بالاست در ضمن آنكه تلاش
مي‌كنيم تا كارايي آن نيز بهبود يابد. در
آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
جالب بين MySQL و PostgreSQL وجود دارد. از طر٠ديگر
MySQL‌ يك شركت است كه Ù…Øصول خود را به صورت متن
باز ارائه مي‌كند ولي براي نرم‌اÙزار غير
متن باز خود اØتياج به ليسانس تجاري دارد بر
خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند.
قابليت اطمينان
ما Ùكر مي‌كنيم كه يك سيستم پايگاه
داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
تمام تلاشمان را براي ارائه كدهاي پايداري
كه به خوبي تست شده باشند Ùˆ كمترين اÙشكالات
را داشته باشند مي‌كنيم. هر نسخه جديدي كه
ارائه مي‌شود Øداقل يك ماه را در مرØله تست
بتا مي‌گذراند. ما بر اين باور هستيم كه
قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
سيستم‌هاي پايگاه داده قابل توجه است و
نسخه‌هايي كه تاكنون ارائه شده است نشان
مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
Ù…Øكم Ùˆ مطمئن را كه آماده بهره‌برداري است
داريم.
پشتيباني
گروههاي پستي ما امكان ارتباط و تماس به
گروه بزرگي از برنامه نويسان و كاربران را
مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
ديگران كمك كنند. دسترسي مستقيم به
برنامه‌نويسان و گروههاي كاربران و
راهنماها و كداصلي باعث مي‌شود كه
پشتيباني PostgreSQL نسبت به ساير پايگاههاي
داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
ارائه خدمات پشتيباني به صورت تجاري نيز
وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
section 1.6 مراجعه كنيد.
قيمت
هم براي استÙاده تجاري Ùˆ هم غير تجاري هيچ
هزينه‌اي نبايد پرداخت شود. هيچ Ù…Øدوديتي
براي انجام تغييرات در PostgreSQL توسط استÙاده
كنندگان وجود ندارد به جز مواردي كه در
ليسانس BSD به آن اشاره شده است.
1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
كمك كنم؟
PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
كه آن را مديون Marc Fournier‌ است كه اين ساختار را
ايجاد كرده است.
كيÙيت يك ساختار براي يك پروژه متن باز بسيار
اهميت دارد. يك ساختار خوب مي‌تواند مانع از
Øوادثي شود كه در Øركت روبه‌جلوي پروژه خللي
وارد مي‌كنند.
البته اين ساختار تشكيلاتي ارزان نيست.
هزينه‌هاي ثابت ماهانه و روزمره براي
نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر
شما يا شركت شما مايل است كه از نظر مالي به
اين Øركت كمك كند لطÙاً به سايت
http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
اهدا كنيد.
هر چند در صÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
است ولي مشاركت عمدتاً براي پشتيباني از
پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
مشخص شده ارسال كنيد.
اگر يك استÙاده موÙÙ‚ از PostgreSQL سراغ داريد
لطÙاً آن را به سايت http://advocacy.postgresql.org گزارش
دهيد.
سوالات مربوط به استÙاده از پايگاه داده
2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
PostgreSQL‌ وجود دارد.
براي گرÙتن psqlODBC به سايت
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
كنيد.
OpenLlink را از اين سايت http://www.openlinksw.com
مي‌توانيد بگيريد. اين درايور با
نرم‌اÙزارهاي مختل٠ODBC كار مي‌كند بنابراين
شما قادر خواهيد بود با استÙاده از OpenLink روي
اكثر سكو‌هايي كه نرم‌اÙزارODBC‌دارند بدون
مشكل به PostgreSQL نيز متصل شويد.
اين Ù…Øصول به كساني كه اØتياج به خدمات
پشتيباني تجاري دارند Ùروخته مي‌شود. ولي
نسخه آزاد اين نرم‌اÙزار هميشه در درسترس
مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
را به آدرس [email protected] ‌ارسال نماييد.
2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
صÙØات وب وجود دارد؟
در سايت http://www.webreview.com براي استÙاده از
PostgreSQL‌ در صÙØات وب راهنماييهاي خوبي وجود
دارد.
براي تركيب Ùˆ استÙاده در صÙØات وب زبان PHP‌ يك
واسط بسيار مناسب است. اطلاعات بيشتر راجع به
PHP‌در سايت http://www.php.net وجود دارد.
مثالهايي نيز با استÙاده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl
وجود دارد.
2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
چند نرم اÙزار گراÙيكي براي PostgreSQL‌ وجود دارد
كه شامل pgAccess درسايت http://www.pgaccess.org و pgAdmin III در
سايت http://www.pgadmin.org و RHDB Admin در سايت
http://sources.redhat.com/rhdb و Rekall در سايت
http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك
phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود
دارد كه يك واسط وبي براي مديريت PostgreSQL
مي‌باشد.
براي ديدن اطلاعات بيشتر راجع به
نرم‌اÙزارهاي گراÙيكي براي PostgreSQL به آدرس
http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
PostgreSQL‌ ارتباط برقرار كرد؟
بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
PostgreSQL تعدادي از واسطهاي مورد نياز براي
ارتباط با پايگاه داده از طريق زبانهاي مختلÙ
آمده است كه در زير ليست آنها را مشاهده
مي‌كنيد.
C (libpq)
Embedded C (ecpg)
Java (jdbc)
Python (PyGreSQL)
TCL (libpgtcl)
واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
Drivers/Interfaces وجود دارد.
سوالات مديريتي
3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
از /usr/local/pgsql/ نصب كنم؟
موقع اجراي دستور configure از گزينه prefix-- استÙاده
كنيد.
3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
به دلايل مختل٠ممكن است اين اتÙاق بيÙتد. اما
در قدم اول شما مطمئن شويد كه كه امكانات
اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
براي اجرا شدن نياز به استÙاده از امكانات
ØاÙظه مشترك Ùˆ سماÙورها دارد.
3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
اØتمالاً‌ قسمت ايجاد ØاÙظه مشترك در كرنل به
درستي تنظيم نشده است Ùˆ يا اينكه بايد Ùضاي
ØاÙظه اشتراكي در كرنل را زياد كرد. ميزان
دقيق ØاÙظه مشترك مورد نياز بسته به معماري Ùˆ
Ù†Øوه استÙاده از باÙرها توسط برنامه postmaster
دارد. براي بيشتر سيستم‌ها كه با تنظيمات
پيش‌Ùرض كار مي‌كنند مقدار اين ØاÙظه Øدود 1
مگابايت است. براي ديدن اطلاعات بيشتر راجع به
ØاÙظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide
مراجعه كنيد.
3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
device باشد به اين معني است كه تعداد سماÙورهاي
تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر
Ùرايندي كه در backend اجرا مي‌شود به يك سماÙور
نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
است كه postmaster را با اعمال Ù…Øدوديت روي تعداد
Ùرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
براي اينكار از گزينه N- و يك عدد كمتر از 32
استÙاده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
پارامترهاي SEMMNS, SEMMNI كرنل را اÙزايش دهيم.
در زمان دسترسي خيلي زياد به پايگاه داده، ‌
سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن
سيستم شوند.
اگر پيغام خطا چيز ديگري باشد اØتمالاً به
دليل آن است كه كرنل از سماÙورها پشتيباني
نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
مديريتي PostgreSQL را مطالعه كنيد.
3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
كنترل كنم؟
به صورت پيش Ùرض Ùقط از ماشيني كه PostgreSQL روي آن
در Øال اجراست مي‌توان با استÙاده از
سوكت‌هاي يونيكسي به آن متصل شد. ساير
ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
آنكه گزينه tcp_sockets در Ùايل postgresql.conf Ùعال شده Ùˆ
همچنين با Ø§ØµÙ„Ø§Ø Ùايل PGDATA/ph_hba.conf هويت‌شناسي
مبتني بر ميزبان نيز Ùعال شود. با اين كار
مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
3.6) براي كارايي بالاتر و بهتر پايگاه داده من
چه تنظيماتي را بايد انجام دهم؟
به طور Øتم استÙاده از انديس‌ها باعث بالا
رÙتن سرعت پاسخ‌گويي به درخواست‌ها خواهد
شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†Øوه
پردازش يك دستور توسط PostgreSQL را مي‌دهد.
اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
آنها را با قرار دادن در يك Ùايل با دستور COPY‌
اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
است. Øتي‌الامكان سعي كنيد از تراكنشها
استÙاده نكنيد. تراكنشها مجموعه دستوراتي
هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك
دستور به صورت عادي اجرا شود PostgreSQL خود آن
دستور را به صورت يك تراكنش مستقل نگاه كرده و
اجرا مي‌كند. موقعی كه تغييرات زيادي در
پايگاه داده انجام مي‌شود انديسهاي قبلي را
ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد.
استÙاده از گزينه o -F- در Ùرمان postmaster باعث غير
Ùعال كردن ()fsync مي‌شود. اين دستور بعد از هر
تراكنش اطلاعات را روي هاردديسك منتقل
مي‌كند.
براي اÙزايش تعداد باÙرهاي ØاÙظه اشتراكي از
گزينه B- به همراه Ùرمان postmaster استÙاده كنيد.
توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
است postmaster اصلاً‌ اجرا نشود. هر باÙر 8 كيلو
بايت ØاÙظه نياز دارد Ùˆ تعداد باÙرها به طور
پيش Ùرض 64 است.
همچنين مي‌توان با گزينه S- ميزان ØاÙظه‌اي
كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
استÙاده مي‌شود را اÙزايش داد. مقدار پيش Ùرض
512 كيلو بايت است.
استÙاده از دستور CLUSTER نيز براي بالا بردن
كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
بيشتري در اين زمينه به شما مي‌دهد.
3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
دارد؟
PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن
وضعيت خود دارد كه براي اشكال زدايي مي‌توان
از آنها استÙاده كرد.
با استÙاده از گزينه enable-assert-- تعداد زيادي
()assert براي مونيتور كردن و توق٠برنامه در صورت
بروز خطاهاي ناخواسته Ùعال مي‌شود.
هم Postmaster و هم postgres گزينه‌هاي زيادي براي
اشكال زدايي دارند. موقعي كه postmaster را اجرا
مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ùايل log
ارسال كنيد.
cd /usr/local/pgsql
./bin/postmaster >server.log 2>&1 &
اين كار يك Ùايل log در بالاترين شاخه PostgreSQL‌
ايجاد مي‌كند. اين Ùايل Øاوي اطلاعات Ù…Ùيدي
در مورد مسائل و خطاهايي است كه براي سرور
اتÙاق اÙتاده است. براي ديدن جزئيات بيشتر
مي‌توان از d- به همراه Ùرمان postmaster‌ استÙاده
كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ùايل نوشته
مي‌شود. با بالابردن اين عدد Øجم اطلاعات
توليد شده در LogÙايل نيز اÙزايش مي‌يابد.
اگر postmaster در Øال اجرا نباشد، مي‌توانيم postgres
را به طور مستقيم از خط Ùرمان اجرا كرده Ùˆ
دستورات SQL را به آن بدهيم. اين كار Ùقط براي
اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
اين Øالت يك دستور با كاراكتر newline خاتمه پيدا
مي‌كند و نه با ;. اگر postmaster را با امكانات
اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
استÙاده از يك برنامه اشكال‌ياب اجراي
برنامه را مونيتور كنيد.
اگر postmaster در Øال اجرا باشد با دستور psql
مي‌توان به postgres متصل شد. با پيدا كردن PID
Ùرايند postgres كه psql به آن متصل شده است مي‌توان
آن را مونيتور كرد. براي اينكار بايد يك
برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ
است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
اين Ùاصله شما مي‌توانيد برنامه اشكال‌ياب
را به آن متصل كرده و با قرار دادن يك نقطه
توق٠روند اجراي آن را مونيتور كنيد.
postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
پيدا كردن اشكالات بسيار مناسب هستند.
شما مي‌توانيد postgreSQL را با امكانات profiling
كامپيل كنيد. اين كار باعث مي‌شود كه زمان
اجراي دقيق هر تابع در برنامه مشخص شود.
خروجي‌هاي توليد شده در اين Øالت در Ùايل
DLINUX_PROFILE. ريخته مي‌شود.
3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
شما بايد Øداكثر تعداد Ùرايندهاي همزمان
postmaster را اÙزايش دهيد. مقدار پيش Ùرض 32 است.
براي اÙزايش آن مي‌توان از گزينه N- استÙاده
كرد Ùˆ يا Ùايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
باشد بايد مقدار B- را نيز اÙزايش دهيم. اين
مقدار بايد Øداقل دو برابر مقدار N-‌ باشد.
براي اعداد خيلي بالا بايد بعضي از
پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
پارامترهايي نظير Øداكثر اندازه ØاÙظه
اشتراكي SHMMAX ØŒ Øداكثر تعداد سماÙورها SEMMNI‌ Ùˆ
SEMMNS ØŒ Øداكثر تعداد Ùرايندها NPROCØŒ Øداكثر
Ùرايندهاي يك كاربر MAXUPRC Ùˆ Øداكثر Ùايلهاي باز
NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
همزمان postgreSQL Ù…Øدود است آن است كه نيازهاي
PostgreSQL بيش از منابع موجود سيستم نباشد.
3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
دراين شاخه Ùايلهاي موقتي قرار دارد كه با
اجراي درخواستها به وجود آمده است. به عنوان
مثال اگر براي اجراي دستور order by نياز به انجام
مرتب سازي باشد Ùˆ در صورتي كه ØاÙظه مشخص شده
با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك
Ùايل موقت در اين شاخه ايجاد مي‌كند تا عمل
مرتب سازي را انجام دهد.
Ùايلهاي موقت معمولاً به صورت اتوماتيك پاك
مي‌شود اما اگر postgreSQL در Øين مرتب سازي crash‌
كند آن Ùايلها باقي مي‌مانند. با stop Ùˆ start كردن
برنامه postmaster اين Ùايلها پاك مي‌شوند.
3.10) چرا براي به روز كردن نسخه پايگاه داده من
بايد كل داده ها را dump‌ و مجدداً restore كنم؟
تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
كه Ùقط minor آنها متÙاوت است Ùقط تغييرات كوچكي
اعمال مي‌كنند؛ بنابراين براي به روز كردن از
نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
ساختار داخلي جداول Ùˆ Ùايلهاي داده تغيير
مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
براي انتقال داده‌هاي موجود در پايگاه داده
در اين Øالت بايد ‌از dump Ùˆ restore استÙاده كرد.
در نسخه‌هايي كه ساختار روي ديسك تغييري
نمي‌كند مي توان از برنامه pg_upgrade براي به روز
كردن پايگاه داده استÙاده كرد بدون اينكه
نيازي به استÙاده از dump Ùˆ restore باشد. در
يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
شده است كه آيا برنامه pg_upgrade براي اين توزيع
وجود دارد يا خير.
3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
چون اكثر سخت‌اÙزارهاي PC سازگار هستند مردم
Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در
Øاليكه اينطور نيست. استÙاده از هاردهاي SCSI Ùˆ
ØاÙظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا
نسبت به سخت اÙزارهاي ارزانتر نتايج بهتري از
نظر كارايي و پايداري سيستم بهمراه خواهد
داشت. PostgreSQL روي بيشتر سخت اÙزارها اجرا
مي‌شود اما اگر كارايي Ùˆ اطمينان Ùاكتورهاي
مهمي هستند بايد سخت اÙزار مناسب استÙاده شود.
در گروههاي پستي در مورد سخت اÙزار مناسب Ùˆ
انتخاب آن بØØ« شده است.
سوالات عملياتي
4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
راهنماي دستور DECLARE‌ را مطالعه كنيد.
4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
در واقع كل درخواست بايد بررسي و ارزيابي شود
Øتي اگر شما Ùقط چند ردي٠اول را بخواهيد. براي
مثال درخواست ORDER BY را در نظر بگيريد. اگر
انديس يا نمايه‌اي براي ORDER BY وجود داشته
باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر
اول درخواستي را ارزيابي كند و يا اينكه كل
درخواست پردازش شود تا تعداد رديÙ‌هاي
درخواستي توليد شود.
براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل
مي‌كنيم:
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
چيزهايي كه در psql‌ وجود دارد را ببينم؟
براي ديدن ليست جداول دستور dt\ را در برنامه
psql‌ استÙاده كنيد. براي ديدن ليست كامل
Ùرمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
‌قرار دارد. اين Ùايل Øاوي Ùرامين SQLيي است كه
خروجي را براي دستوراتي كه با \‌در psql شروع
مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
با استÙاده از آن اطلاعات داخلي پايگاه داده
را استخراج كرد.
4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
نوع داده آن را عوض كنيم؟
Øذ٠يك ستون در توزيع 7.3 با استÙاده از دستور
ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي
قبلي به روش زير عمل كنيد:
BEGIN;
LOCK TABLE old_table;
SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را Øذ٠كنيد را در اينجا بياوريد
INTO TABLE new_table
FROM old_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
براي عوض كردن نوع داده يك ستون به روش زير عمل
كنيد:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
پايگاه داده چقدر است؟
Ù…Øدوديتها عبارتند از:
Øداكثر اندازه پايگاه داده نامØدود (تا 32 ترابايت وجود دارد)
Øداكثر اندازه يك جدول 32 ترابايت
Øداكثر ا ندازه يك ردي٠1.6 ترابايت
Øداكثر اندازه يك Ùيلد 1 گيگا بايت
Øداكثر اندازه رديÙهاي يك جدول نا Ù…Øدود
Øداكثر ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
Øداكثر انديسهاي يك جدول نا Ù…Øدود
البته در Øالت نامØدود نيز ما Ù…Øدود به Øجم
هاردديسك Ùˆ Ùضاي ØاÙظه خواهيم بود. در صورتي
Ú©Ù‡ مقادير مشخص شده به عنوان نامØدود به صورت
غير معمولي بزرك شوند كارايي سيستم كاهش
خواهد ياÙت.
براي ذخيره كردن جداول با اندازه خيلي بزرگ
نيازي نيست كه سيستم عامل امكان ايجاد
Ùايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
بزرگ به صورت Ùايلهايي به Øجم يك گيگا بايت
نگاهداري مي‌شوند.
اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
قرار دهيم Øداكثر اندازه جدول Ùˆ Øداكثر تعداد
ستونها 4 برابر خواهد شد.
4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
داده‌‌هاي يك Ùايل متني مورد نياز است؟
يك پايگاه داده PostgreSQL‌ تا 5 برابر Ùضايي روي
هاردديسك براي نگاهداري يك Ùايل متني نياز
دارد.
به عنوان مثال يك Ùايل با 100000 خط را در نظر
بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
متني آمده است. Ùرض كنيد كه رشته متني به طور
متوسط 20 بايت باشد. اندازه Ùايل برابر 2.8 مگا
بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
Ùايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
32 bytes: اندازه سرايند هر خط به طور تقريبي
24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
+ 4 bytes: اشاره گر روي صÙØÙ‡ به يك چندتايي
----------------------------------------
60 bytes در هر رديÙ
اندازه صÙØات داده در PostgreSQL برابر با 8 كيلو بايت است
8192 تعداد بايت‌ها در هر صÙØÙ‡
------------------- = 136 تعداد رديÙ‌ها در يك صÙØÙ‡ پايگاه داده
60 تعداد بايت‌هاي هر رديÙ
100000 تعداد رديÙها
-------------------- = تعدادصÙØات پايگاه داده
128 تعداد رديÙها در هر صÙØÙ‡
735 تعداد صÙØات * 8192 تعداد بايت‌هاي هر صÙØÙ‡ = 6,021,120 مگا بايت
سربار انديسها يا نمايه‌ها از اين مقدار كمتر
است ولي چون شامل خود داده‌ها هم هست ممکن است
اندازه آنها هم بزرگ شود.
NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
Ùضاي بسيار كمي را اشغال مي‌كنند.
4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
شده است؟
psql تعداد زيادي دستور دارد كه با \ شروع
مي‌شوند و اين اطلاعات را در اختيار ما قرار
مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
كنيد. همچنين جداول سيستمي كه با نام آنها pg_
‌شروع مي‌شود نيز اين اطلاعات را در خود
دارند. اجراي برنامه psql با گزينه l- نيز باعث
نشان دادن ليست تمام پايگاههاي داده مي‌شود.
همچنين Ùايل pgsql/src/tutorial/syscat.source نيز Ùرمانهاي
SELECT كه با استÙاده از آن مي‌توان اطلاعات
پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
چرا از نمايه ها استÙاده نمي‌كنند؟
به طور معمول براي درخواستها از نمايه‌ها
استÙاده نمي‌شود. تنها در صورتي از نمايه‌ها
استÙاده مي‌شود كه اندازه جدول از يك اندازه
Øداقل بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از
رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين
كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك
كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
از خواندن مستقيم جدول يا خواندن ترتيبي
ركوردها كندتر باشد.
براي تعيين اينكه از نمايه استÙاده شود يا
خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
ANALYZE به دست مي‌آيد. با استÙاده از اين
اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك
جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
تعيين كند كه آيا از نمايه استÙاده شود يا خير.
اطلاعات آماري همچنين براي تعيين ترتيب الØاق
Ùˆ روشهاي الØاق به صورت بهينه نيز كاربر دارد.
جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
همزمان با تغيير داده‌هاي جدول انجام شود.
نمايه‌ها به طور معمول همراه با دستور ORDER BY
به كار برده نمي‌شوند. براي يك جدول بزرگ يك
پيمايش ترتيبي همراه با دستور مرتب سازي از به
كار بردن نمايه‌ها سريعتر خواهد بود.
اما اگر همراه با ORDER BY‌ از LIMIT استÙاده شود
اغلب از نمايه‌ها استÙاده مي‌شود چون Ùقط
قسمتي از جدول استÙاده مي‌شود. در Øقيقت هر
چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙاده
نمي‌كنند ولي مي‌توانيم با استÙاده از دستور
زير با استÙاده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
LIMIT‌ آنها را به دست آوريم.
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1;
اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در
انتخاب پيمايش ترتيبي اشتباه كرده است با
دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
استÙاده از نمايه‌ها باعث اÙزايش سرعت
درخواست‌ها خواهد شد.
استÙاده از نمايه‌ها هنگامي كه از علائم ويژه
نظير LIKE Ùˆ ~ استÙاده مي‌كنيد Ùقط در بعضي
شرايط خاصي كه در اينجا ذكر شده است ممكن است:
ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
باشد براي مثال:
دستورات LIKE نبايد با علامت % شروع شوند
الگوهاي منظمي كه با ~ مي‌ايد Øتماً بايد با
علامت ^ شروع شود
رشته جستجو نبايد با يك مجموعه از
كاراكتر‌ها مثل [a-e] شروع شود
جستجوهاي غيرØساس به متن مثل ILIKE‌ Ùˆ *~ از
نمايه‌ها استÙاده نمي‌كنند. در عوض از
توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
استÙاده مي‌كنند.
مقدار پيش Ùرض locale‌ بايد در initdb استÙاده شود.
4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
توسط بهينه‌ساز درخواستها مشاهده كنم؟
راهنماي دستور EXPLAIN را نگاه كنيد.
4.10) نمايه R-tree‌ چيست؟
از نمايه R-Tree براي انديس كردن داده‌هاي
Ùاصله‌اي استÙاده مي‌شود. يك نمايه hash
نمي‌توانند جستجوهاي Ù…Øدوده‌اي را انجام
دهد. نمايه "B-tree" نيز براي انجام جستجوي
Ù…Øدوده‌اي در يك جهت قابل استÙاده است. اما
R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
پشتيباني كند. براي مثال استÙاده اگر از نمايه
R-tree‌ براي گونه Point استÙاده شود سرعت
درخواست‌هايي نظير "select all points within a bounding
rectangle" به مراتب اÙزايش مي‌يابد.
مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
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.
R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
توسعه R-tree‌ نياز به كار بيشتري دارد.
4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
Optimizer)
استÙاده از GEQO سرعت بهينه سازي درخواست را
هنگاميكه تعداد زيادي جدول را با استÙاده از
الگوريتم ژنتيك الØاق مي‌كنيم اÙزايش
مي‌دهد.
4.12) چگونه از عبارات منظم براي جستجو استÙاده
كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
از نمايه استÙاده كنم؟
براي جستجوي عبارت منظم از عملگر ~‌ استÙاده
مي‌كنيم. براي جستجوي غير Øساس به متن از
عملگر *~ Ùˆ يا ILIKE‌ استÙاده مي‌كنيم.
روش ديگر انجام جستجوي غير Øساس به متن در زير
نشان داده شده است.
SELECT *
FROM tab
WHERE lower(col) = 'abc';
اين از نمايه‌هاي استاندارد استÙاده
نمي‌كند. ولي شما مي توانيد با دستور زير يك
نمايه ايجاد كنيد Ùˆ از آن استÙاده كنيد.
CREATE INDEX tabindex ON tab (lower(col));
4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
كه يك Ùيلد NULL‌ است؟
با استÙاده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
NULL بودن يك Ùيلد را تست كنيم.
4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
Type Internal Name Notes
--------------------------------------------------
VARCHAR(n) varchar اندازه، Øداكثر طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡
CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙاده مي‌شود
TEXT text Øداكثر طول را مشخص نمي‌كند
BYTEA bytea آرايه‌اي از بايت با طول متغير
"char" char يك كاراكتر
نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
پيغامهاي خطا مي‌توان ديد.
چهار گونه اول همگي از نوع varlena هستند (4 بايت
اول روي ديسك طول را مشخص مي‌كند كه به دنبال
آن داده‌ها قرار دارند.)‌بنابراين Ùضاي
واقعي استÙاده شده روي ديسك از اندازه تعريÙ
شده بيشتر است. اما اين گونه‌ها را مي‌توان
Ùشرده كرد كه اينكار باعث مي‌شود Ùضاي كمتري
روي ديسك اشغال كنند.
براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
بهترين انتخاب است. در اين گونه Øداكثر طول
رشته Ù…Øدود است بر خلا٠text كه هيچ Ù…Øدوديتي
روي Øداكثر اندازه رشته نمي‌گذارد.(در اين
گونه Øداكثر طول يك رشته يك گيگا بايت خواهد
بود)
گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
(خالي) پر مي‌شود تا به طول مشخص شده برسد در
Øاليكه گونه VARCHAR كاراكترها را به همان صورت
كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
داده‌هاي باينري است به خصوص داده‌هاي
باينتري كه شامل بايت‌هاي NULL هستند. از نظر
كارايي تمام اين گونه‌ها يكسان هستند.
4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
اÙزايشي ايجاد كنم؟
PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد
منØصر به Ùرد براي هر ردي٠)به روش زير عمل
كنيد:
CREATE TABLE person (
id SERIAL,
name TEXT
);
دستور بالا به طور اتوماتيک به دستور زير
تبديل مي‌شود:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
براي ديدن اطلاعات بيشتر به راهنماي دستور
create_sequence مراجعه كنيد. همچنين مي‌توان از
OID‌هر ردي٠به عنوان يك مقدار منØصر به Ùرد
استÙاده كرد. اما در اين Øالت براي dump كردن Ùˆ
reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
با گزينه o-‌ اجرا كنيد.
4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
بدانم؟
يك روش براي گرÙتن مقدار بعدي يك Ùيلد سريال
استÙاده از تابع ()nextval است. در شبه ÙƒÙدي كه در
ادامه آمده است روش انجام اين كار نشان داده
شده است:
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
با اجرا دستور Ùوق مقدار جديد را در متغير new_id
نيز خواهيدداشت كه مي‌توانيد آن را در بقيه