1 PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
2 پرسيده مي شوند
3 تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ù
\81ايل: 28 شهریور 1383 هجری
5 نگهدارنده اصلي Ù
\81ايل (زبان انگليسي)در Øال
6 Øاضر : Bruce Momjian pgman@candle.pha.pa.us
7 نگهدارنده Ù
\81ايل به زبان Ù
\81ارسي: m.taghizadeh@imenafzar.net
8 Ù…Øمود تقي‌زاده مهرجردی
10 آخرين نسخه اين Ù
\81ايل را مي‌توانيد از اين
11 آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
12 سوالاتي كه در مورد يك سکوی(پلتÙ
\81رم) خاص است در
13 اين آدرس جواب داده شده اند
14 http://www.PostgreSQL.org/docs/index.html
18 سوالات عمومي
19 1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙ
\81ظ كرد؟
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 سوالات مربوط به استÙ
\81اده از پايگاه داده
45 2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
46 2.2) Ú†Ù‡ ابزارهايي براي استÙ
\81اده از PostgreSQL‌ با
47 صÙ
\81Øات وب وجود دارد؟
48 2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ
\81يكي دارد؟
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) از Ú†Ù‡ سخت اÙ
\81زاري بايد استÙ
\81اده كنم؟
74 سوالات عملياتي
75 4.1) تÙ
\81اوت بين binary cursors و Normal cursors چيست؟
76 4.2) من چگونه مي‌توانم Ù
\81قط روي چند رديÙ
\81 اول يا
77 يك رديÙ
\81 تصادÙ
\81ي درخواست SELECT‌ بزنم؟
78 4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
79 چيزهايي كه در psql‌ وجود دارد را ببينم؟
80 4.4) چگونه يك ستون جدول را ØØ°Ù
\81 مي‌كنيد؟ چگونه
81 نوع داده آن را عوض كنيم؟
82 4.5) Øداكثر اندازه يك رديÙ
\81،‌ جدول و خود
83 پايگاه داده چقدر است؟
84 4.6) چقدر Ù
\81ضاي ديسك سخت براي ذخيره كردن
85 داده‌‌هاي يك Ù
\81ايل متني مورد نياز است؟
86 4.7) چگونه مي‌توانم بÙ
\81همم كه چه كاربران،‌
87 پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
\81
89 4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
90 چرا از نمايه ها استÙ
\81اده نمي‌كنند؟
91 4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
92 توسط بهينه‌ساز درخواستها مشاهده كنم؟
93 4.10) نمايه R-tree‌ چيست؟
94 4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
96 4.12) چگونه از عبارات منظم براي جستجو استÙ
\81اده
97 كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
98 نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
99 از نمايه استÙ
\81اده كنم؟
100 4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
101 كه يك Ù
\81يلد NULL‌ است؟
102 4.14) تÙ
\81اوت بين گونه‌هاي مختلÙ
\81 character چيست؟
103 4.15.1) چگونه مي‌توانم يك Ù
\81يلد سريال يا
104 اÙ
\81زايشي ايجاد كنم؟
105 4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
107 4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
108 شرایط race برای سایر کاربران می شوند؟
109 4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
110 شده مجدداً استÙ
\81اده نمی شود؟ چرا بین اعداد
111 سریالی یک Ù
\81اصله خالی ایجاد می شود؟
112 4.16) OID و TID چه هستند؟
113 4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
114 استÙ
\81اده مي‌شود چيست؟
115 4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
117 4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
118 PostgreSQLيي كه من استÙ
\81اده مي‌كنم چيست؟
119 4.20) چرا در Øین اجرای عملیات روی large-objectها
120 خطای "invalid large obj descriptor"به وجود می آید؟
121 4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
122 جاري را به عنوان مقدار پيش‌Ù
\81رض داشته باشد؟
123 4.22) چرا زير درخواستهايي كه از IN استÙ
\81اده
124 مي‌كنند كند هستند؟
125 4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
127 4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
128 داده توليد كرد؟
129 4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
\81
130 يا ستون باشد؟
131 4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
132 جداول موقت را ايجاد يا ØØ°Ù
\81 كرد؟
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) من يك Ù
\81ايل منبع را عوض كرده ام چرا در
146 عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
151 سوالات عمومي
152 1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙ
\81ظ كرد؟
153 PostgreSQL به صورت Post-Gres-Q-L‌ تلÙ
\81ظ مي‌شود. يك Ù
\81ايل
154 صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
155 كساني كه مايلند تلÙ
\81ظ صØÙŠØ Ø±Ø§ بشنوند وجود
157 PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
158 توسعه داده شده است (هنوز هم بعضي مواقع براي
159 سادگي به آن Postgres Ú¯Ù
\81ته مي‌شود) كه يك نمونه
160 تØقيقاتي از پايگاه داده‌هاي نسل بعد است.
161 PostgreSQL همان الگوي داده قوي و انواع داده را
162 ØÙ
\81ظ كرده است ولي زبان PostQuel را با يك
163 زيرمجموعه پيشرÙ
\81ته از 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 وجود آمد. اÙ
\81راد بسياري در توسعه Ùˆ رÙ
\81ع اشكال و
179 انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
180 PostgreSQL از روي آن نوشته شده است، توسط تعداد
181 زيادي دانشجوي كارشناسي ارشدو دانشجوي
182 كارشناسي Ùˆ تيم برنامه‌نويسي كه تØت نظر
183 پروÙ
\81سور Michael Stonebrake در دانشگاه
184 بركلي،‌كاليÙ
\81رنيا كار مي‌كرده‌اند نوشته
186 نام اصلي نرم اÙ
\81زار در دانشگاه بركلي Postgres‌
187 بود. در سال 1995 بعد از اضاÙ
\81ه شدن 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 در مورد Ù†Øوه استÙ
\81اده از متن در آن ديده
212 نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
213 تغيير آن نداريم.
214 1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
216 در Øالت كلي PostgreSQL روي هر پلتÙ
\81رم (سكوي) سازگار
217 با يونيكس اجرا مي‌شود. ليست پلتÙ
\81رمهايي كه
218 تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
219 درقسمت دستورالعملهاي نصب آمده است.
220 1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
223 مي‌توان psql, كتابخانه libpq و ساير واسطها و
224 برنامه‌هاي كاربردي را طوري كامپيل كرد كه
225 روي Ù…Øيطهاي ويندوز نيز اجرا شوند. در اين
226 Øالت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
227 شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙ
\81رم
228 لينوكس در Øال اجراست ارتباط برقرار
229 مي‌كند.يك Ù
\81ايل win32.mak همراه با كدهاي PostgreSQL
230 وجود دارد كه براي كامپيل كردن كتابخانه libpq و
231 برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
232 ارتباط به صورت ODBC‌ را نيز دارد.
234 با استÙ
\81اده از Cygwin‌ و كتابخانه Cygnus مي‌توان
235 پايگاه داده را روي ويندوز NT و يا Win2K اجرا
236 كرد.براي ديدن اطلاعات بيشتر Ù
\81ايل pgsql/doc/FAQ_MSWIN
237 ‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
238 ببينيد Ùˆ يا اينكه به اين صÙ
\81ØÙ‡
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 مي‌توانيد بگيريد. در صÙ
\81ØÙ‡ اصلي سايت ليست
251 ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
252 آنها بگيريد آمده است.
253 1.6) از كجا خدمات پشتيباني بگيرم؟
254 گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين
255 گروه براي بØØ« در مورد موضوعات مختلÙ
\81 در زمينه
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 گروه پستي بررسي اÙ
\90شكالات هم وجود دارد. براي
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 وجود دارد. شما مي‌توانيد از Ù
\81رمان يونيكسي irc
287 -c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
288 irc.freenode.net استÙ
\81اده كنيد.
289 ليست شركتهايي كه از طريق آنها مي‌توانيد
290 خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙ
\81ت
291 كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
293 1.7) آخرين نسخه اعلام شده چيست؟
294 آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
295 هدÙ
\81 ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
297 1.8) چه مستندات و راهنمائيهايي وجود دارند؟
298 چندين كتابچه Ùˆ صÙ
\81Øات راهنما Ùˆ مثالهاي كوچك
299 همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
300 دارد. براي ديدن صÙ
\81Øات راهنما مي‌توانيد به
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 وجود دارد. همچنين ليستي از مقالات Ù
\81ني در
307 مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
309 برنامه psql يك دستور d\ دارد كه اطلاعاتي در
310 مورد انواع داده‌هاي قابل تعريÙ
\81 و عملگر‌ها
311 و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
312 ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
313 1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
314 امكاناتي كه در اين پايگاه داده وجود ندارد
316 PostgreSQL يك زير مجموعه پيشرÙ
\81ته از SQL-92 را
317 پشتيباني مي‌كند. در ليست TODO اÙ
\90شكالات
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 استÙ
\81اده كرد كتاب "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 كيÙ
\81يت بالا را به pgsql-patches ارسال كنيد.
345 تعداد زيادي از برنامه‌نويسان وجود دارند كه
346 امتياز انجام تغييرات در cvs‌ را دارند. هر
347 كدام از آنها تعداد زيادي وصله‌‌ با كيÙ
\81يت
348 بالا به گروه ارسال كرده‌اند كه اعتماد
349 گردانندگان PostgreSQL را به دست آورده‌اند.
350 1.13) چگونه مي‌توانم يك اÙ
\90شكال را به گروه
351 برنامه نويس اعلام كنم؟
352 لطÙ
\81اً صÙ
\81ØÙ‡ مربوط به اÙ
\90شكالات 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 راههاي مختلÙ
\81ي براي اندازه‌گيري و مقايسه
362 نرم‌اÙ
\81زارها وجود دارد كه عبارتند از
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 به آن اشاره شد را ندارد. هدÙ
\81 اصلي ما امكانات
383 و قابليت اعتماد بالاست در ضمن آنكه تلاش
384 مي‌كنيم تا كارايي آن نيز بهبود يابد. در
385 آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
386 جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طرÙ
\81 ديگر
387 MySQL‌ يك شركت است كه Ù…Øصول خود را به صورت متن
388 باز ارائه مي‌كند ولي براي نرم‌اÙ
\81زار غير
389 متن باز خود اØتياج به ليسانس تجاري دارد بر
390 خلاÙ
\81 PostgreSQL كه يك گروه كاملاً متن باز هستند.
392 قابليت اطمينان
393 ما Ù
\81كر مي‌كنيم كه يك سيستم پايگاه
394 داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
395 تمام تلاشمان را براي ارائه كدهاي پايداري
396 كه به خوبي تست شده باشند Ùˆ كمترين اÙ
\90شكالات
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 هم براي استÙ
\81اده تجاري و هم غير تجاري هيچ
420 هزينه‌اي نبايد پرداخت شود. هيچ Ù…Øدوديتي
421 براي انجام تغييرات در PostgreSQL توسط استÙ
\81اده
422 كنندگان وجود ندارد به جز مواردي كه در
423 ليسانس BSD به آن اشاره شده است.
424 1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
426 PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
427 كه آن را مديون Marc Fournier‌ است كه اين ساختار را
428 ايجاد كرده است.
429 كيÙ
\81يت يك ساختار براي يك پروژه متن باز بسيار
430 اهميت دارد. يك ساختار خوب مي‌تواند مانع از
431 Øوادثي شود كه در Øركت روبه‌جلوي پروژه خللي
432 وارد مي‌كنند.
433 البته اين ساختار تشكيلاتي ارزان نيست.
434 هزينه‌هاي ثابت ماهانه و روزمره براي
435 نگهداري Ùˆ ØÙ
\81ظ اين ساختار مورد نياز است. اگر
436 شما يا شركت شما مايل است كه از نظر مالي به
437 اين Øركت كمك كند لطÙ
\81اً به سايت
438 http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
440 هر چند در صÙ
\81ØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
441 است ولي مشاركت عمدتاً براي پشتيباني از
442 پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
443 اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
444 مشخص شده ارسال كنيد.
445 اگر يك استÙ
\81اده موÙ
\81ق از PostgreSQL سراغ داريد
446 لطÙ
\81اً آن را به سايت http://advocacy.postgresql.org گزارش
451 سوالات مربوط به استÙ
\81اده از پايگاه داده
452 2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
453 دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
454 PostgreSQL‌ وجود دارد.
455 براي گرÙ
\81تن psqlODBC به سايت
456 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
458 OpenLlink را از اين سايت http://www.openlinksw.com
459 مي‌توانيد بگيريد. اين درايور با
460 نرم‌اÙ
\81زارهاي مختلÙ
\81 ODBC كار مي‌كند بنابراين
461 شما قادر خواهيد بود با استÙ
\81اده از OpenLink روي
462 اكثر سكو‌هايي كه نرم‌اÙ
\81زارODBC‌دارند بدون
463 مشكل به PostgreSQL نيز متصل شويد.
464 اين Ù…Øصول به كساني كه اØتياج به خدمات
465 پشتيباني تجاري دارند Ù
\81روخته مي‌شود. ولي
466 نسخه آزاد اين نرم‌اÙ
\81زار هميشه در درسترس
467 مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
468 را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد.
469 2.2) Ú†Ù‡ ابزارهايي براي استÙ
\81اده از PostgreSQL‌ با
470 صÙ
\81Øات وب وجود دارد؟
471 در سايت http://www.webreview.com براي استÙ
\81اده از
472 PostgreSQL‌ در صÙ
\81Øات وب راهنماييهاي خوبي وجود
474 براي تركيب Ùˆ استÙ
\81اده در صÙ
\81Øات وب زبان PHP‌ يك
475 واسط بسيار مناسب است. اطلاعات بيشتر راجع به
476 PHP‌در سايت http://www.php.net وجود دارد.
477 مثالهايي نيز با استÙ
\81اده از Perl‌ و CGI.pm و mod_perl
479 2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ
\81يكي دارد؟
480 چند نرم اÙ
\81زار گراÙ
\81يكي براي 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 نرم‌اÙ
\81زارهاي گراÙ
\81يكي براي PostgreSQL به آدرس
490 http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
491 2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
492 PostgreSQL‌ ارتباط برقرار كرد؟
493 بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
494 PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
495 PostgreSQL تعدادي از واسطهاي مورد نياز براي
496 ارتباط با پايگاه داده از طريق زبانهاي مختلÙ
\81
497 آمده است كه در زير ليست آنها را مشاهده
504 واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
505 Drivers/Interfaces وجود دارد.
509 سوالات مديريتي
510 3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
511 از /usr/local/pgsql/ نصب كنم؟
512 موقع اجراي دستور configure از گزينه prefix-- استÙ
\81اده
514 3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
515 كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
516 به دلايل مختلÙ
\81 ممكن است اين اتÙ
\81اق بيÙ
\81تد. اما
517 در قدم اول شما مطمئن شويد كه كه امكانات
518 اضاÙ
\81ه System V‌ در كرنل شما نصب شده باشد. PostgreSQL
519 براي اجرا شدن نياز به استÙ
\81اده از امكانات
520 ØاÙ
\81ظه مشترك Ùˆ سماÙ
\81ورها دارد.
521 3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
522 را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
523 اØتمالاً‌ قسمت ايجاد ØاÙ
\81ظه مشترك در كرنل به
524 درستي تنظيم نشده است Ùˆ يا اينكه بايد Ù
\81ضاي
525 ØاÙ
\81ظه اشتراكي در كرنل را زياد كرد. ميزان
526 دقيق ØاÙ
\81ظه مشترك مورد نياز بسته به معماري و
527 Ù†Øوه استÙ
\81اده از باÙ
\81رها توسط برنامه postmaster
528 دارد. براي بيشتر سيستم‌ها كه با تنظيمات
529 پيش‌Ù
\81رض كار مي‌كنند مقدار اين ØاÙ
\81ظه Øدود 1
530 مگابايت است. براي ديدن اطلاعات بيشتر راجع به
531 ØاÙ
\81ظه مشترك Ùˆ سماÙ
\81ور به PostgreSQL Administrator's Guide
532 مراجعه كنيد.
533 3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
534 را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
535 اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
536 device باشد به اين معني است كه تعداد سماÙ
\81ورهاي
537 تنظيم شده در كرنل كاÙ
\81ي نيست. PostgreSQL‌ براي هر
538 Ù
\81رايندي كه در backend اجرا مي‌شود به يك سماÙ
\81ور
539 نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
540 است كه postmaster را با اعمال Ù…Øدوديت روي تعداد
541 Ù
\81رايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
542 براي اينكار از گزينه N- و يك عدد كمتر از 32
543 استÙ
\81اده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
544 پارامترهاي SEMMNS, SEMMNI كرنل را اÙ
\81زايش دهيم.
545 در زمان دسترسي خيلي زياد به پايگاه داده، ‌
546 سماÙ
\81ورهاي نامعتبر مي‌توانند باعث crash‌ كردن
548 اگر پيغام خطا چيز ديگري باشد اØتمالاً به
549 دليل آن است كه كرنل از سماÙ
\81ورها پشتيباني
550 نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
551 مديريتي PostgreSQL را مطالعه كنيد.
552 3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
554 به صورت پيش Ù
\81رض Ù
\81قط از ماشيني كه PostgreSQL روي آن
555 در Øال اجراست مي‌توان با استÙ
\81اده از
556 سوكت‌هاي يونيكسي به آن متصل شد. ساير
557 ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
558 آنكه گزينه tcp_sockets در Ù
\81ايل postgresql.conf Ù
\81عال شده و
559 همچنين با Ø§ØµÙ„Ø§Ø Ù
\81ايل PGDATA/ph_hba.conf هويت‌شناسي
560 مبتني بر ميزبان نيز Ù
\81عال شود. با اين كار
561 مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
562 3.6) براي كارايي بالاتر و بهتر پايگاه داده من
563 چه تنظيماتي را بايد انجام دهم؟
564 به طور Øتم استÙ
\81اده از انديس‌ها باعث بالا
565 رÙ
\81تن سرعت پاسخ‌گويي به درخواست‌ها خواهد
566 شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†Øوه
567 پردازش يك دستور توسط PostgreSQL را مي‌دهد.
568 اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
569 آنها را با قرار دادن در يك Ù
\81ايل با دستور COPY‌
570 اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
571 است. Øتي‌الامكان سعي كنيد از تراكنشها
572 استÙ
\81اده نكنيد. تراكنشها مجموعه دستوراتي
573 هستند كه بيند BEGIN Ùˆ â€
\8dCOMMIT مي‌آيند. اگر يك
574 دستور به صورت عادي اجرا شود PostgreSQL خود آن
575 دستور را به صورت يك تراكنش مستقل نگاه كرده و
576 اجرا مي‌كند. موقعی كه تغييرات زيادي در
577 پايگاه داده انجام مي‌شود انديسهاي قبلي را
578 ØØ°Ù
\81 و مجدداً‌ ايجاد كنيد.
579 استÙ
\81اده از گزينه o -F- در Ù
\81رمان postmaster باعث غير
580 Ù
\81عال كردن ()fsync مي‌شود. اين دستور بعد از هر
581 تراكنش اطلاعات را روي هاردديسك منتقل
583 براي اÙ
\81زايش تعداد باÙ
\81رهاي ØاÙ
\81ظه اشتراكي از
584 گزينه B- به همراه Ù
\81رمان postmaster استÙ
\81اده كنيد.
585 توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
586 است postmaster اصلاً‌ اجرا نشود. هر باÙ
\81ر 8 كيلو
587 بايت ØاÙ
\81ظه نياز دارد Ùˆ تعداد باÙ
\81رها به طور
588 پيش Ù
\81رض 64 است.
589 همچنين مي‌توان با گزينه S- ميزان ØاÙ
\81ظه‌اي
590 كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
591 استÙ
\81اده مي‌شود را اÙ
\81زايش داد. مقدار پيش Ù
\81رض
592 512 كيلو بايت است.
593 استÙ
\81اده از دستور CLUSTER نيز براي بالا بردن
594 كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
595 بيشتري در اين زمينه به شما مي‌دهد.
596 3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
598 PostgerSQL‌ امكانات مختلÙ
\81ي براي گزارش دادن
599 وضعيت خود دارد كه براي اشكال زدايي مي‌توان
600 از آنها استÙ
\81اده كرد.
601 با استÙ
\81اده از گزينه enable-assert-- تعداد زيادي
602 ()assert براي مونيتور كردن Ùˆ توقÙ
\81 برنامه در صورت
603 بروز خطاهاي ناخواسته Ù
\81عال مي‌شود.
604 هم Postmaster و هم postgres گزينه‌هاي زيادي براي
605 اشكال زدايي دارند. موقعي كه postmaster را اجرا
606 مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ù
\81ايل log
609 ./bin/postmaster >server.log 2>&1 &
610 اين كار يك Ù
\81ايل log در بالاترين شاخه PostgreSQL‌
611 ايجاد مي‌كند. اين Ù
\81ايل Øاوي اطلاعات Ù…Ù
\81يدي
612 در مورد مسائل و خطاهايي است كه براي سرور
613 اتÙ
\81اق اÙ
\81تاده است. براي ديدن جزئيات بيشتر
614 مي‌توان از d- به همراه Ù
\81رمان postmaster‌ استÙ
\81اده
615 كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
616 دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ù
\81ايل نوشته
617 مي‌شود. با بالابردن اين عدد Øجم اطلاعات
618 توليد شده در LogÙ
\81ايل نيز اÙ
\81زايش مي‌يابد.
619 اگر postmaster در Øال اجرا نباشد، مي‌توانيم postgres
620 را به طور مستقيم از خط Ù
\81رمان اجرا كرده و
621 دستورات SQL را به آن بدهيم. اين كار Ù
\81قط براي
622 اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
623 اين Øالت يك دستور با كاراكتر newline خاتمه پيدا
624 مي‌كند و نه با ;. اگر postmaster را با امكانات
625 اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
626 استÙ
\81اده از يك برنامه اشكال‌ياب اجراي
627 برنامه را مونيتور كنيد.
628 اگر postmaster در Øال اجرا باشد با دستور psql
629 مي‌توان به postgres متصل شد. با پيدا كردن PID
630 Ù
\81رايند postgres كه psql به آن متصل شده است مي‌توان
631 آن را مونيتور كرد. براي اينكار بايد يك
632 برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
633 بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙ
\81ÙŠ
634 است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
635 مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
636 اين Ù
\81اصله شما مي‌توانيد برنامه اشكال‌ياب
637 را به آن متصل كرده و با قرار دادن يك نقطه
638 توقÙ
\81 روند اجراي آن را مونيتور كنيد.
639 postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
640 پيدا كردن اشكالات بسيار مناسب هستند.
641 شما مي‌توانيد postgreSQL را با امكانات profiling
642 كامپيل كنيد. اين كار باعث مي‌شود كه زمان
643 اجراي دقيق هر تابع در برنامه مشخص شود.
644 خروجي‌هاي توليد شده در اين Øالت در Ù
\81ايل
645 DLINUX_PROFILE. ريخته مي‌شود.
646 3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
647 وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
648 شما بايد Øداكثر تعداد Ù
\81رايندهاي همزمان
649 postmaster را اÙ
\81زايش دهيد. مقدار پيش Ù
\81رض 32 است.
650 براي اÙ
\81زايش آن مي‌توان از گزينه N- استÙ
\81اده
651 كرد Ùˆ يا Ù
\81ايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
652 توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
653 باشد بايد مقدار B- را نيز اÙ
\81زايش دهيم. اين
654 مقدار بايد Øداقل دو برابر مقدار N-‌ باشد.
655 براي اعداد خيلي بالا بايد بعضي از
656 پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
657 پارامترهايي نظير Øداكثر اندازه ØاÙ
\81ظه
658 اشتراكي SHMMAX ØŒ Øداكثر تعداد سماÙ
\81ورها SEMMNI‌ و
659 SEMMNS ØŒ Øداكثر تعداد Ù
\81رايندها NPROCØŒ Øداكثر
660 Ù
\81رايندهاي يك كاربر MAXUPRC Ùˆ Øداكثر Ù
\81ايلهاي باز
661 NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
662 همزمان postgreSQL Ù…Øدود است آن است كه نيازهاي
663 PostgreSQL بيش از منابع موجود سيستم نباشد.
664 3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
665 دراين شاخه Ù
\81ايلهاي موقتي قرار دارد كه با
666 اجراي درخواستها به وجود آمده است. به عنوان
667 مثال اگر براي اجراي دستور order by نياز به انجام
668 مرتب سازي باشد Ùˆ در صورتي كه ØاÙ
\81ظه مشخص شده
669 با گزينه S- براي اينكار كاÙ
\81ي نباشد سيستم يك
670 Ù
\81ايل موقت در اين شاخه ايجاد مي‌كند تا عمل
671 مرتب سازي را انجام دهد.
672 Ù
\81ايلهاي موقت معمولاً به صورت اتوماتيك پاك
673 مي‌شود اما اگر postgreSQL در Øين مرتب سازي crash‌
674 كند آن Ù
\81ايلها باقي مي‌مانند. با stop و start كردن
675 برنامه postmaster اين Ù
\81ايلها پاك مي‌شوند.
676 3.10) چرا براي به روز كردن نسخه پايگاه داده من
677 بايد كل داده ها را dump‌ و مجدداً restore كنم؟
678 تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
679 كه Ù
\81قط minor آنها متÙ
\81اوت است Ù
\81قط تغييرات كوچكي
680 اعمال مي‌كنند؛ بنابراين براي به روز كردن از
681 نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
682 نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
683 ساختار داخلي جداول Ùˆ Ù
\81ايلهاي داده تغيير
684 مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
685 براي انتقال داده‌هاي موجود در پايگاه داده
686 در اين Øالت بايد ‌از dump Ùˆ restore استÙ
\81اده كرد.
687 در نسخه‌هايي كه ساختار روي ديسك تغييري
688 نمي‌كند مي توان از برنامه pg_upgrade براي به روز
689 كردن پايگاه داده استÙ
\81اده كرد بدون اينكه
690 نيازي به استÙ
\81اده از dump و restore باشد. در
691 يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
692 شده است كه آيا برنامه pg_upgrade براي اين توزيع
693 وجود دارد يا خير.
694 3.11) از Ú†Ù‡ سخت اÙ
\81زاري بايد استÙ
\81اده كنم؟
696 چون اكثر سخت‌اÙ
\81زارهاي PC سازگار هستند مردم
697 Ù
\81كر مي‌كنند كه كيÙ
\81يت آنها نيز يكسان است. در
698 Øاليكه اينطور نيست. استÙ
\81اده از هاردهاي SCSI و
699 ØاÙ
\81ظه‌هاي ECC Ùˆ مادربردهاي با كيÙ
\81يت بالا
700 نسبت به سخت اÙ
\81زارهاي ارزانتر نتايج بهتري از
701 نظر كارايي و پايداري سيستم بهمراه خواهد
702 داشت. PostgreSQL روي بيشتر سخت اÙ
\81زارها اجرا
703 مي‌شود اما اگر كارايي Ùˆ اطمينان Ù
\81اكتورهاي
704 مهمي هستند بايد سخت اÙ
\81زار مناسب استÙ
\81اده شود.
705 در گروههاي پستي در مورد سخت اÙ
\81زار مناسب و
706 انتخاب آن بØØ« شده است.
710 سوالات عملياتي
711 4.1) تÙ
\81اوت بين binary cursors و Normal cursors چيست؟
712 راهنماي دستور DECLARE‌ را مطالعه كنيد.
713 4.2) من چگونه مي‌توانم Ù
\81قط روي چند رديÙ
\81 اول يا
714 يك رديÙ
\81 تصادÙ
\81ي درخواست SELECT‌ بزنم؟
715 راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
716 در واقع كل درخواست بايد بررسي و ارزيابي شود
717 Øتي اگر شما Ù
\81قط چند رديÙ
\81 اول را بخواهيد. براي
718 مثال درخواست ORDER BY را در نظر بگيريد. اگر
719 انديس يا نمايه‌اي براي ORDER BY وجود داشته
720 باشد،‌postgreSQL‌ ممكن است بتواند Ù
\81قط چند سطر
721 اول درخواستي را ارزيابي كند و يا اينكه كل
722 درخواست پردازش شود تا تعداد رديÙ
\81‌هاي
723 درخواستي توليد شود.
724 براي انتخاب يك سطر تصادÙ
\81ي به روش زير عمل
730 4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
731 چيزهايي كه در psql‌ وجود دارد را ببينم؟
732 براي ديدن ليست جداول دستور dt\ را در برنامه
733 psql‌ استÙ
\81اده كنيد. براي ديدن ليست كامل
734 Ù
\81رمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
735 برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
736 ‌قرار دارد. اين Ù
\81ايل Øاوي Ù
\81رامين SQLيي است كه
737 خروجي را براي دستوراتي كه با \‌در psql شروع
738 مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
739 گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
740 از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
741 PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
742 با استÙ
\81اده از آن اطلاعات داخلي پايگاه داده
743 را استخراج كرد.
744 4.4) چگونه يك ستون جدول را ØØ°Ù
\81 مي‌كنيد؟ چگونه
745 نوع داده آن را عوض كنيم؟
746 ØØ°Ù
\81 يك ستون در توزيع 7.3 با استÙ
\81اده از دستور
747 ALTER TABLE DROP COLUMN اضاÙ
\81ه شده است. در نسخه‌هاي
748 قبلي به روش زير عمل كنيد:
750 LOCK TABLE old_table;
751 SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù
\81 كنيد را در اينجا بياوريد
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) Øداكثر اندازه يك رديÙ
\81،‌ جدول و خود
765 پايگاه داده چقدر است؟
766 Ù…Øدوديتها عبارتند از:
767 Øداكثر اندازه پايگاه داده نامØدود (تا 32 ترابايت وجود دارد)
768 Øداكثر اندازه يك جدول 32 ترابايت
769 Øداكثر ا ندازه يك رديÙ
\81 1.6 ترابايت
770 Øداكثر اندازه يك Ù
\81يلد 1 گيگا بايت
771 Øداكثر اندازه رديÙ
\81هاي يك جدول نا Ù…Øدود
772 Øداكثر ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
773 Øداكثر انديسهاي يك جدول نا Ù…Øدود
774 البته در Øالت نامØدود نيز ما Ù…Øدود به Øجم
775 هاردديسك Ùˆ Ù
\81ضاي ØاÙ
\81ظه خواهيم بود. در صورتي
776 Ú©Ù‡ مقادير مشخص شده به عنوان نامØدود به صورت
777 غير معمولي بزرك شوند كارايي سيستم كاهش
778 خواهد ياÙ
\81ت.
779 براي ذخيره كردن جداول با اندازه خيلي بزرگ
780 نيازي نيست كه سيستم عامل امكان ايجاد
781 Ù
\81ايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
782 بزرگ به صورت Ù
\81ايلهايي به Øجم يك گيگا بايت
783 نگاهداري مي‌شوند.
784 اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
785 قرار دهيم Øداكثر اندازه جدول Ùˆ Øداكثر تعداد
786 ستونها 4 برابر خواهد شد.
787 4.6) چقدر Ù
\81ضاي ديسك سخت براي ذخيره كردن
788 داده‌‌هاي يك Ù
\81ايل متني مورد نياز است؟
789 يك پايگاه داده PostgreSQL‌ تا 5 برابر Ù
\81ضايي روي
790 هاردديسك براي نگاهداري يك Ù
\81ايل متني نياز
792 به عنوان مثال يك Ù
\81ايل با 100000 خط را در نظر
793 بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
794 متني آمده است. Ù
\81رض كنيد كه رشته متني به طور
795 متوسط 20 بايت باشد. اندازه Ù
\81ايل برابر 2.8 مگا
796 بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
797 Ù
\81ايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
798 32 bytes: اندازه سرايند هر خط به طور تقريبي
799 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
800 + 4 bytes: اشاره گر روي صÙ
\81ØÙ‡ به يك چندتايي
801 ----------------------------------------
802 60 bytes در هر رديÙ
\81
804 اندازه صÙ
\81Øات داده در PostgreSQL برابر با 8 كيلو بايت است
805 8192 تعداد بايت‌ها در هر صÙ
\81ØÙ‡
806 ------------------- = 136 تعداد رديÙ
\81‌ها در يك صÙ
\81ØÙ‡ پايگاه داده
807 60 تعداد بايت‌هاي هر رديÙ
\81
809 100000 تعداد رديÙ
\81ها
810 -------------------- = تعدادصÙ
\81Øات پايگاه داده
811 128 تعداد رديÙ
\81ها در هر صÙ
\81ØÙ‡
813 735 تعداد صÙ
\81Øات * 8192 تعداد بايت‌هاي هر صÙ
\81ØÙ‡ = 6,021,120 مگا بايت
814 سربار انديسها يا نمايه‌ها از اين مقدار كمتر
815 است ولي چون شامل خود داده‌ها هم هست ممکن است
816 اندازه آنها هم بزرگ شود.
817 NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
818 Ù
\81ضاي بسيار كمي را اشغال مي‌كنند.
819 4.7) چگونه مي‌توانم بÙ
\81همم كه چه كاربران،‌
820 پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
\81
822 psql تعداد زيادي دستور دارد كه با \ شروع
823 مي‌شوند و اين اطلاعات را در اختيار ما قرار
824 مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
825 كنيد. همچنين جداول سيستمي كه با نام آنها pg_
826 ‌شروع مي‌شود نيز اين اطلاعات را در خود
827 دارند. اجراي برنامه psql با گزينه l- نيز باعث
828 نشان دادن ليست تمام پايگاههاي داده مي‌شود.
829 همچنين Ù
\81ايل pgsql/src/tutorial/syscat.source نيز Ù
\81رمانهاي
830 SELECT كه با استÙ
\81اده از آن مي‌توان اطلاعات
831 پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
832 4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
833 چرا از نمايه ها استÙ
\81اده نمي‌كنند؟
834 به طور معمول براي درخواستها از نمايه‌ها
835 استÙ
\81اده نمي‌شود. تنها در صورتي از نمايه‌ها
836 استÙ
\81اده مي‌شود كه اندازه جدول از يك اندازه
837 Øداقل بزرگتر باشد Ùˆ درخواست هم Ù
\81قط قسمتي از
838 رديÙ
\81‌هاي جدول را انتخاب كرده باشد. دليل اين
839 كار آن است كه دسترسي‌هاي تصادÙ
\81ي به هاردديسك
840 كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
841 از خواندن مستقيم جدول يا خواندن ترتيبي
842 ركوردها كندتر باشد.
843 براي تعيين اينكه از نمايه استÙ
\81اده شود يا
844 خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
845 جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
846 ANALYZE به دست مي‌آيد. با استÙ
\81اده از اين
847 اطلاعات،‌ بهينه ساز از تعداد رديÙ
\81‌هاي يك
848 جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
849 تعيين كند كه آيا از نمايه استÙ
\81اده شود يا خير.
850 اطلاعات آماري همچنين براي تعيين ترتيب الØاق
851 Ùˆ روشهاي الØاق به صورت بهينه نيز كاربر دارد.
852 جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
853 همزمان با تغيير داده‌هاي جدول انجام شود.
854 نمايه‌ها به طور معمول همراه با دستور ORDER BY
855 به كار برده نمي‌شوند. براي يك جدول بزرگ يك
856 پيمايش ترتيبي همراه با دستور مرتب سازي از به
857 كار بردن نمايه‌ها سريعتر خواهد بود.
858 اما اگر همراه با ORDER BY‌ از LIMIT استÙ
\81اده شود
859 اغلب از نمايه‌ها استÙ
\81اده مي‌شود چون Ù
\81قط
860 قسمتي از جدول استÙ
\81اده مي‌شود. در Øقيقت هر
861 چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙ
\81اده
862 نمي‌كنند ولي مي‌توانيم با استÙ
\81اده از دستور
863 زير با استÙ
\81اده از نمايه‌ها و دستور ORDER BY و
864 LIMIT‌ آنها را به دست آوريم.
867 ORDER BY col [ DESC ]
869 اگر شما Ù
\81كر مي‌كنيد كه بهينه ساز سيستم در
870 انتخاب پيمايش ترتيبي اشتباه كرده است با
871 دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
872 استÙ
\81اده از نمايه‌ها باعث اÙ
\81زايش سرعت
873 درخواست‌ها خواهد شد.
874 استÙ
\81اده از نمايه‌ها هنگامي كه از علائم ويژه
875 نظير LIKE Ùˆ ~ استÙ
\81اده مي‌كنيد Ù
\81قط در بعضي
876 شرايط خاصي كه در اينجا ذكر شده است ممكن است:
877 ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
878 باشد براي مثال:
879 دستورات LIKE نبايد با علامت % شروع شوند
880 الگوهاي منظمي كه با ~ مي‌ايد Øتماً بايد با
881 علامت ^ شروع شود
882 رشته جستجو نبايد با يك مجموعه از
883 كاراكتر‌ها مثل [a-e] شروع شود
884 جستجوهاي غيرØساس به متن مثل ILIKE‌ Ùˆ *~ از
885 نمايه‌ها استÙ
\81اده نمي‌كنند. در عوض از
886 توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
887 استÙ
\81اده مي‌كنند.
888 مقدار پيش Ù
\81رض locale‌ بايد در initdb استÙ
\81اده شود.
890 4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
891 توسط بهينه‌ساز درخواستها مشاهده كنم؟
892 راهنماي دستور EXPLAIN را نگاه كنيد.
893 4.10) نمايه R-tree‌ چيست؟
894 از نمايه R-Tree براي انديس كردن داده‌هاي
895 Ù
\81اصله‌اي استÙ
\81اده مي‌شود. يك نمايه hash
896 نمي‌توانند جستجوهاي Ù…Øدوده‌اي را انجام
897 دهد. نمايه "B-tree" نيز براي انجام جستجوي
898 Ù…Øدوده‌اي در يك جهت قابل استÙ
\81اده است. اما
899 R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
900 پشتيباني كند. براي مثال استÙ
\81اده اگر از نمايه
901 R-tree‌ براي گونه Point استÙ
\81اده شود سرعت
902 درخواست‌هايي نظير "select all points within a bounding
903 rectangle" به مراتب اÙ
\81زايش مي‌يابد.
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 استÙ
\81اده از GEQO سرعت بهينه سازي درخواست را
914 هنگاميكه تعداد زيادي جدول را با استÙ
\81اده از
915 الگوريتم ژنتيك الØاق مي‌كنيم اÙ
\81زايش
917 4.12) چگونه از عبارات منظم براي جستجو استÙ
\81اده
918 كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
919 نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
920 از نمايه استÙ
\81اده كنم؟
921 براي جستجوي عبارت منظم از عملگر ~‌ استÙ
\81اده
922 مي‌كنيم. براي جستجوي غير Øساس به متن از
923 عملگر *~ Ùˆ يا ILIKE‌ استÙ
\81اده مي‌كنيم.
924 روش ديگر انجام جستجوي غير Øساس به متن در زير
925 نشان داده شده است.
928 WHERE lower(col) = 'abc';
929 اين از نمايه‌هاي استاندارد استÙ
\81اده
930 نمي‌كند. ولي شما مي توانيد با دستور زير يك
931 نمايه ايجاد كنيد Ùˆ از آن استÙ
\81اده كنيد.
932 CREATE INDEX tabindex ON tab (lower(col));
933 4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
934 كه يك Ù
\81يلد NULL‌ است؟
935 با استÙ
\81اده از توابع IS NULL و IS NOT NULL مي‌توانيم
936 NULL بودن يك Ù
\81يلد را تست كنيم.
937 4.14) تÙ
\81اوت بين گونه‌هاي مختلÙ
\81 character چيست؟
938 Type Internal Name Notes
939 --------------------------------------------------
940 VARCHAR(n) varchar اندازه، Øداكثر طول را نشان مي دهد بدون اضاÙ
\81Ù‡ شدن كاراكتر اضاÙ
\81Ù‡
941 CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙ
\81اده مي‌شود
942 TEXT text Øداكثر طول را مشخص نمي‌كند
943 BYTEA bytea آرايه‌اي از بايت با طول متغير
944 "char" char يك كاراكتر
945 نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
946 پيغامهاي خطا مي‌توان ديد.
947 چهار گونه اول همگي از نوع varlena هستند (4 بايت
948 اول روي ديسك طول را مشخص مي‌كند كه به دنبال
949 آن داده‌ها قرار دارند.)‌بنابراين Ù
\81ضاي
950 واقعي استÙ
\81اده شده روي ديسك از اندازه تعريÙ
\81
951 شده بيشتر است. اما اين گونه‌ها را مي‌توان
952 Ù
\81شرده كرد كه اينكار باعث مي‌شود Ù
\81ضاي كمتري
953 روي ديسك اشغال كنند.
954 براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
955 بهترين انتخاب است. در اين گونه Øداكثر طول
956 رشته Ù…Øدود است بر خلاÙ
\81 text كه هيچ Ù…Øدوديتي
957 روي Øداكثر اندازه رشته نمي‌گذارد.(در اين
958 گونه Øداكثر طول يك رشته يك گيگا بايت خواهد
960 گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
961 است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
962 (خالي) پر مي‌شود تا به طول مشخص شده برسد در
963 Øاليكه گونه VARCHAR كاراكترها را به همان صورت
964 كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
965 داده‌هاي باينري است به خصوص داده‌هاي
966 باينتري كه شامل بايت‌هاي NULL هستند. از نظر
967 كارايي تمام اين گونه‌ها يكسان هستند.
968 4.15.1) چگونه مي‌توانم يك Ù
\81يلد سريال يا
969 اÙ
\81زايشي ايجاد كنم؟
970 PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
971 براي ايجاد يك Ù
\81يلد سريال (براي داشتن يك Ù
\81يلد
972 منØصر به Ù
\81رد براي هر رديÙ
\81 )به روش زير عمل
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‌هر رديÙ
\81 به عنوان يك مقدار منØصر به Ù
\81رد
988 استÙ
\81اده كرد. اما در اين Øالت براي dump كردن Ùˆ
989 reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
990 با گزينه o-‌ اجرا كنيد.
991 4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
993 يك روش براي گرÙ
\81تن مقدار بعدي يك Ù
\81يلد سريال
994 استÙ
\81اده از تابع ()nextval است. در شبه ÙƒÙ
\8fدي كه در
995 ادامه آمده است روش انجام اين كار نشان داده
997 new_id = execute("SELECT nextval('person_id_seq')");
998 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
999 با اجرا دستور Ù
\81وق مقدار جديد را در متغير new_id
1000 نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
1001 درخواست‌هاي نيز استÙ
\81اده كنيد. توجه داشته
1002 باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
1003 شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
1004 در آن table‌ نام جدول Ùˆ serialcolumn نام Ù
\81يلد سريال
1005 جدول مي‌باشد.
1006 براي ديدن مقدار نسبت داده شده به Ù
\81يلد سريال
1007 نيز مي‌توان از تابع () currval به صورت زير
1008 استÙ
\81اده كرد.
1009 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
1010 new_id = execute("SELECT currval('person_id_seq')");
1011 و سرانجام شما مي‌توانيد از مقدار OID كه خروجي
1012 دستور INSERT است براي ديدن مقدار پيش Ù
\81رض
1013 استÙ
\81اده كنيد. هر چند اين روش در همه پلتÙ
\81رمها
1014 قابل استÙ
\81اده نيست Ùˆ ضمن اينكه Ù
\81يلد oid‌ بعد
1015 از عدد 4 ميليارد دوباره صÙ
\81ر مي‌شود. در زبان
1016 perl با استÙ
\81اده از DBI و DBD::Pg مقدار oid‌را
1017 مي‌توانيد به شكل زير استخراج كنيد: بعد از
1018 اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$
1019 ذخيره خواهد شد.
1020 4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
1021 شرایط race برای سایر کاربران می شوند؟
1022 خیر، استÙ
\81اده از این توابع شرایط race را به
1023 وجود نمی آورد.
1024 4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
1025 شده مجدداً استÙ
\81اده نمی شود؟ چرا بین اعداد
1026 سریالی یک Ù
\81اصله خالی ایجاد می شود؟
1027 برای بالا بردن امکان اجرای همزمان تراکنشها،
1028 اعداد سریالی به Ù…Øض اجرای تراکنش به آنها
1029 تخصیص Ù…ÛŒ یابد در این Øالت اگر بعضی از
1030 تراکنشها abort شوند بین اعداد سریالی استÙ
\81اده
1031 شده یک Ù
\81اصله خالی به وجود می آید.
1032 4.16) OID و TID چه هستند؟
1033 OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه منØصر به
1034 Ù
\81رد برای هر ردیÙ
\81 است. هر ردیÙ
\81 جدیدی که ایجاد
1035 Ù…ÛŒ شود یک OID منØصر به Ù
\81رد به آن اختصاص می
1036 یابد. تمام OIDهایی Ú©Ù‡ در Øین initdb ایجاد Ù…ÛŒ شوند
1037 از 16384 کمتر هستند و OIDهایی بعداً تولید می شود
1038 از این عدد بزرگتر خواهد بود. نکته مهم آن است
1039 که OIDها نه تنها در یک جدول شبیه نیستند بلکه
1040 در Ú©Ù„ پایگاه داده هیچ دو ردیÙ
\81ی دارای OID یکسان
1041 نخواهد بود.
1042 PostgreSQL از OID در سیستم داخلی خود برای ایجاد
1043 ارتباط بین ردیÙ
\81های جداول مختلÙ
\81 استÙ
\81اده می
1044 کند. توصیه می شود که یک ستون از نوع OID برای
1045 ذخیره این Ù
\81یلد در جدول ایجاد کنید. ساختن یک
1046 نمایه برای این Ù
\81یلد باعث دسترسی سریعتر به آن
1048 تمام پایگاههای داده در PostgreSQL برای گرÙ
\81تن OID
1049 جدید از یک ناØیه مرکزی استÙ
\81اده می کند. ولی
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 کسی این اتÙ
\81اق Ù†ÛŒÙ
\81تاده است و تصمیم گرداندگان
1064 PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتÙ
\81اق رخ دهد
1065 این مشکل را برطرÙ
\81 کنند.
1066 TIDها برای شناسایی Ù…ØÙ„ Ù
\81یزیکی یک ردیÙ
\81 بر اساس
1067 بلوک Ùˆ Ø¢Ù
\81ست می باشد. TIDها بعد از تغییر پیدا
1068 کردن یک ردیÙ
\81 و یا بازخوانی آن عوض می شوند.
1069 TIDها توسط نمایه ها استÙ
\81اده می شوند.
1070 4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
1071 استÙ
\81اده مي‌شود چيست؟
1072 لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استÙ
\81اده می
1074 table, relation, class :کلاس، رابطه، جدول
1075 row, record, tuple چندتایی، رکورد، ردیÙ
\81
1076 column, field, attribute صÙ
\81ت، Ù
\81یلد، ستون
1077 retrieve, select انتخاب، خواندن
1078 replace, updateبه روز کردن، جایگزینی
1079 append, insert درج، اضاÙ
\81ه کردن
1080 OID, serial value مقدار سریال
1082 range variable, table name, table alias
1083 یک لیست عمومی از ترمهای مورد استÙ
\81اده در
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 این خطا اØتمالاً یا به خاطر تمام شدن ØاÙ
\81ظه
1090 مجازی سیستم شماست و یا اینکه کرنل برای
1091 برنامه ها در مورد میزان استÙ
\81اده از ØاÙ
\81ظه
1092 مجازی Ù…Øدودیت اعمال کرده است. قبل از اجرای
1093 برنامه اصلی یکی از دستورات زیر را اجرا کنید.
1096 بسته به نوع شل یکی از این دستورات ممکن است با
1097 موÙ
\81قیت اجرا شود. با اجرای آن دستور Ù…Øدودیت
1098 ØاÙ
\81ظه مجازی برای برنامه ها برداشته شده و با
1099 این کار اØتمالاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
1100 داده است اجرا خواهد شد.
1101 4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
1102 PostgreSQLيي كه من استÙ
\81اده مي‌كنم چيست؟
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 تراکنش استÙ
\81اده کنید. این کار همانطور که
1114 قبلاً Ú¯Ù
\81ته شد با استÙ
\81اده از قرار دادن BEGIN و END
1115 در ابتدا و انتهای دستورات انجام می شود.
1116 اگر این خطا را در Øین استÙ
\81اده از یک درایور ODBC
1117 دریاÙ
\81ت کردید اØتمالاً باید این دستور را
1118 اجرا کنید: set auto-commit off
1119 4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
1120 جاري را به عنوان مقدار پيش‌Ù
\81رض داشته باشد؟
1121 از CURRENT_TIMESTAMP استÙ
\81اده کنید در مثال زیر Ù†Øوه
1122 انجام این کار نشان داده شده است:
1123 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1125 4.22) چرا "زير درخواستهايي" كه از IN استÙ
\81اده
1126 مي‌كنند كند هستند؟
1127 در نسخه های قبل از 7.4 عمل الØاق زیر درخواست Ùˆ
1128 درخواست اصلی به این صورت انجام می شود که
1129 نتایج به دست آمده از زیر درخواست به صورت
1130 ترتیبی برای هر ردیÙ
\81 اعمال می شود. اگر
1131 زیردرخواست ردیÙ
\81 های کمی را به عنوان خروجی
1132 برگرداند Ùˆ درخواست بیرونی ردیÙ
\81 های زیادی را
1133 شامل شود استÙ
\81اده از IN بهترین روش است در غیر
1134 اینصورت بهتر است از EXISTS استÙ
\81اده شود
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 تکنیک پیچیده مورد استÙ
\81اده در دستورات معمولی
1146 استÙ
\81اده Ù…ÛŒ کند Ùˆ بنابراین استÙ
\81اده از آن نسبت
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 کند Ùˆ همچنین ردیÙ
\81های t1 که نظیر آنها در t2
1158 نبوده است را نیز برمی گرداند. اگر از RIGHT
1159 استÙ
\81اده شود نتیجه بر عکس است. یعنی ردیÙ
\81های t2
1160 که نظیر آنها در t1 نباشد را نشان می دهد و اگر
1161 از FULL استÙ
\81اده شود نتیجه هم شامل ردیÙ
\81های t1
1162 است Ùˆ هم شامل ردیÙ
\81های t2. استÙ
\81اده از کلمه 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 Ù
\81قط امکان درخواست از پایگاه داده ای را می
1181 دهد Ú©Ù‡ در Øال Øاضر به آن متصل باشید Ùˆ نمی
1182 توان به طور همزمان از دو پایگاه داده استÙ
\81اده
1183 کرد. البته یک برنامه کاربردی خود می تواند به
1184 طور همزمان دو پایگاه داده را مورد استÙ
\81اده
1185 قرار داده و نتایج را با هم ترکیب کند ولی نمی
1186 تواند در یک درخواست به هر دو پایگاه داده
1188 4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
\81
1189 يا ستون باشد؟
1190 در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردیÙ
\81 یا
1191 چند ستون باشد. برای دیدن اطلاعات بیشتر به
1192 سایت زیر مراجعه
1193 کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions
1194 4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
1195 جداول موقت را ايجاد يا ØØ°Ù
\81 كرد؟
1196 PL/PgSQL Ù…Øتوای توابع را ذخیره (cache) Ù…ÛŒ کند. یک
1197 اثر بد جانبی این کار آن است که اگر در تابع از
1198 یک جدول موقت استÙ
\81اده شود Ùˆ بعداً آن جدول ØØ°Ù
\81
1199 و یک جدول جدید به جای آن ایجاد شود، در
1200 Ù
\81راخوانی مجدد آن تابع، Ù…Øتوای ذخیره شده
1201 تابع هنوز به جدول قدیمی اشاره می کند و
1202 بنابراین اجرای تابع با اشکال مواجه می شود.
1203 راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از
1204 دستور EXECUTE استÙ
\81اده شود که این کار سبب می شود
1205 که درخواست برای هر بار اجرا مجدداً پیمایش و
1206 تÙ
\81سیر شود.
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 استÙ
\81اده کرد.
1217 برای رمز کردن ارتباط بین client و server ، پایگاه
1218 داده Øتماً گزینه SSL را بر روی پایگاه داده
1219 Ù
\81عال کنیم.
1220 در نسخه 7.3 به بعد کلمات عبور کاربران به طور
1221 اتوماتیک به صورت رمز شده ذخیره می شود ولی
1222 در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در
1223 Ù
\81ایلpostgresql.conf Ù
\81عال کنیم.
1224 Ù…ÛŒ توان پایگاههای داده را روی یک Ù
\81ایل سیستم
1225 رمزشده نگاهداری کرد
1229 Extending PostgreSQL
1230 5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
1231 اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
1232 دلایل مختلÙ
\81ی می تواند باعث بروز این مشکل
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) من يك Ù
\81ايل منبع را عوض كرده ام چرا در
1248 عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
1249 Makefile برای Ù
\81ایلهای include شده وابستگیها را به
1250 درستی نشان نمی دهد. برای اطمینان از اینکه
1251 Ù
\81ایلی Ú©Ù‡ عوض کرده اید Øتماً دوباره کامپیل Ù…ÛŒ
1252 شود دستور make clean را اجرا کنید. اگر از کامپیلر
1253 gcc استÙ
\81اده می کنید می توانید از گزینه
1254 enable-depend-- در موقع اجرای برنامه configure استÙ
\81اده
1255 کنید این گزینه باعث می شود که وابستگیها به
1256 طور اتوماتیک تولید شود.