1 PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
2 پرسيده مي شوند
3 تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ùايل: 28 شهریور 1383 هجری
5 نگهدارنده اصلي Ùايل (زبان انگليسي)در Øال
6 Øاضر : Bruce Momjian pgman@candle.pha.pa.us
7 نگهدارنده Ùايل به زبان Ùارسي: m.taghizadeh@imenafzar.net
8 Ù…Øمود تقي‌زاده مهرجردی
10 آخرين نسخه اين Ùايل را مي‌توانيد از اين
11 آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
12 سوالاتي كه در مورد يك سکوی(پلتÙرم) خاص است در
13 اين آدرس جواب داده شده اند
14 http://www.PostgreSQL.org/docs/index.html
18 سوالات عمومي
19 1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙظ كرد؟
20 1.2) قانون كپي رايت‌ (Øقوق معنوي) در مورد
21 PostgreSQL به چه صورت است؟
22 1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
24 1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
26 1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
27 1.6) از كجا خدمات پشتيباني بگيرم؟
28 1.7) آخرين نسخه اعلام شده چيست؟
29 1.8) چه مستندات و راهنمائيهايي وجود دارند؟
30 1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
31 امكاناتي كه در اين پايگاه داده وجود ندارد
33 1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
34 1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
35 1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
37 1.13) چگونه مي‌توانم يك اشكال را به گروه
38 برنامه نويس اعلام كنم؟
39 1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
40 چه صورت است؟
41 1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
44 سوالات مربوط به استÙاده از پايگاه داده
45 2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
46 2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
47 صÙØات وب وجود دارد؟
48 2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
49 2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
50 PostgreSQL‌ ارتباط برقرار كرد؟
52 سوالات مربوط به راهبري
53 3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
54 از /usr/local/pgsql/ نصب كنم؟
55 3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
56 كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
57 3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
58 را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
59 3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
60 را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
61 3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
63 3.6) براي كارايي بالاتر و بهتر پايگاه داده من
64 چه تنظيماتي را بايد انجام دهم؟
65 3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
67 3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
68 وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
69 3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
70 3.10) چرا براي به روز كردن نسخه پايگاه داده من
71 بايد كل داده ها را dump‌ و مجدداً restore كنم؟
72 3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
74 سوالات عملياتي
75 4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
76 4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
77 يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
78 4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
79 چيزهايي كه در psql‌ وجود دارد را ببينم؟
80 4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
81 نوع داده آن را عوض كنيم؟
82 4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
83 پايگاه داده چقدر است؟
84 4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
85 داده‌‌هاي يك Ùايل متني مورد نياز است؟
86 4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
87 پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
89 4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
90 چرا از نمايه ها استÙاده نمي‌كنند؟
91 4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
92 توسط بهينه‌ساز درخواستها مشاهده كنم؟
93 4.10) نمايه R-tree‌ چيست؟
94 4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
96 4.12) چگونه از عبارات منظم براي جستجو استÙاده
97 كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
98 نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
99 از نمايه استÙاده كنم؟
100 4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
101 كه يك Ùيلد NULL‌ است؟
102 4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
103 4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
104 اÙزايشي ايجاد كنم؟
105 4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
107 4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
108 شرایط race برای سایر کاربران می شوند؟
109 4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
110 شده مجدداً استÙاده نمی شود؟ چرا بین اعداد
111 سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟
112 4.16) OID و TID چه هستند؟
113 4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
114 استÙاده مي‌شود چيست؟
115 4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
117 4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
118 PostgreSQLيي كه من استÙاده مي‌كنم چيست؟
119 4.20) چرا در Øین اجرای عملیات روی large-objectها
120 خطای "invalid large obj descriptor"به وجود می آید؟
121 4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
122 جاري را به عنوان مقدار پيش‌Ùرض داشته باشد؟
123 4.22) چرا زير درخواستهايي كه از IN استÙاده
124 مي‌كنند كند هستند؟
125 4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
127 4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
128 داده توليد كرد؟
129 4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
130 يا ستون باشد؟
131 4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
132 جداول موقت را ايجاد يا Øذ٠كرد؟
133 4.27) چه گزينه‌هايي براي تكرار (replication) وجود
135 4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
137 توسعه PostgreSQL
138 5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
139 اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
140 5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
141 جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
143 5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
144 كه خروجي آن يك ‌tuple (چند تايي) باشد؟
145 5.4) من يك Ùايل منبع را عوض كرده ام چرا در
146 عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
151 سوالات عمومي
152 1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙظ كرد؟
153 PostgreSQL به صورت Post-Gres-Q-L‌ تلÙظ مي‌شود. يك Ùايل
154 صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
155 كساني كه مايلند تلÙظ صØÙŠØ Ø±Ø§ بشنوند وجود
157 PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
158 توسعه داده شده است (هنوز هم بعضي مواقع براي
159 سادگي به آن Postgres Ú¯Ùته مي‌شود) كه يك نمونه
160 تØقيقاتي از پايگاه داده‌هاي نسل بعد است.
161 PostgreSQL همان الگوي داده قوي و انواع داده را
162 ØÙظ كرده است ولي زبان PostQuel را با يك
163 زيرمجموعه پيشرÙته از SQL جايگزين كرده است.
164 PostgreSQL متن باز بوده و متن كامل آن در دسترس
166 PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در
167 گروه پست الكترونيك برنامه‌نويسان PostgreSQL
168 عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي
169 در Øال Øاضر Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org
170 مي‌باشد. (براي ديدن Ù†Øوه ملØÙ‚ شدن به اين تيم
171 قسمت 1.6 را ببينيد). اين تيم در Øاضر مسئوليت
172 تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را
173 بر عهده دارد. اين يك پروژه گروهي است Ùˆ تØت
174 كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در
175 مورد اين تيم به آدرس
176 http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد.
177 اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به
178 وجود آمد. اÙراد بسياري در توسعه Ùˆ رÙع اشكال Ùˆ
179 انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
180 PostgreSQL از روي آن نوشته شده است، توسط تعداد
181 زيادي دانشجوي كارشناسي ارشدو دانشجوي
182 كارشناسي Ùˆ تيم برنامه‌نويسي كه تØت نظر
183 پروÙسور Michael Stonebrake در دانشگاه
184 بركلي،‌كاليÙرنيا كار مي‌كرده‌اند نوشته
186 نام اصلي نرم اÙزار در دانشگاه بركلي Postgres‌
187 بود. در سال 1995 بعد از اضاÙÙ‡ شدن SQL نام آن به
188 Postgres95 تغيير داده شد. در سال 1996 نام آن به
189 PostgreSQL تغيير داده شد.
190 1.2) قوانين كپي رايت در مورد PostgreSQL به چه صورت
192 PostgreSQL تØت قانون كپي رايت زير قرار دارد:
193 PostgreSQL Data Base Management System
194 Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions
195 Copyright (c) 1994-6 Regents of the University of California
196 Permission to use, copy, modify, and distribute this software and its
197 documentation for any purpose, without fee, and without a written agreement is
198 hereby granted, provided that the above copyright notice and this paragraph and
199 the following two paragraphs appear in all copies.
200 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
201 DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
202 PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
203 THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
204 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
205 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
206 PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
207 THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
208 UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
209 قانون بالا ليسانس BSD كه يك ليسانس كلاسيك
210 براي متن‌هاي باز است مي‌باشد. هيچ Ù…Øدوديتي
211 در مورد Ù†Øوه استÙاده از متن در آن ديده
212 نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
213 تغيير آن نداريم.
214 1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
216 در Øالت كلي PostgreSQL روي هر پلتÙرم (سكوي) سازگار
217 با يونيكس اجرا مي‌شود. ليست پلتÙرمهايي كه
218 تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
219 درقسمت دستورالعملهاي نصب آمده است.
220 1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
223 مي‌توان psql, كتابخانه libpq و ساير واسطها و
224 برنامه‌هاي كاربردي را طوري كامپيل كرد كه
225 روي Ù…Øيطهاي ويندوز نيز اجرا شوند. در اين
226 Øالت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
227 شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙرم
228 لينوكس در Øال اجراست ارتباط برقرار
229 مي‌كند.يك Ùايل win32.mak همراه با كدهاي PostgreSQL
230 وجود دارد كه براي كامپيل كردن كتابخانه libpq و
231 برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
232 ارتباط به صورت ODBC‌ را نيز دارد.
234 با استÙاده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان
235 پايگاه داده را روي ويندوز NT و يا Win2K اجرا
236 كرد.براي ديدن اطلاعات بيشتر Ùايل pgsql/doc/FAQ_MSWIN
237 ‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
238 ببينيد Ùˆ يا اينكه به اين صÙØÙ‡
239 http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد.
240 در Øال Øاضر يك عمليات انتقال PostgreSQL به روي
241 سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت
242 اين پروژه به سايت‌هاي
243 http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ
244 http://techdocs.postgresql.org/guides/Windows مراجعه كنيد.
245 همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز
246 در Øال انجام است كه در سايت http://forge.novell.com
247 مي‌توانيد اطلاعات بيشتر را ببينيد.
248 1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
249 PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub
250 مي‌توانيد بگيريد. در صÙØÙ‡ اصلي سايت ليست
251 ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
252 آنها بگيريد آمده است.
253 1.6) از كجا خدمات پشتيباني بگيرم؟
254 گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين
255 گروه براي بØØ« در مورد موضوعات مختل٠در زمينه
256 PostgreSQL است. براي عضو شدن در اين گروه پستي يك
257 نامه الكترونيكي به آدرس گروه با Ù…Øتوياتی كه
258 در ادامه آمده است ارسال كنيد. در قسمت Subject
259 چيزي ننويسيد.
262 آدرس گروه: pgsql-general-request@PostgreSQL.org
263 همچنين يك گروه پستي هم به صورت ارسال چكيده
264 پيامها وجود دارد. براي عضو شدن در اين گروه يك
265 نامه با Ù…Øتويات زير به این آدرس ارسال كنيد.
266 pgsql-general-digest-request@PostgreSQL.org
269 در اين گروه هر موقع Øجم نامه‌ها به 30
270 كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
271 گروه پستي بررسي اÙشكالات هم وجود دارد. براي
272 عضو شدن در اين گروه يك نامه با Ù…Øتويات زير به
273 pgsql-bugs-request@PostgreSQL.org ارسال كنيد.
276 گروه پستي مخصوص توسعه دهندگان
277 (برنامه‌نويسان) نيز وجوددارد. براي عضويت در
278 اين گروه يك نامه به آدرس زير با Ù…Øتويات مشخص
279 شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org
282 گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
283 دارد كه مي‌توانيد در سايت http://www.postgresql.org
285 همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
286 وجود دارد. شما مي‌توانيد از Ùرمان يونيكسي irc
287 -c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
288 irc.freenode.net استÙاده كنيد.
289 ليست شركتهايي كه از طريق آنها مي‌توانيد
290 خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙت
291 كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
293 1.7) آخرين نسخه اعلام شده چيست؟
294 آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
295 هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
297 1.8) چه مستندات و راهنمائيهايي وجود دارند؟
298 چندين كتابچه Ùˆ صÙØات راهنما Ùˆ مثالهاي كوچك
299 همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
300 دارد. براي ديدن صÙØات راهنما مي‌توانيد به
301 سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
302 دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
303 http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
304 وجود دارد. ليستي از كتابهايي كه قابل خريد
305 است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
306 وجود دارد. همچنين ليستي از مقالات Ùني در
307 مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
309 برنامه psql يك دستور d\ دارد كه اطلاعاتي در
310 مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها
311 و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
312 ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
313 1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
314 امكاناتي كه در اين پايگاه داده وجود ندارد
316 PostgreSQL يك زير مجموعه پيشرÙته از SQL-92 را
317 پشتيباني مي‌كند. در ليست TODO اÙشكالات
318 شناخته شده يا امكاناتي كه وجود ندارد و يا
319 برنامه‌‌هاي آينده آمده است.
320 1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
321 كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
322 ‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
323 http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي
324 خيلي خوب هم در سايت‌هاي
325 http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ
326 http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ
327 http://sqlcourse.com در مورد SQL وجود دارد.
328 كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
329 استÙاده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
330 ويرايش دوم" در سايت
331 http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
332 تعداد زيادي از كاربران كتاب The Practical SQL را
333 ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
334 انتشارات McGraw-Hill مي‌باشد.
335 1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
336 خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
337 مشكلي ندارد.
338 1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
340 ابتدا،‌آخرين سورس را دونلود كرده و مستندات
341 مربوط به برنامه‌نويسي PostgreSQL را در سايت
342 مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
343 pgsql-hackers عضو شويد. در مرØله آخر وصله‌هاي با
344 كيÙيت بالا را به pgsql-patches ارسال كنيد.
345 تعداد زيادي از برنامه‌نويسان وجود دارند كه
346 امتياز انجام تغييرات در cvs‌ را دارند. هر
347 كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت
348 بالا به گروه ارسال كرده‌اند كه اعتماد
349 گردانندگان PostgreSQL را به دست آورده‌اند.
350 1.13) چگونه مي‌توانم يك اÙشكال را به گروه
351 برنامه نويس اعلام كنم؟
352 لطÙاً صÙØÙ‡ مربوط به اÙشكالات PostgreSQL را در
353 سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
354 اين سايت Ù†Øوه گزارش Ùˆ ارسال يك اشكال توضيØ
355 داده شده است.
356 همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
357 يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
358 بازديد كنيد.
359 1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
360 چه صورت است؟
361 راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه
362 نرم‌اÙزارها وجود دارد كه عبارتند از
363 امكانات، كارايي، قابليت اعتماد، پشتيباني و
366 PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
367 پايگاه داده تجاري بزرگ نظير transactions, subselets,
368 triggers, views, foreign key referential integrity Ùˆ sophisticated
369 locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
370 دارد كه پايگاههاي داده ديگر آن را ندارند
371 نظير user-defined types‌و Inheritance‌و rules‌و multi-version
375 كارايي PostgreSQL در Øد بقيه سيستم‌هاي
376 تجاري و متن باز است. در بعضي موارد سريعتر و
377 در بعضي موارد از آنها كندتر است. در مقايسه
378 با MySQL براي كاربران بيشتر و درخواست‌هاي
379 پيچيده و بار زياد خواندن/نوشتن سريعتر است.
380 در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
381 البته MySQL خيلي از امكانات PostgreSQL كه در بالا
382 به آن اشاره شد را ندارد. هد٠اصلي ما امكانات
383 و قابليت اعتماد بالاست در ضمن آنكه تلاش
384 مي‌كنيم تا كارايي آن نيز بهبود يابد. در
385 آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
386 جالب بين MySQL و PostgreSQL وجود دارد. از طر٠ديگر
387 MySQL‌ يك شركت است كه Ù…Øصول خود را به صورت متن
388 باز ارائه مي‌كند ولي براي نرم‌اÙزار غير
389 متن باز خود اØتياج به ليسانس تجاري دارد بر
390 خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند.
392 قابليت اطمينان
393 ما Ùكر مي‌كنيم كه يك سيستم پايگاه
394 داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
395 تمام تلاشمان را براي ارائه كدهاي پايداري
396 كه به خوبي تست شده باشند Ùˆ كمترين اÙشكالات
397 را داشته باشند مي‌كنيم. هر نسخه جديدي كه
398 ارائه مي‌شود Øداقل يك ماه را در مرØله تست
399 بتا مي‌گذراند. ما بر اين باور هستيم كه
400 قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
401 سيستم‌هاي پايگاه داده قابل توجه است و
402 نسخه‌هايي كه تاكنون ارائه شده است نشان
403 مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
404 Ù…Øكم Ùˆ مطمئن را كه آماده بهره‌برداري است
407 گروههاي پستي ما امكان ارتباط و تماس به
408 گروه بزرگي از برنامه نويسان و كاربران را
409 مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
410 ديگران كمك كنند. دسترسي مستقيم به
411 برنامه‌نويسان و گروههاي كاربران و
412 راهنماها و كداصلي باعث مي‌شود كه
413 پشتيباني PostgreSQL نسبت به ساير پايگاههاي
414 داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
415 ارائه خدمات پشتيباني به صورت تجاري نيز
416 وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
417 section 1.6 مراجعه كنيد.
419 هم براي استÙاده تجاري Ùˆ هم غير تجاري هيچ
420 هزينه‌اي نبايد پرداخت شود. هيچ Ù…Øدوديتي
421 براي انجام تغييرات در PostgreSQL توسط استÙاده
422 كنندگان وجود ندارد به جز مواردي كه در
423 ليسانس BSD به آن اشاره شده است.
424 1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
426 PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
427 كه آن را مديون Marc Fournier‌ است كه اين ساختار را
428 ايجاد كرده است.
429 كيÙيت يك ساختار براي يك پروژه متن باز بسيار
430 اهميت دارد. يك ساختار خوب مي‌تواند مانع از
431 Øوادثي شود كه در Øركت روبه‌جلوي پروژه خللي
432 وارد مي‌كنند.
433 البته اين ساختار تشكيلاتي ارزان نيست.
434 هزينه‌هاي ثابت ماهانه و روزمره براي
435 نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر
436 شما يا شركت شما مايل است كه از نظر مالي به
437 اين Øركت كمك كند لطÙاً به سايت
438 http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
440 هر چند در صÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
441 است ولي مشاركت عمدتاً براي پشتيباني از
442 پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
443 اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
444 مشخص شده ارسال كنيد.
445 اگر يك استÙاده موÙÙ‚ از PostgreSQL سراغ داريد
446 لطÙاً آن را به سايت http://advocacy.postgresql.org گزارش
451 سوالات مربوط به استÙاده از پايگاه داده
452 2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
453 دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
454 PostgreSQL‌ وجود دارد.
455 براي گرÙتن psqlODBC به سايت
456 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
458 OpenLlink را از اين سايت http://www.openlinksw.com
459 مي‌توانيد بگيريد. اين درايور با
460 نرم‌اÙزارهاي مختل٠ODBC كار مي‌كند بنابراين
461 شما قادر خواهيد بود با استÙاده از OpenLink روي
462 اكثر سكو‌هايي كه نرم‌اÙزارODBC‌دارند بدون
463 مشكل به PostgreSQL نيز متصل شويد.
464 اين Ù…Øصول به كساني كه اØتياج به خدمات
465 پشتيباني تجاري دارند Ùروخته مي‌شود. ولي
466 نسخه آزاد اين نرم‌اÙزار هميشه در درسترس
467 مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
468 را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد.
469 2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
470 صÙØات وب وجود دارد؟
471 در سايت http://www.webreview.com براي استÙاده از
472 PostgreSQL‌ در صÙØات وب راهنماييهاي خوبي وجود
474 براي تركيب Ùˆ استÙاده در صÙØات وب زبان PHP‌ يك
475 واسط بسيار مناسب است. اطلاعات بيشتر راجع به
476 PHP‌در سايت http://www.php.net وجود دارد.
477 مثالهايي نيز با استÙاده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl
479 2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
480 چند نرم اÙزار گراÙيكي براي PostgreSQL‌ وجود دارد
481 كه شامل pgAccess درسايت http://www.pgaccess.org و pgAdmin III در
482 سايت http://www.pgadmin.org و RHDB Admin در سايت
483 http://sources.redhat.com/rhdb و Rekall در سايت
484 http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك
485 phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود
486 دارد كه يك واسط وبي براي مديريت PostgreSQL
488 براي ديدن اطلاعات بيشتر راجع به
489 نرم‌اÙزارهاي گراÙيكي براي PostgreSQL به آدرس
490 http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
491 2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
492 PostgreSQL‌ ارتباط برقرار كرد؟
493 بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
494 PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
495 PostgreSQL تعدادي از واسطهاي مورد نياز براي
496 ارتباط با پايگاه داده از طريق زبانهاي مختلÙ
497 آمده است كه در زير ليست آنها را مشاهده
504 واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
505 Drivers/Interfaces وجود دارد.
509 سوالات مديريتي
510 3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
511 از /usr/local/pgsql/ نصب كنم؟
512 موقع اجراي دستور configure از گزينه prefix-- استÙاده
514 3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
515 كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
516 به دلايل مختل٠ممكن است اين اتÙاق بيÙتد. اما
517 در قدم اول شما مطمئن شويد كه كه امكانات
518 اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
519 براي اجرا شدن نياز به استÙاده از امكانات
520 ØاÙظه مشترك Ùˆ سماÙورها دارد.
521 3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
522 را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
523 اØتمالاً‌ قسمت ايجاد ØاÙظه مشترك در كرنل به
524 درستي تنظيم نشده است Ùˆ يا اينكه بايد Ùضاي
525 ØاÙظه اشتراكي در كرنل را زياد كرد. ميزان
526 دقيق ØاÙظه مشترك مورد نياز بسته به معماري Ùˆ
527 Ù†Øوه استÙاده از باÙرها توسط برنامه postmaster
528 دارد. براي بيشتر سيستم‌ها كه با تنظيمات
529 پيش‌Ùرض كار مي‌كنند مقدار اين ØاÙظه Øدود 1
530 مگابايت است. براي ديدن اطلاعات بيشتر راجع به
531 ØاÙظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide
532 مراجعه كنيد.
533 3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
534 را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
535 اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
536 device باشد به اين معني است كه تعداد سماÙورهاي
537 تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر
538 Ùرايندي كه در backend اجرا مي‌شود به يك سماÙور
539 نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
540 است كه postmaster را با اعمال Ù…Øدوديت روي تعداد
541 Ùرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
542 براي اينكار از گزينه N- و يك عدد كمتر از 32
543 استÙاده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
544 پارامترهاي SEMMNS, SEMMNI كرنل را اÙزايش دهيم.
545 در زمان دسترسي خيلي زياد به پايگاه داده، ‌
546 سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن
548 اگر پيغام خطا چيز ديگري باشد اØتمالاً به
549 دليل آن است كه كرنل از سماÙورها پشتيباني
550 نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
551 مديريتي PostgreSQL را مطالعه كنيد.
552 3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
554 به صورت پيش Ùرض Ùقط از ماشيني كه PostgreSQL روي آن
555 در Øال اجراست مي‌توان با استÙاده از
556 سوكت‌هاي يونيكسي به آن متصل شد. ساير
557 ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
558 آنكه گزينه tcp_sockets در Ùايل postgresql.conf Ùعال شده Ùˆ
559 همچنين با Ø§ØµÙ„Ø§Ø Ùايل PGDATA/ph_hba.conf هويت‌شناسي
560 مبتني بر ميزبان نيز Ùعال شود. با اين كار
561 مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
562 3.6) براي كارايي بالاتر و بهتر پايگاه داده من
563 چه تنظيماتي را بايد انجام دهم؟
564 به طور Øتم استÙاده از انديس‌ها باعث بالا
565 رÙتن سرعت پاسخ‌گويي به درخواست‌ها خواهد
566 شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†Øوه
567 پردازش يك دستور توسط PostgreSQL را مي‌دهد.
568 اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
569 آنها را با قرار دادن در يك Ùايل با دستور COPY‌
570 اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
571 است. Øتي‌الامكان سعي كنيد از تراكنشها
572 استÙاده نكنيد. تراكنشها مجموعه دستوراتي
573 هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك
574 دستور به صورت عادي اجرا شود PostgreSQL خود آن
575 دستور را به صورت يك تراكنش مستقل نگاه كرده و
576 اجرا مي‌كند. موقعی كه تغييرات زيادي در
577 پايگاه داده انجام مي‌شود انديسهاي قبلي را
578 ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد.
579 استÙاده از گزينه o -F- در Ùرمان postmaster باعث غير
580 Ùعال كردن ()fsync مي‌شود. اين دستور بعد از هر
581 تراكنش اطلاعات را روي هاردديسك منتقل
583 براي اÙزايش تعداد باÙرهاي ØاÙظه اشتراكي از
584 گزينه B- به همراه Ùرمان postmaster استÙاده كنيد.
585 توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
586 است postmaster اصلاً‌ اجرا نشود. هر باÙر 8 كيلو
587 بايت ØاÙظه نياز دارد Ùˆ تعداد باÙرها به طور
588 پيش Ùرض 64 است.
589 همچنين مي‌توان با گزينه S- ميزان ØاÙظه‌اي
590 كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
591 استÙاده مي‌شود را اÙزايش داد. مقدار پيش Ùرض
592 512 كيلو بايت است.
593 استÙاده از دستور CLUSTER نيز براي بالا بردن
594 كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
595 بيشتري در اين زمينه به شما مي‌دهد.
596 3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
598 PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن
599 وضعيت خود دارد كه براي اشكال زدايي مي‌توان
600 از آنها استÙاده كرد.
601 با استÙاده از گزينه enable-assert-- تعداد زيادي
602 ()assert براي مونيتور كردن و توق٠برنامه در صورت
603 بروز خطاهاي ناخواسته Ùعال مي‌شود.
604 هم Postmaster و هم postgres گزينه‌هاي زيادي براي
605 اشكال زدايي دارند. موقعي كه postmaster را اجرا
606 مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ùايل log
609 ./bin/postmaster >server.log 2>&1 &
610 اين كار يك Ùايل log در بالاترين شاخه PostgreSQL‌
611 ايجاد مي‌كند. اين Ùايل Øاوي اطلاعات Ù…Ùيدي
612 در مورد مسائل و خطاهايي است كه براي سرور
613 اتÙاق اÙتاده است. براي ديدن جزئيات بيشتر
614 مي‌توان از d- به همراه Ùرمان postmaster‌ استÙاده
615 كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
616 دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ùايل نوشته
617 مي‌شود. با بالابردن اين عدد Øجم اطلاعات
618 توليد شده در LogÙايل نيز اÙزايش مي‌يابد.
619 اگر postmaster در Øال اجرا نباشد، مي‌توانيم postgres
620 را به طور مستقيم از خط Ùرمان اجرا كرده Ùˆ
621 دستورات SQL را به آن بدهيم. اين كار Ùقط براي
622 اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
623 اين Øالت يك دستور با كاراكتر newline خاتمه پيدا
624 مي‌كند و نه با ;. اگر postmaster را با امكانات
625 اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
626 استÙاده از يك برنامه اشكال‌ياب اجراي
627 برنامه را مونيتور كنيد.
628 اگر postmaster در Øال اجرا باشد با دستور psql
629 مي‌توان به postgres متصل شد. با پيدا كردن PID
630 Ùرايند postgres كه psql به آن متصل شده است مي‌توان
631 آن را مونيتور كرد. براي اينكار بايد يك
632 برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
633 بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ
634 است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
635 مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
636 اين Ùاصله شما مي‌توانيد برنامه اشكال‌ياب
637 را به آن متصل كرده و با قرار دادن يك نقطه
638 توق٠روند اجراي آن را مونيتور كنيد.
639 postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
640 پيدا كردن اشكالات بسيار مناسب هستند.
641 شما مي‌توانيد postgreSQL را با امكانات profiling
642 كامپيل كنيد. اين كار باعث مي‌شود كه زمان
643 اجراي دقيق هر تابع در برنامه مشخص شود.
644 خروجي‌هاي توليد شده در اين Øالت در Ùايل
645 DLINUX_PROFILE. ريخته مي‌شود.
646 3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
647 وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
648 شما بايد Øداكثر تعداد Ùرايندهاي همزمان
649 postmaster را اÙزايش دهيد. مقدار پيش Ùرض 32 است.
650 براي اÙزايش آن مي‌توان از گزينه N- استÙاده
651 كرد Ùˆ يا Ùايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
652 توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
653 باشد بايد مقدار B- را نيز اÙزايش دهيم. اين
654 مقدار بايد Øداقل دو برابر مقدار N-‌ باشد.
655 براي اعداد خيلي بالا بايد بعضي از
656 پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
657 پارامترهايي نظير Øداكثر اندازه ØاÙظه
658 اشتراكي SHMMAX ØŒ Øداكثر تعداد سماÙورها SEMMNI‌ Ùˆ
659 SEMMNS ØŒ Øداكثر تعداد Ùرايندها NPROCØŒ Øداكثر
660 Ùرايندهاي يك كاربر MAXUPRC Ùˆ Øداكثر Ùايلهاي باز
661 NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
662 همزمان postgreSQL Ù…Øدود است آن است كه نيازهاي
663 PostgreSQL بيش از منابع موجود سيستم نباشد.
664 3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
665 دراين شاخه Ùايلهاي موقتي قرار دارد كه با
666 اجراي درخواستها به وجود آمده است. به عنوان
667 مثال اگر براي اجراي دستور order by نياز به انجام
668 مرتب سازي باشد Ùˆ در صورتي كه ØاÙظه مشخص شده
669 با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك
670 Ùايل موقت در اين شاخه ايجاد مي‌كند تا عمل
671 مرتب سازي را انجام دهد.
672 Ùايلهاي موقت معمولاً به صورت اتوماتيك پاك
673 مي‌شود اما اگر postgreSQL در Øين مرتب سازي crash‌
674 كند آن Ùايلها باقي مي‌مانند. با stop Ùˆ start كردن
675 برنامه postmaster اين Ùايلها پاك مي‌شوند.
676 3.10) چرا براي به روز كردن نسخه پايگاه داده من
677 بايد كل داده ها را dump‌ و مجدداً restore كنم؟
678 تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
679 كه Ùقط minor آنها متÙاوت است Ùقط تغييرات كوچكي
680 اعمال مي‌كنند؛ بنابراين براي به روز كردن از
681 نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
682 نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
683 ساختار داخلي جداول Ùˆ Ùايلهاي داده تغيير
684 مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
685 براي انتقال داده‌هاي موجود در پايگاه داده
686 در اين Øالت بايد ‌از dump Ùˆ restore استÙاده كرد.
687 در نسخه‌هايي كه ساختار روي ديسك تغييري
688 نمي‌كند مي توان از برنامه pg_upgrade براي به روز
689 كردن پايگاه داده استÙاده كرد بدون اينكه
690 نيازي به استÙاده از dump Ùˆ restore باشد. در
691 يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
692 شده است كه آيا برنامه pg_upgrade براي اين توزيع
693 وجود دارد يا خير.
694 3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
696 چون اكثر سخت‌اÙزارهاي PC سازگار هستند مردم
697 Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در
698 Øاليكه اينطور نيست. استÙاده از هاردهاي SCSI Ùˆ
699 ØاÙظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا
700 نسبت به سخت اÙزارهاي ارزانتر نتايج بهتري از
701 نظر كارايي و پايداري سيستم بهمراه خواهد
702 داشت. PostgreSQL روي بيشتر سخت اÙزارها اجرا
703 مي‌شود اما اگر كارايي Ùˆ اطمينان Ùاكتورهاي
704 مهمي هستند بايد سخت اÙزار مناسب استÙاده شود.
705 در گروههاي پستي در مورد سخت اÙزار مناسب Ùˆ
706 انتخاب آن بØØ« شده است.
710 سوالات عملياتي
711 4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
712 راهنماي دستور DECLARE‌ را مطالعه كنيد.
713 4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
714 يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
715 راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
716 در واقع كل درخواست بايد بررسي و ارزيابي شود
717 Øتي اگر شما Ùقط چند ردي٠اول را بخواهيد. براي
718 مثال درخواست ORDER BY را در نظر بگيريد. اگر
719 انديس يا نمايه‌اي براي ORDER BY وجود داشته
720 باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر
721 اول درخواستي را ارزيابي كند و يا اينكه كل
722 درخواست پردازش شود تا تعداد رديÙ‌هاي
723 درخواستي توليد شود.
724 براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل
730 4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
731 چيزهايي كه در psql‌ وجود دارد را ببينم؟
732 براي ديدن ليست جداول دستور dt\ را در برنامه
733 psql‌ استÙاده كنيد. براي ديدن ليست كامل
734 Ùرمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
735 برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
736 ‌قرار دارد. اين Ùايل Øاوي Ùرامين SQLيي است كه
737 خروجي را براي دستوراتي كه با \‌در psql شروع
738 مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
739 گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
740 از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
741 PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
742 با استÙاده از آن اطلاعات داخلي پايگاه داده
743 را استخراج كرد.
744 4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
745 نوع داده آن را عوض كنيم؟
746 Øذ٠يك ستون در توزيع 7.3 با استÙاده از دستور
747 ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي
748 قبلي به روش زير عمل كنيد:
750 LOCK TABLE old_table;
751 SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را Øذ٠كنيد را در اينجا بياوريد
754 DROP TABLE old_table;
755 ALTER TABLE new_table RENAME TO old_table;
757 براي عوض كردن نوع داده يك ستون به روش زير عمل
760 ALTER TABLE tab ADD COLUMN new_col new_data_type;
761 UPDATE tab SET new_col = CAST(old_col AS new_data_type);
762 ALTER TABLE tab DROP COLUMN old_col;
764 4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
765 پايگاه داده چقدر است؟
766 Ù…Øدوديتها عبارتند از:
767 Øداكثر اندازه پايگاه داده نامØدود (تا 32 ترابايت وجود دارد)
768 Øداكثر اندازه يك جدول 32 ترابايت
769 Øداكثر ا ندازه يك ردي٠1.6 ترابايت
770 Øداكثر اندازه يك Ùيلد 1 گيگا بايت
771 Øداكثر اندازه رديÙهاي يك جدول نا Ù…Øدود
772 Øداكثر ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
773 Øداكثر انديسهاي يك جدول نا Ù…Øدود
774 البته در Øالت نامØدود نيز ما Ù…Øدود به Øجم
775 هاردديسك Ùˆ Ùضاي ØاÙظه خواهيم بود. در صورتي
776 Ú©Ù‡ مقادير مشخص شده به عنوان نامØدود به صورت
777 غير معمولي بزرك شوند كارايي سيستم كاهش
779 براي ذخيره كردن جداول با اندازه خيلي بزرگ
780 نيازي نيست كه سيستم عامل امكان ايجاد
781 Ùايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
782 بزرگ به صورت Ùايلهايي به Øجم يك گيگا بايت
783 نگاهداري مي‌شوند.
784 اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
785 قرار دهيم Øداكثر اندازه جدول Ùˆ Øداكثر تعداد
786 ستونها 4 برابر خواهد شد.
787 4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
788 داده‌‌هاي يك Ùايل متني مورد نياز است؟
789 يك پايگاه داده PostgreSQL‌ تا 5 برابر Ùضايي روي
790 هاردديسك براي نگاهداري يك Ùايل متني نياز
792 به عنوان مثال يك Ùايل با 100000 خط را در نظر
793 بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
794 متني آمده است. Ùرض كنيد كه رشته متني به طور
795 متوسط 20 بايت باشد. اندازه Ùايل برابر 2.8 مگا
796 بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
797 Ùايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
798 32 bytes: اندازه سرايند هر خط به طور تقريبي
799 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
800 + 4 bytes: اشاره گر روي صÙØÙ‡ به يك چندتايي
801 ----------------------------------------
802 60 bytes در هر رديÙ
804 اندازه صÙØات داده در PostgreSQL برابر با 8 كيلو بايت است
805 8192 تعداد بايت‌ها در هر صÙØÙ‡
806 ------------------- = 136 تعداد رديÙ‌ها در يك صÙØÙ‡ پايگاه داده
807 60 تعداد بايت‌هاي هر رديÙ
809 100000 تعداد رديÙها
810 -------------------- = تعدادصÙØات پايگاه داده
811 128 تعداد رديÙها در هر صÙØÙ‡
813 735 تعداد صÙØات * 8192 تعداد بايت‌هاي هر صÙØÙ‡ = 6,021,120 مگا بايت
814 سربار انديسها يا نمايه‌ها از اين مقدار كمتر
815 است ولي چون شامل خود داده‌ها هم هست ممکن است
816 اندازه آنها هم بزرگ شود.
817 NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
818 Ùضاي بسيار كمي را اشغال مي‌كنند.
819 4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
820 پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
822 psql تعداد زيادي دستور دارد كه با \ شروع
823 مي‌شوند و اين اطلاعات را در اختيار ما قرار
824 مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
825 كنيد. همچنين جداول سيستمي كه با نام آنها pg_
826 ‌شروع مي‌شود نيز اين اطلاعات را در خود
827 دارند. اجراي برنامه psql با گزينه l- نيز باعث
828 نشان دادن ليست تمام پايگاههاي داده مي‌شود.
829 همچنين Ùايل pgsql/src/tutorial/syscat.source نيز Ùرمانهاي
830 SELECT كه با استÙاده از آن مي‌توان اطلاعات
831 پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
832 4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
833 چرا از نمايه ها استÙاده نمي‌كنند؟
834 به طور معمول براي درخواستها از نمايه‌ها
835 استÙاده نمي‌شود. تنها در صورتي از نمايه‌ها
836 استÙاده مي‌شود كه اندازه جدول از يك اندازه
837 Øداقل بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از
838 رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين
839 كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك
840 كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
841 از خواندن مستقيم جدول يا خواندن ترتيبي
842 ركوردها كندتر باشد.
843 براي تعيين اينكه از نمايه استÙاده شود يا
844 خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
845 جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
846 ANALYZE به دست مي‌آيد. با استÙاده از اين
847 اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك
848 جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
849 تعيين كند كه آيا از نمايه استÙاده شود يا خير.
850 اطلاعات آماري همچنين براي تعيين ترتيب الØاق
851 Ùˆ روشهاي الØاق به صورت بهينه نيز كاربر دارد.
852 جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
853 همزمان با تغيير داده‌هاي جدول انجام شود.
854 نمايه‌ها به طور معمول همراه با دستور ORDER BY
855 به كار برده نمي‌شوند. براي يك جدول بزرگ يك
856 پيمايش ترتيبي همراه با دستور مرتب سازي از به
857 كار بردن نمايه‌ها سريعتر خواهد بود.
858 اما اگر همراه با ORDER BY‌ از LIMIT استÙاده شود
859 اغلب از نمايه‌ها استÙاده مي‌شود چون Ùقط
860 قسمتي از جدول استÙاده مي‌شود. در Øقيقت هر
861 چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙاده
862 نمي‌كنند ولي مي‌توانيم با استÙاده از دستور
863 زير با استÙاده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
864 LIMIT‌ آنها را به دست آوريم.
867 ORDER BY col [ DESC ]
869 اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در
870 انتخاب پيمايش ترتيبي اشتباه كرده است با
871 دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
872 استÙاده از نمايه‌ها باعث اÙزايش سرعت
873 درخواست‌ها خواهد شد.
874 استÙاده از نمايه‌ها هنگامي كه از علائم ويژه
875 نظير LIKE Ùˆ ~ استÙاده مي‌كنيد Ùقط در بعضي
876 شرايط خاصي كه در اينجا ذكر شده است ممكن است:
877 ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
878 باشد براي مثال:
879 دستورات LIKE نبايد با علامت % شروع شوند
880 الگوهاي منظمي كه با ~ مي‌ايد Øتماً بايد با
881 علامت ^ شروع شود
882 رشته جستجو نبايد با يك مجموعه از
883 كاراكتر‌ها مثل [a-e] شروع شود
884 جستجوهاي غيرØساس به متن مثل ILIKE‌ Ùˆ *~ از
885 نمايه‌ها استÙاده نمي‌كنند. در عوض از
886 توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
887 استÙاده مي‌كنند.
888 مقدار پيش Ùرض locale‌ بايد در initdb استÙاده شود.
890 4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
891 توسط بهينه‌ساز درخواستها مشاهده كنم؟
892 راهنماي دستور EXPLAIN را نگاه كنيد.
893 4.10) نمايه R-tree‌ چيست؟
894 از نمايه R-Tree براي انديس كردن داده‌هاي
895 Ùاصله‌اي استÙاده مي‌شود. يك نمايه hash
896 نمي‌توانند جستجوهاي Ù…Øدوده‌اي را انجام
897 دهد. نمايه "B-tree" نيز براي انجام جستجوي
898 Ù…Øدوده‌اي در يك جهت قابل استÙاده است. اما
899 R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
900 پشتيباني كند. براي مثال استÙاده اگر از نمايه
901 R-tree‌ براي گونه Point استÙاده شود سرعت
902 درخواست‌هايي نظير "select all points within a bounding
903 rectangle" به مراتب اÙزايش مي‌يابد.
904 مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
905 Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching."
906 Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
907 R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
908 پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
909 بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
910 توسعه R-tree‌ نياز به كار بيشتري دارد.
911 4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
913 استÙاده از GEQO سرعت بهينه سازي درخواست را
914 هنگاميكه تعداد زيادي جدول را با استÙاده از
915 الگوريتم ژنتيك الØاق مي‌كنيم اÙزايش
917 4.12) چگونه از عبارات منظم براي جستجو استÙاده
918 كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
919 نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
920 از نمايه استÙاده كنم؟
921 براي جستجوي عبارت منظم از عملگر ~‌ استÙاده
922 مي‌كنيم. براي جستجوي غير Øساس به متن از
923 عملگر *~ Ùˆ يا ILIKE‌ استÙاده مي‌كنيم.
924 روش ديگر انجام جستجوي غير Øساس به متن در زير
925 نشان داده شده است.
928 WHERE lower(col) = 'abc';
929 اين از نمايه‌هاي استاندارد استÙاده
930 نمي‌كند. ولي شما مي توانيد با دستور زير يك
931 نمايه ايجاد كنيد Ùˆ از آن استÙاده كنيد.
932 CREATE INDEX tabindex ON tab (lower(col));
933 4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
934 كه يك Ùيلد NULL‌ است؟
935 با استÙاده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
936 NULL بودن يك Ùيلد را تست كنيم.
937 4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
938 Type Internal Name Notes
939 --------------------------------------------------
940 VARCHAR(n) varchar اندازه، Øداكثر طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡
941 CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙاده مي‌شود
942 TEXT text Øداكثر طول را مشخص نمي‌كند
943 BYTEA bytea آرايه‌اي از بايت با طول متغير
944 "char" char يك كاراكتر
945 نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
946 پيغامهاي خطا مي‌توان ديد.
947 چهار گونه اول همگي از نوع varlena هستند (4 بايت
948 اول روي ديسك طول را مشخص مي‌كند كه به دنبال
949 آن داده‌ها قرار دارند.)‌بنابراين Ùضاي
950 واقعي استÙاده شده روي ديسك از اندازه تعريÙ
951 شده بيشتر است. اما اين گونه‌ها را مي‌توان
952 Ùشرده كرد كه اينكار باعث مي‌شود Ùضاي كمتري
953 روي ديسك اشغال كنند.
954 براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
955 بهترين انتخاب است. در اين گونه Øداكثر طول
956 رشته Ù…Øدود است بر خلا٠text كه هيچ Ù…Øدوديتي
957 روي Øداكثر اندازه رشته نمي‌گذارد.(در اين
958 گونه Øداكثر طول يك رشته يك گيگا بايت خواهد
960 گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
961 است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
962 (خالي) پر مي‌شود تا به طول مشخص شده برسد در
963 Øاليكه گونه VARCHAR كاراكترها را به همان صورت
964 كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
965 داده‌هاي باينري است به خصوص داده‌هاي
966 باينتري كه شامل بايت‌هاي NULL هستند. از نظر
967 كارايي تمام اين گونه‌ها يكسان هستند.
968 4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
969 اÙزايشي ايجاد كنم؟
970 PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
971 براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد
972 منØصر به Ùرد براي هر ردي٠)به روش زير عمل
974 CREATE TABLE person (
978 دستور بالا به طور اتوماتيک به دستور زير
979 تبديل مي‌شود:
980 CREATE SEQUENCE person_id_seq;
981 CREATE TABLE person (
982 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
985 براي ديدن اطلاعات بيشتر به راهنماي دستور
986 create_sequence مراجعه كنيد. همچنين مي‌توان از
987 OID‌هر ردي٠به عنوان يك مقدار منØصر به Ùرد
988 استÙاده كرد. اما در اين Øالت براي dump كردن Ùˆ
989 reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
990 با گزينه o-‌ اجرا كنيد.
991 4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
993 يك روش براي گرÙتن مقدار بعدي يك Ùيلد سريال
994 استÙاده از تابع ()nextval است. در شبه ÙƒÙدي كه در
995 ادامه آمده است روش انجام اين كار نشان داده
997 new_id = execute("SELECT nextval('person_id_seq')");
998 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
999 با اجرا دستور Ùوق مقدار جديد را در متغير new_id
1000 نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
1001 درخواست‌هاي نيز استÙاده كنيد. توجه داشته
1002 باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
1003 شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
1004 در آن table‌ نام جدول Ùˆ serialcolumn نام Ùيلد سريال
1005 جدول مي‌باشد.
1006 براي ديدن مقدار نسبت داده شده به Ùيلد سريال
1007 نيز مي‌توان از تابع () currval به صورت زير
1008 استÙاده كرد.
1009 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
1010 new_id = execute("SELECT currval('person_id_seq')");
1011 و سرانجام شما مي‌توانيد از مقدار OID كه خروجي
1012 دستور INSERT است براي ديدن مقدار پيش Ùرض
1013 استÙاده كنيد. هر چند اين روش در همه پلتÙرمها
1014 قابل استÙاده نيست Ùˆ ضمن اينكه Ùيلد oid‌ بعد
1015 از عدد 4 ميليارد دوباره صÙر مي‌شود. در زبان
1016 perl با استÙاده از DBI Ùˆ DBD::Pg مقدار oid‌را
1017 مي‌توانيد به شكل زير استخراج كنيد: بعد از
1018 اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$
1019 ذخيره خواهد شد.
1020 4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
1021 شرایط race برای سایر کاربران می شوند؟
1022 خیر، استÙاده از این توابع شرایط race را به
1023 وجود نمی آورد.
1024 4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
1025 شده مجدداً استÙاده نمی شود؟ چرا بین اعداد
1026 سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟
1027 برای بالا بردن امکان اجرای همزمان تراکنشها،
1028 اعداد سریالی به Ù…Øض اجرای تراکنش به آنها
1029 تخصیص Ù…ÛŒ یابد در این Øالت اگر بعضی از
1030 تراکنشها abort شوند بین اعداد سریالی استÙاده
1031 شده یک Ùاصله خالی به وجود Ù…ÛŒ آید.
1032 4.16) OID و TID چه هستند؟
1033 OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه منØصر به
1034 Ùرد برای هر ردی٠است. هر ردی٠جدیدی Ú©Ù‡ ایجاد
1035 Ù…ÛŒ شود یک OID منØصر به Ùرد به آن اختصاص Ù…ÛŒ
1036 یابد. تمام OIDهایی Ú©Ù‡ در Øین initdb ایجاد Ù…ÛŒ شوند
1037 از 16384 کمتر هستند و OIDهایی بعداً تولید می شود
1038 از این عدد بزرگتر خواهد بود. نکته مهم آن است
1039 که OIDها نه تنها در یک جدول شبیه نیستند بلکه
1040 در Ú©Ù„ پایگاه داده هیچ دو ردیÙÛŒ دارای OID یکسان
1041 نخواهد بود.
1042 PostgreSQL از OID در سیستم داخلی خود برای ایجاد
1043 ارتباط بین ردیÙهای جداول مختل٠استÙاده Ù…ÛŒ
1044 کند. توصیه می شود که یک ستون از نوع OID برای
1045 ذخیره این Ùیلد در جدول ایجاد کنید. ساختن یک
1046 نمایه برای این Ùیلد باعث دسترسی سریعتر به آن
1048 تمام پایگاههای داده در PostgreSQL برای گرÙتن OID
1049 جدید از یک ناØیه مرکزی استÙاده Ù…ÛŒ کند. ولی
1050 اگر بخواهیم OID را به روش دیگری بگیریم و یا
1051 اینکه در Øین Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای
1052 اصلی آن تغییر نکند به روش زیر می توانیم عمل
1055 CREATE TABLE new_table(mycol int);
1056 SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
1057 COPY tmp_table TO '/tmp/pgtable';
1058 COPY new_table WITH OIDS FROM '/tmp/pgtable';
1059 DROP TABLE tmp_table;
1060 OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین Øداکثر
1061 مقدار آن 4 میلیارد خواهد بود و بعد از آن
1062 مقدار آن سرریز خواهد شد. البته تا کنون برای
1063 کسی این اتÙاق Ù†ÛŒÙتاده است Ùˆ تصمیم گرداندگان
1064 PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتÙاق رخ دهد
1065 این مشکل را برطر٠کنند.
1066 TIDها برای شناسایی Ù…ØÙ„ Ùیزیکی یک ردی٠بر اساس
1067 بلوک Ùˆ Ø¢Ùست Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا
1068 کردن یک ردی٠و یا بازخوانی آن عوض می شوند.
1069 TIDها توسط نمایه ها استÙاده Ù…ÛŒ شوند.
1070 4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
1071 استÙاده مي‌شود چيست؟
1072 لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استÙاده Ù…ÛŒ
1074 table, relation, class :کلاس، رابطه، جدول
1075 row, record, tuple چندتایی، رکورد، ردیÙ
1076 column, field, attribute صÙت، Ùیلد، ستون
1077 retrieve, select انتخاب، خواندن
1078 replace, updateبه روز کردن، جایگزینی
1079 append, insert درج، اضاÙÙ‡ کردن
1080 OID, serial value مقدار سریال
1082 range variable, table name, table alias
1083 یک لیست عمومی از ترمهای مورد استÙاده در
1084 پایگاه داده در آدرس
1085 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm
1087 4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
1089 این خطا اØتمالاً یا به خاطر تمام شدن ØاÙظه
1090 مجازی سیستم شماست و یا اینکه کرنل برای
1091 برنامه ها در مورد میزان استÙاده از ØاÙظه
1092 مجازی Ù…Øدودیت اعمال کرده است. قبل از اجرای
1093 برنامه اصلی یکی از دستورات زیر را اجرا کنید.
1096 بسته به نوع شل یکی از این دستورات ممکن است با
1097 موÙقیت اجرا شود. با اجرای آن دستور Ù…Øدودیت
1098 ØاÙظه مجازی برای برنامه ها برداشته شده Ùˆ با
1099 این کار اØتمالاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
1100 داده است اجرا خواهد شد.
1101 4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
1102 PostgreSQLيي كه من استÙاده مي‌كنم چيست؟
1103 با اجرای دستور ()SELECT version
1104 4.20) چرا در Øین اجرای عملیات روی large-objectها
1105 خطای "invalid large obj descriptor"به وجود می آید؟
1106 شما باید قبل از شروع دستوراتی که با large-objectها
1107 کار می کنند از BEGIN و بعد از آنها هم یک END
1108 بگذارید. در Øال Øاضر PostgreSQL هندل large-objectها را
1109 در زمان نهایی شدن تراکنش (commitشدن) می بندد. به
1110 همین دلیل اولین تلاش برای انجام هر کاری با
1111 هندل منجر به خطای invalid large obj descriptor خواهد شد.
1112 برای جلوگیری از این خطا Øتماً باید از یک
1113 تراکنش استÙاده کنید. این کار همانطور Ú©Ù‡
1114 قبلاً Ú¯Ùته شد با استÙاده از قرار دادن BEGIN Ùˆ END
1115 در ابتدا و انتهای دستورات انجام می شود.
1116 اگر این خطا را در Øین استÙاده از یک درایور ODBC
1117 دریاÙت کردید اØتمالاً باید این دستور را
1118 اجرا کنید: set auto-commit off
1119 4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
1120 جاري را به عنوان مقدار پيش‌Ùرض داشته باشد؟
1121 از CURRENT_TIMESTAMP استÙاده کنید در مثال زیر Ù†Øوه
1122 انجام این کار نشان داده شده است:
1123 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1125 4.22) چرا "زير درخواستهايي" كه از IN استÙاده
1126 مي‌كنند كند هستند؟
1127 در نسخه های قبل از 7.4 عمل الØاق زیر درخواست Ùˆ
1128 درخواست اصلی به این صورت انجام می شود که
1129 نتایج به دست آمده از زیر درخواست به صورت
1130 ترتیبی برای هر ردی٠اعمال می شود. اگر
1131 زیردرخواست ردی٠های کمی را به عنوان خروجی
1132 برگرداند و درخواست بیرونی ردی٠های زیادی را
1133 شامل شود استÙاده از IN بهترین روش است در غیر
1134 اینصورت بهتر است از EXISTS استÙاده شود
1137 WHERE col IN (SELECT subcol FROM subtab);
1141 WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1142 برای اجرای سریع این درخواست باید برای ستون
1143 subcol نمایه ایجاد شده باشد.
1144 در نسخه های بعد از 7.4 IN برای الØاق از همان
1145 تکنیک پیچیده مورد استÙاده در دستورات معمولی
1146 استÙاده Ù…ÛŒ کند Ùˆ بنابراین استÙاده از آن نسبت
1147 به EXISTS ارجØیت دارد.
1148 4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
1150 برای انجام الØاق خارجی به روش زیر عمل کنید:
1152 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1155 FROM t1 LEFT OUTER JOIN t2 USING (col);
1156 درخواستهای بالا t1.col , t2.col را به هم الØاق Ù…ÛŒ
1157 کند Ùˆ همچنین ردیÙهای t1 Ú©Ù‡ نظیر آنها در t2
1158 نبوده است را نیز برمی گرداند. اگر از RIGHT
1159 استÙاده شود نتیجه بر عکس است. یعنی ردیÙهای t2
1160 که نظیر آنها در t1 نباشد را نشان می دهد و اگر
1161 از FULL استÙاده شود نتیجه هم شامل ردیÙهای t1
1162 است Ùˆ هم شامل ردیÙهای t2. استÙاده از کلمه OUTER
1163 اختیاری است چرا که این کلمه به طور ضمنی
1164 دستورهای LEFT, RIGHT, FULL وجود دارد.
1165 در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم الØاق
1166 خارجی را به کمک دستورهای UNION, NOT IN شبیه سازی
1167 کنیم. این کار در مثال زیر نشان داده شده است:
1169 SELECT tab1.col1, tab2.col2
1171 WHERE tab1.col1 = tab2.col1
1173 SELECT tab1.col1, NULL
1175 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1177 4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
1178 داده توليد كرد؟
1179 در Øال Øاضر این کار امکان پذیر نیست. PostgreSQL
1180 Ùقط امکان درخواست از پایگاه داده ای را Ù…ÛŒ
1181 دهد Ú©Ù‡ در Øال Øاضر به آن متصل باشید Ùˆ نمی
1182 توان به طور همزمان از دو پایگاه داده استÙاده
1183 کرد. البته یک برنامه کاربردی خود می تواند به
1184 طور همزمان دو پایگاه داده را مورد استÙاده
1185 قرار داده و نتایج را با هم ترکیب کند ولی نمی
1186 تواند در یک درخواست به هر دو پایگاه داده
1188 4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
1189 يا ستون باشد؟
1190 در نسخه 7.3 خروجی یک تابع می تواند چند ردی٠یا
1191 چند ستون باشد. برای دیدن اطلاعات بیشتر به
1192 سایت زیر مراجعه
1193 کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions
1194 4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
1195 جداول موقت را ايجاد يا Øذ٠كرد؟
1196 PL/PgSQL Ù…Øتوای توابع را ذخیره (cache) Ù…ÛŒ کند. یک
1197 اثر بد جانبی این کار آن است که اگر در تابع از
1198 یک جدول موقت استÙاده شود Ùˆ بعداً آن جدول ØØ°Ù
1199 و یک جدول جدید به جای آن ایجاد شود، در
1200 Ùراخوانی مجدد آن تابع، Ù…Øتوای ذخیره شده
1201 تابع هنوز به جدول قدیمی اشاره می کند و
1202 بنابراین اجرای تابع با اشکال مواجه می شود.
1203 راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از
1204 دستور EXECUTE استÙاده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود
1205 که درخواست برای هر بار اجرا مجدداً پیمایش و
1207 4.27) چه گزينه‌هايي براي تكرار (replication) وجود
1209 There are several master/slave replication options available. These allow only
1210 the master to make database changes and the slave can only do database reads.
1211 The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists
1212 them. A multi-master replication solution is being worked on at
1213 http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
1214 4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
1215 contrib/pgcrypto شامل توابع رمزنگاری زیادی است که
1216 Ù…ÛŒ توان از آنها در دستورات SQL استÙاده کرد.
1217 برای رمز کردن ارتباط بین client و server ، پایگاه
1218 داده Øتماً گزینه SSL را بر روی پایگاه داده
1220 در نسخه 7.3 به بعد کلمات عبور کاربران به طور
1221 اتوماتیک به صورت رمز شده ذخیره می شود ولی
1222 در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در
1223 Ùایلpostgresql.conf Ùعال کنیم.
1224 Ù…ÛŒ توان پایگاههای داده را روی یک Ùایل سیستم
1225 رمزشده نگاهداری کرد
1229 Extending PostgreSQL
1230 5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
1231 اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
1232 دلایل مختلÙÛŒ Ù…ÛŒ تواند باعث بروز این مشکل
1233 شود. اما قبل از همه تابع خود را به صورت جدا
1235 5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
1236 جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
1237 داشته باشم؟
1238 کد خود را به گروه پستی pgsql-hackers ارسال کنید.
1239 5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
1240 كه خروجي آن يك ‌tuple (چند تايي) باشد؟
1241 در نسخه های 7.3 به بعد یک تابع می تواند یک جدول
1242 را به عنوان خروجی برگرداند. این ویژگی در
1243 توابعی که به زبانهای C و PL/PgSQL نوشته می شوند
1244 به طور کامل وجود دارد. راهنما برنامه نویسان
1245 را مطالعه کنید. یک مثال از Ù†Øوه برگرداندن یک
1246 جدول به عنوان خروجی در contrib/tablefunc آمده است.
1247 5.4) من يك Ùايل منبع را عوض كرده ام چرا در
1248 عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
1249 Makefile برای Ùایلهای include شده وابستگیها را به
1250 درستی نشان نمی دهد. برای اطمینان از اینکه
1251 Ùایلی Ú©Ù‡ عوض کرده اید Øتماً دوباره کامپیل Ù…ÛŒ
1252 شود دستور make clean را اجرا کنید. اگر از کامپیلر
1253 gcc استÙاده Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه
1254 enable-depend-- در موقع اجرای برنامه configure استÙاده
1255 کنید این گزینه باعث می شود که وابستگیها به
1256 طور اتوماتیک تولید شود.