2005-05-28 02:09:42 +04:00
|
|
|
|
PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
|
|
|
|
|
پرسيده مي شوند
|
|
|
|
|
تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ùايل: 28 شهریور 1383 هجری
|
|
|
|
|
شمسی
|
|
|
|
|
نگهدارنده اصلي Ùايل (زبان انگليسي)در Øال
|
|
|
|
|
Øاضر : Bruce Momjian pgman@candle.pha.pa.us
|
|
|
|
|
نگهدارنده Ùايل به زبان Ùارسي: m.taghizadeh@imenafzar.net
|
|
|
|
|
Ù…Øمود تقي‌زاده مهرجردی
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
آخرين نسخه اين Ùايل را مي‌توانيد از اين
|
|
|
|
|
آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
|
|
|
|
|
سوالاتي كه در مورد يك سکوی(پلتÙرم) خاص است در
|
|
|
|
|
اين آدرس جواب داده شده اند
|
|
|
|
|
http://www.PostgreSQL.org/docs/index.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
سوالات عمومي
|
|
|
|
|
1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙظ كرد؟
|
|
|
|
|
1.2) قانون كپي رايت‌ (Øقوق معنوي) در مورد
|
|
|
|
|
PostgreSQL به چه صورت است؟
|
|
|
|
|
1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
|
|
|
|
|
مي‌شود؟
|
|
|
|
|
1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
|
|
|
|
|
اجرا كرد؟
|
|
|
|
|
1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
|
|
|
|
|
1.6) از كجا خدمات پشتيباني بگيرم؟
|
|
|
|
|
1.7) آخرين نسخه اعلام شده چيست؟
|
|
|
|
|
1.8) چه مستندات و راهنمائيهايي وجود دارند؟
|
|
|
|
|
1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
|
|
|
|
|
امكاناتي كه در اين پايگاه داده وجود ندارد
|
|
|
|
|
مطلع شوم؟
|
|
|
|
|
1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
|
|
|
|
|
1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
|
|
|
|
|
1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
|
|
|
|
|
ملØÙ‚ شوم؟
|
|
|
|
|
1.13) چگونه مي‌توانم يك اشكال را به گروه
|
|
|
|
|
برنامه نويس اعلام كنم؟
|
|
|
|
|
1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
|
|
|
|
|
چه صورت است؟
|
|
|
|
|
1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
|
|
|
|
|
كمك كنم؟
|
|
|
|
|
|
|
|
|
|
سوالات مربوط به استÙاده از پايگاه داده
|
|
|
|
|
2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
|
|
|
|
|
2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
|
|
|
|
|
صÙØات وب وجود دارد؟
|
|
|
|
|
2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
|
|
|
|
|
2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
|
|
|
|
|
PostgreSQL‌ ارتباط برقرار كرد؟
|
|
|
|
|
|
|
|
|
|
سوالات مربوط به راهبري
|
|
|
|
|
3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
|
|
|
|
|
از /usr/local/pgsql/ نصب كنم؟
|
|
|
|
|
3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
|
|
|
|
|
كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
|
|
|
|
|
3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
|
|
|
|
را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
|
|
|
|
|
3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
|
|
|
|
را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
|
|
|
|
|
3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
|
|
|
|
|
كنترل كنم؟
|
|
|
|
|
3.6) براي كارايي بالاتر و بهتر پايگاه داده من
|
|
|
|
|
چه تنظيماتي را بايد انجام دهم؟
|
|
|
|
|
3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
|
|
|
|
|
دارد؟
|
|
|
|
|
3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
|
|
|
|
|
وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
|
|
|
|
|
3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
|
|
|
|
|
3.10) چرا براي به روز كردن نسخه پايگاه داده من
|
|
|
|
|
بايد كل داده ها را dump‌ و مجدداً restore كنم؟
|
|
|
|
|
3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
|
|
|
|
|
|
|
|
|
|
سوالات عملياتي
|
|
|
|
|
4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
|
|
|
|
|
4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
|
|
|
|
|
يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
|
|
|
|
|
4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
|
|
|
|
|
چيزهايي كه در psql‌ وجود دارد را ببينم؟
|
|
|
|
|
4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
|
|
|
|
|
نوع داده آن را عوض كنيم؟
|
|
|
|
|
4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
|
|
|
|
|
پايگاه داده چقدر است؟
|
|
|
|
|
4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
|
|
|
|
|
داده‌‌هاي يك Ùايل متني مورد نياز است؟
|
|
|
|
|
4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
|
|
|
|
|
پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
|
|
|
|
|
شده است؟
|
|
|
|
|
4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
|
|
|
|
|
چرا از نمايه ها استÙاده نمي‌كنند؟
|
|
|
|
|
4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
|
|
|
|
|
توسط بهينه‌ساز درخواستها مشاهده كنم؟
|
|
|
|
|
4.10) نمايه R-tree‌ چيست؟
|
|
|
|
|
4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
|
|
|
|
|
Optimizer)
|
|
|
|
|
4.12) چگونه از عبارات منظم براي جستجو استÙاده
|
|
|
|
|
كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
|
|
|
|
|
نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
|
|
|
|
|
از نمايه استÙاده كنم؟
|
|
|
|
|
4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
|
|
|
|
|
كه يك Ùيلد NULL‌ است؟
|
|
|
|
|
4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
|
|
|
|
|
4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
|
|
|
|
|
اÙزايشي ايجاد كنم؟
|
|
|
|
|
4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
|
|
|
|
|
بدانم؟
|
|
|
|
|
4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
|
|
|
|
|
شرایط race برای سایر کاربران می شوند؟
|
|
|
|
|
4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
|
|
|
|
|
شده مجدداً استÙاده نمی شود؟ چرا بین اعداد
|
|
|
|
|
سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟
|
|
|
|
|
4.16) OID و TID چه هستند؟
|
|
|
|
|
4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
|
|
|
|
|
استÙاده مي‌شود چيست؟
|
|
|
|
|
4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
|
|
|
|
|
مي‌گيرم؟
|
|
|
|
|
4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
|
|
|
|
|
PostgreSQLيي كه من استÙاده مي‌كنم چيست؟
|
|
|
|
|
4.20) چرا در Øین اجرای عملیات روی large-objectها
|
|
|
|
|
خطای "invalid large obj descriptor"به وجود می آید؟
|
|
|
|
|
4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
|
|
|
|
|
جاري را به عنوان مقدار پيش‌Ùرض داشته باشد؟
|
|
|
|
|
4.22) چرا زير درخواستهايي كه از IN استÙاده
|
|
|
|
|
مي‌كنند كند هستند؟
|
|
|
|
|
4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
|
|
|
|
|
انجام دهم؟
|
|
|
|
|
4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
|
|
|
|
|
داده توليد كرد؟
|
|
|
|
|
4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
|
|
|
|
|
يا ستون باشد؟
|
|
|
|
|
4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
|
|
|
|
|
جداول موقت را ايجاد يا Øذ٠كرد؟
|
|
|
|
|
4.27) چه گزينه‌هايي براي تكرار (replication) وجود
|
|
|
|
|
دارد؟
|
|
|
|
|
4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
|
|
|
|
|
|
|
|
|
|
توسعه PostgreSQL
|
|
|
|
|
5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
|
|
|
|
|
اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
|
|
|
|
|
5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
|
|
|
|
|
جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
|
|
|
|
|
داشته باشم.
|
|
|
|
|
5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
|
|
|
|
|
كه خروجي آن يك ‌tuple (چند تايي) باشد؟
|
|
|
|
|
5.4) من يك Ùايل منبع را عوض كرده ام چرا در
|
|
|
|
|
عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
سوالات عمومي
|
|
|
|
|
1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙظ كرد؟
|
|
|
|
|
PostgreSQL به صورت Post-Gres-Q-L‌ تلÙظ مي‌شود. يك Ùايل
|
|
|
|
|
صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
|
|
|
|
|
كساني كه مايلند تلÙظ صØÙŠØ Ø±Ø§ بشنوند وجود
|
|
|
|
|
دارد.
|
|
|
|
|
PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
|
|
|
|
|
توسعه داده شده است (هنوز هم بعضي مواقع براي
|
|
|
|
|
سادگي به آن Postgres Ú¯Ùته مي‌شود) كه يك نمونه
|
|
|
|
|
تØقيقاتي از پايگاه داده‌هاي نسل بعد است.
|
|
|
|
|
PostgreSQL همان الگوي داده قوي و انواع داده را
|
|
|
|
|
ØÙظ كرده است ولي زبان PostQuel را با يك
|
|
|
|
|
زيرمجموعه پيشرÙته از SQL جايگزين كرده است.
|
|
|
|
|
PostgreSQL متن باز بوده و متن كامل آن در دسترس
|
|
|
|
|
است.
|
|
|
|
|
PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در
|
|
|
|
|
گروه پست الكترونيك برنامه‌نويسان PostgreSQL
|
|
|
|
|
عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي
|
|
|
|
|
در Øال Øاضر Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org
|
|
|
|
|
مي‌باشد. (براي ديدن Ù†Øوه ملØÙ‚ شدن به اين تيم
|
|
|
|
|
قسمت 1.6 را ببينيد). اين تيم در Øاضر مسئوليت
|
|
|
|
|
تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را
|
|
|
|
|
بر عهده دارد. اين يك پروژه گروهي است Ùˆ تØت
|
|
|
|
|
كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در
|
|
|
|
|
مورد اين تيم به آدرس
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد.
|
|
|
|
|
اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به
|
|
|
|
|
وجود آمد. اÙراد بسياري در توسعه Ùˆ رÙع اشكال Ùˆ
|
|
|
|
|
انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
|
|
|
|
|
PostgreSQL از روي آن نوشته شده است، توسط تعداد
|
|
|
|
|
زيادي دانشجوي كارشناسي ارشدو دانشجوي
|
|
|
|
|
كارشناسي Ùˆ تيم برنامه‌نويسي كه تØت نظر
|
|
|
|
|
پروÙسور Michael Stonebrake در دانشگاه
|
|
|
|
|
بركلي،‌كاليÙرنيا كار مي‌كرده‌اند نوشته
|
|
|
|
|
شده است.
|
|
|
|
|
نام اصلي نرم اÙزار در دانشگاه بركلي Postgres‌
|
|
|
|
|
بود. در سال 1995 بعد از اضاÙÙ‡ شدن SQL نام آن به
|
|
|
|
|
Postgres95 تغيير داده شد. در سال 1996 نام آن به
|
|
|
|
|
PostgreSQL تغيير داده شد.
|
|
|
|
|
1.2) قوانين كپي رايت در مورد PostgreSQL به چه صورت
|
|
|
|
|
است؟
|
|
|
|
|
PostgreSQL تØت قانون كپي رايت زير قرار دارد:
|
|
|
|
|
PostgreSQL Data Base Management System
|
|
|
|
|
Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions
|
|
|
|
|
Copyright (c) 1994-6 Regents of the University of California
|
|
|
|
|
Permission to use, copy, modify, and distribute this software and its
|
|
|
|
|
documentation for any purpose, without fee, and without a written agreement is
|
|
|
|
|
hereby granted, provided that the above copyright notice and this paragraph and
|
|
|
|
|
the following two paragraphs appear in all copies.
|
|
|
|
|
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
|
|
|
|
|
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST
|
|
|
|
|
PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
|
|
|
|
|
THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
|
|
|
|
|
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
|
|
|
PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND
|
|
|
|
|
THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
|
|
|
|
|
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
|
|
|
|
|
قانون بالا ليسانس BSD كه يك ليسانس كلاسيك
|
|
|
|
|
براي متن‌هاي باز است مي‌باشد. هيچ Ù…Øدوديتي
|
|
|
|
|
در مورد Ù†Øوه استÙاده از متن در آن ديده
|
|
|
|
|
نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
|
|
|
|
|
تغيير آن نداريم.
|
|
|
|
|
1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
|
|
|
|
|
مي‌شود؟
|
|
|
|
|
در Øالت كلي PostgreSQL روي هر پلتÙرم (سكوي) سازگار
|
|
|
|
|
با يونيكس اجرا مي‌شود. ليست پلتÙرمهايي كه
|
|
|
|
|
تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
|
|
|
|
|
درقسمت دستورالعملهاي نصب آمده است.
|
|
|
|
|
1.4) روي Ú†Ù‡ Ù…Øيطهاي غير يونيكسي مي‌توان آن را
|
|
|
|
|
اجرا كرد؟
|
|
|
|
|
Client
|
|
|
|
|
مي‌توان psql, كتابخانه libpq و ساير واسطها و
|
|
|
|
|
برنامه‌هاي كاربردي را طوري كامپيل كرد كه
|
|
|
|
|
روي Ù…Øيطهاي ويندوز نيز اجرا شوند. در اين
|
|
|
|
|
Øالت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
|
|
|
|
|
شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙرم
|
|
|
|
|
لينوكس در Øال اجراست ارتباط برقرار
|
|
|
|
|
مي‌كند.يك Ùايل win32.mak همراه با كدهاي PostgreSQL
|
|
|
|
|
وجود دارد كه براي كامپيل كردن كتابخانه libpq و
|
|
|
|
|
برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
|
|
|
|
|
ارتباط به صورت ODBC‌ را نيز دارد.
|
|
|
|
|
Server
|
|
|
|
|
با استÙاده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان
|
|
|
|
|
پايگاه داده را روي ويندوز NT و يا Win2K اجرا
|
|
|
|
|
كرد.براي ديدن اطلاعات بيشتر Ùايل pgsql/doc/FAQ_MSWIN
|
|
|
|
|
‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
|
|
|
|
|
ببينيد Ùˆ يا اينكه به اين صÙØÙ‡
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد.
|
|
|
|
|
در Øال Øاضر يك عمليات انتقال PostgreSQL به روي
|
|
|
|
|
سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت
|
|
|
|
|
اين پروژه به سايت‌هاي
|
|
|
|
|
http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ
|
|
|
|
|
http://techdocs.postgresql.org/guides/Windows مراجعه كنيد.
|
|
|
|
|
همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز
|
|
|
|
|
در Øال انجام است كه در سايت http://forge.novell.com
|
|
|
|
|
مي‌توانيد اطلاعات بيشتر را ببينيد.
|
|
|
|
|
1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
|
|
|
|
|
PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub
|
|
|
|
|
مي‌توانيد بگيريد. در صÙØÙ‡ اصلي سايت ليست
|
|
|
|
|
ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
|
|
|
|
|
آنها بگيريد آمده است.
|
|
|
|
|
1.6) از كجا خدمات پشتيباني بگيرم؟
|
|
|
|
|
گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين
|
|
|
|
|
گروه براي بØØ« در مورد موضوعات مختل٠در زمينه
|
|
|
|
|
PostgreSQL است. براي عضو شدن در اين گروه پستي يك
|
|
|
|
|
نامه الكترونيكي به آدرس گروه با Ù…Øتوياتی كه
|
|
|
|
|
در ادامه آمده است ارسال كنيد. در قسمت Subject
|
|
|
|
|
چيزي ننويسيد.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
subscribe
|
|
|
|
|
end
|
2005-05-28 02:09:42 +04:00
|
|
|
|
آدرس گروه: pgsql-general-request@PostgreSQL.org
|
|
|
|
|
همچنين يك گروه پستي هم به صورت ارسال چكيده
|
|
|
|
|
پيامها وجود دارد. براي عضو شدن در اين گروه يك
|
|
|
|
|
نامه با Ù…Øتويات زير به این آدرس ارسال كنيد.
|
|
|
|
|
pgsql-general-digest-request@PostgreSQL.org
|
2004-09-29 20:23:16 +04:00
|
|
|
|
subscribe
|
|
|
|
|
end
|
2005-05-28 02:09:42 +04:00
|
|
|
|
در اين گروه هر موقع Øجم نامه‌ها به 30
|
|
|
|
|
كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
|
|
|
|
|
گروه پستي بررسي اÙشكالات هم وجود دارد. براي
|
|
|
|
|
عضو شدن در اين گروه يك نامه با Ù…Øتويات زير به
|
|
|
|
|
pgsql-bugs-request@PostgreSQL.org ارسال كنيد.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
subscribe
|
|
|
|
|
end
|
2005-05-28 02:09:42 +04:00
|
|
|
|
گروه پستي مخصوص توسعه دهندگان
|
|
|
|
|
(برنامه‌نويسان) نيز وجوددارد. براي عضويت در
|
|
|
|
|
اين گروه يك نامه به آدرس زير با Ù…Øتويات مشخص
|
|
|
|
|
شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org
|
2004-09-29 20:23:16 +04:00
|
|
|
|
subscribe
|
|
|
|
|
end
|
2005-05-28 02:09:42 +04:00
|
|
|
|
گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
|
|
|
|
|
دارد كه مي‌توانيد در سايت http://www.postgresql.org
|
|
|
|
|
ببينيد.
|
|
|
|
|
همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
|
|
|
|
|
وجود دارد. شما مي‌توانيد از Ùرمان يونيكسي irc
|
|
|
|
|
-c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
|
|
|
|
|
irc.freenode.net استÙاده كنيد.
|
|
|
|
|
ليست شركتهايي كه از طريق آنها مي‌توانيد
|
|
|
|
|
خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙت
|
|
|
|
|
كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
|
|
|
|
|
موجود است.
|
|
|
|
|
1.7) آخرين نسخه اعلام شده چيست؟
|
|
|
|
|
آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
|
|
|
|
|
هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
|
|
|
|
|
ارائه شود.
|
|
|
|
|
1.8) چه مستندات و راهنمائيهايي وجود دارند؟
|
|
|
|
|
چندين كتابچه Ùˆ صÙØات راهنما Ùˆ مثالهاي كوچك
|
|
|
|
|
همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
|
|
|
|
|
دارد. براي ديدن صÙØات راهنما مي‌توانيد به
|
|
|
|
|
سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
|
|
|
|
|
دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
|
|
|
|
|
http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
|
|
|
|
|
وجود دارد. ليستي از كتابهايي كه قابل خريد
|
|
|
|
|
است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
|
|
|
|
|
وجود دارد. همچنين ليستي از مقالات Ùني در
|
|
|
|
|
مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
|
|
|
|
|
دارد.
|
|
|
|
|
برنامه psql يك دستور d\ دارد كه اطلاعاتي در
|
|
|
|
|
مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها
|
|
|
|
|
و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
|
|
|
|
|
ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
|
|
|
|
|
1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
|
|
|
|
|
امكاناتي كه در اين پايگاه داده وجود ندارد
|
|
|
|
|
مطلع شوم؟
|
|
|
|
|
PostgreSQL يك زير مجموعه پيشرÙته از SQL-92 را
|
|
|
|
|
پشتيباني مي‌كند. در ليست TODO اÙشكالات
|
|
|
|
|
شناخته شده يا امكاناتي كه وجود ندارد و يا
|
|
|
|
|
برنامه‌‌هاي آينده آمده است.
|
|
|
|
|
1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
|
|
|
|
|
كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
|
|
|
|
|
‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
|
|
|
|
|
http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي
|
|
|
|
|
خيلي خوب هم در سايت‌هاي
|
|
|
|
|
http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ
|
|
|
|
|
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ
|
|
|
|
|
http://sqlcourse.com در مورد SQL وجود دارد.
|
|
|
|
|
كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
|
|
|
|
|
استÙاده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
|
|
|
|
|
ويرايش دوم" در سايت
|
|
|
|
|
http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
|
|
|
|
|
تعداد زيادي از كاربران كتاب The Practical SQL را
|
|
|
|
|
ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
|
|
|
|
|
انتشارات McGraw-Hill مي‌باشد.
|
|
|
|
|
1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
|
|
|
|
|
خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
|
|
|
|
|
مشكلي ندارد.
|
|
|
|
|
1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
|
|
|
|
|
ملØÙ‚ شوم؟
|
|
|
|
|
ابتدا،‌آخرين سورس را دونلود كرده و مستندات
|
|
|
|
|
مربوط به برنامه‌نويسي PostgreSQL را در سايت
|
|
|
|
|
مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
|
|
|
|
|
pgsql-hackers عضو شويد. در مرØله آخر وصله‌هاي با
|
|
|
|
|
كيÙيت بالا را به pgsql-patches ارسال كنيد.
|
|
|
|
|
تعداد زيادي از برنامه‌نويسان وجود دارند كه
|
|
|
|
|
امتياز انجام تغييرات در cvs‌ را دارند. هر
|
|
|
|
|
كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت
|
|
|
|
|
بالا به گروه ارسال كرده‌اند كه اعتماد
|
|
|
|
|
گردانندگان PostgreSQL را به دست آورده‌اند.
|
|
|
|
|
1.13) چگونه مي‌توانم يك اÙشكال را به گروه
|
|
|
|
|
برنامه نويس اعلام كنم؟
|
|
|
|
|
لطÙاً صÙØÙ‡ مربوط به اÙشكالات PostgreSQL را در
|
|
|
|
|
سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
|
|
|
|
|
اين سايت Ù†Øوه گزارش Ùˆ ارسال يك اشكال توضيØ
|
|
|
|
|
داده شده است.
|
|
|
|
|
همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
|
|
|
|
|
يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
|
|
|
|
|
بازديد كنيد.
|
|
|
|
|
1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
|
|
|
|
|
چه صورت است؟
|
|
|
|
|
راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه
|
|
|
|
|
نرم‌اÙزارها وجود دارد كه عبارتند از
|
|
|
|
|
امكانات، كارايي، قابليت اعتماد، پشتيباني و
|
|
|
|
|
قيمت
|
|
|
|
|
امكانات
|
|
|
|
|
PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
|
|
|
|
|
پايگاه داده تجاري بزرگ نظير transactions, subselets,
|
|
|
|
|
triggers, views, foreign key referential integrity Ùˆ sophisticated
|
|
|
|
|
locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
|
|
|
|
|
دارد كه پايگاههاي داده ديگر آن را ندارند
|
|
|
|
|
نظير user-defined types‌و Inheritance‌و rules‌و multi-version
|
|
|
|
|
concurrency control
|
|
|
|
|
|
|
|
|
|
كارايي
|
|
|
|
|
كارايي PostgreSQL در Øد بقيه سيستم‌هاي
|
|
|
|
|
تجاري و متن باز است. در بعضي موارد سريعتر و
|
|
|
|
|
در بعضي موارد از آنها كندتر است. در مقايسه
|
|
|
|
|
با MySQL براي كاربران بيشتر و درخواست‌هاي
|
|
|
|
|
پيچيده و بار زياد خواندن/نوشتن سريعتر است.
|
|
|
|
|
در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
|
|
|
|
|
البته MySQL خيلي از امكانات PostgreSQL كه در بالا
|
|
|
|
|
به آن اشاره شد را ندارد. هد٠اصلي ما امكانات
|
|
|
|
|
و قابليت اعتماد بالاست در ضمن آنكه تلاش
|
|
|
|
|
مي‌كنيم تا كارايي آن نيز بهبود يابد. در
|
|
|
|
|
آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
|
|
|
|
|
جالب بين MySQL و PostgreSQL وجود دارد. از طر٠ديگر
|
|
|
|
|
MySQL‌ يك شركت است كه Ù…Øصول خود را به صورت متن
|
|
|
|
|
باز ارائه مي‌كند ولي براي نرم‌اÙزار غير
|
|
|
|
|
متن باز خود اØتياج به ليسانس تجاري دارد بر
|
|
|
|
|
خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند.
|
|
|
|
|
|
|
|
|
|
قابليت اطمينان
|
|
|
|
|
ما Ùكر مي‌كنيم كه يك سيستم پايگاه
|
|
|
|
|
داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
|
|
|
|
|
تمام تلاشمان را براي ارائه كدهاي پايداري
|
|
|
|
|
كه به خوبي تست شده باشند Ùˆ كمترين اÙشكالات
|
|
|
|
|
را داشته باشند مي‌كنيم. هر نسخه جديدي كه
|
|
|
|
|
ارائه مي‌شود Øداقل يك ماه را در مرØله تست
|
|
|
|
|
بتا مي‌گذراند. ما بر اين باور هستيم كه
|
|
|
|
|
قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
|
|
|
|
|
سيستم‌هاي پايگاه داده قابل توجه است و
|
|
|
|
|
نسخه‌هايي كه تاكنون ارائه شده است نشان
|
|
|
|
|
مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
|
|
|
|
|
Ù…Øكم Ùˆ مطمئن را كه آماده بهره‌برداري است
|
|
|
|
|
داريم.
|
|
|
|
|
پشتيباني
|
|
|
|
|
گروههاي پستي ما امكان ارتباط و تماس به
|
|
|
|
|
گروه بزرگي از برنامه نويسان و كاربران را
|
|
|
|
|
مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
|
|
|
|
|
ديگران كمك كنند. دسترسي مستقيم به
|
|
|
|
|
برنامه‌نويسان و گروههاي كاربران و
|
|
|
|
|
راهنماها و كداصلي باعث مي‌شود كه
|
|
|
|
|
پشتيباني PostgreSQL نسبت به ساير پايگاههاي
|
|
|
|
|
داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
|
|
|
|
|
ارائه خدمات پشتيباني به صورت تجاري نيز
|
|
|
|
|
وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
|
|
|
|
|
section 1.6 مراجعه كنيد.
|
|
|
|
|
قيمت
|
|
|
|
|
هم براي استÙاده تجاري Ùˆ هم غير تجاري هيچ
|
|
|
|
|
هزينه‌اي نبايد پرداخت شود. هيچ Ù…Øدوديتي
|
|
|
|
|
براي انجام تغييرات در PostgreSQL توسط استÙاده
|
|
|
|
|
كنندگان وجود ندارد به جز مواردي كه در
|
|
|
|
|
ليسانس BSD به آن اشاره شده است.
|
|
|
|
|
1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
|
|
|
|
|
كمك كنم؟
|
|
|
|
|
PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
|
|
|
|
|
كه آن را مديون Marc Fournier‌ است كه اين ساختار را
|
|
|
|
|
ايجاد كرده است.
|
|
|
|
|
كيÙيت يك ساختار براي يك پروژه متن باز بسيار
|
|
|
|
|
اهميت دارد. يك ساختار خوب مي‌تواند مانع از
|
|
|
|
|
Øوادثي شود كه در Øركت روبه‌جلوي پروژه خللي
|
|
|
|
|
وارد مي‌كنند.
|
|
|
|
|
البته اين ساختار تشكيلاتي ارزان نيست.
|
|
|
|
|
هزينه‌هاي ثابت ماهانه و روزمره براي
|
|
|
|
|
نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر
|
|
|
|
|
شما يا شركت شما مايل است كه از نظر مالي به
|
|
|
|
|
اين Øركت كمك كند لطÙاً به سايت
|
|
|
|
|
http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
|
|
|
|
|
اهدا كنيد.
|
|
|
|
|
هر چند در صÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
|
|
|
|
|
است ولي مشاركت عمدتاً براي پشتيباني از
|
|
|
|
|
پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
|
|
|
|
|
اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
|
|
|
|
|
مشخص شده ارسال كنيد.
|
|
|
|
|
اگر يك استÙاده موÙÙ‚ از PostgreSQL سراغ داريد
|
|
|
|
|
لطÙاً آن را به سايت http://advocacy.postgresql.org گزارش
|
|
|
|
|
دهيد.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
سوالات مربوط به استÙاده از پايگاه داده
|
|
|
|
|
2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
|
|
|
|
|
دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
|
|
|
|
|
PostgreSQL‌ وجود دارد.
|
|
|
|
|
براي گرÙتن psqlODBC به سايت
|
|
|
|
|
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
|
|
|
|
|
كنيد.
|
|
|
|
|
OpenLlink را از اين سايت http://www.openlinksw.com
|
|
|
|
|
مي‌توانيد بگيريد. اين درايور با
|
|
|
|
|
نرم‌اÙزارهاي مختل٠ODBC كار مي‌كند بنابراين
|
|
|
|
|
شما قادر خواهيد بود با استÙاده از OpenLink روي
|
|
|
|
|
اكثر سكو‌هايي كه نرم‌اÙزارODBC‌دارند بدون
|
|
|
|
|
مشكل به PostgreSQL نيز متصل شويد.
|
|
|
|
|
اين Ù…Øصول به كساني كه اØتياج به خدمات
|
|
|
|
|
پشتيباني تجاري دارند Ùروخته مي‌شود. ولي
|
|
|
|
|
نسخه آزاد اين نرم‌اÙزار هميشه در درسترس
|
|
|
|
|
مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
|
|
|
|
|
را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد.
|
|
|
|
|
2.2) Ú†Ù‡ ابزارهايي براي استÙاده از PostgreSQL‌ با
|
|
|
|
|
صÙØات وب وجود دارد؟
|
|
|
|
|
در سايت http://www.webreview.com براي استÙاده از
|
|
|
|
|
PostgreSQL‌ در صÙØات وب راهنماييهاي خوبي وجود
|
|
|
|
|
دارد.
|
|
|
|
|
براي تركيب Ùˆ استÙاده در صÙØات وب زبان PHP‌ يك
|
|
|
|
|
واسط بسيار مناسب است. اطلاعات بيشتر راجع به
|
|
|
|
|
PHP‌در سايت http://www.php.net وجود دارد.
|
|
|
|
|
مثالهايي نيز با استÙاده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl
|
|
|
|
|
وجود دارد.
|
|
|
|
|
2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙيكي دارد؟
|
|
|
|
|
چند نرم اÙزار گراÙيكي براي PostgreSQL‌ وجود دارد
|
|
|
|
|
كه شامل pgAccess درسايت http://www.pgaccess.org و pgAdmin III در
|
|
|
|
|
سايت http://www.pgadmin.org و RHDB Admin در سايت
|
|
|
|
|
http://sources.redhat.com/rhdb و Rekall در سايت
|
|
|
|
|
http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك
|
|
|
|
|
phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود
|
|
|
|
|
دارد كه يك واسط وبي براي مديريت PostgreSQL
|
|
|
|
|
مي‌باشد.
|
|
|
|
|
براي ديدن اطلاعات بيشتر راجع به
|
|
|
|
|
نرم‌اÙزارهاي گراÙيكي براي PostgreSQL به آدرس
|
|
|
|
|
http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
|
|
|
|
|
2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
|
|
|
|
|
PostgreSQL‌ ارتباط برقرار كرد؟
|
|
|
|
|
بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
|
|
|
|
|
PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
|
|
|
|
|
PostgreSQL تعدادي از واسطهاي مورد نياز براي
|
|
|
|
|
ارتباط با پايگاه داده از طريق زبانهاي مختلÙ
|
|
|
|
|
آمده است كه در زير ليست آنها را مشاهده
|
|
|
|
|
مي‌كنيد.
|
|
|
|
|
C (libpq)
|
|
|
|
|
Embedded C (ecpg)
|
|
|
|
|
Java (jdbc)
|
|
|
|
|
Python (PyGreSQL)
|
|
|
|
|
TCL (libpgtcl)
|
|
|
|
|
واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
|
|
|
|
|
Drivers/Interfaces وجود دارد.
|
|
|
|
|
|
|
|
|
|
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
سوالات مديريتي
|
|
|
|
|
3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
|
|
|
|
|
از /usr/local/pgsql/ نصب كنم؟
|
|
|
|
|
موقع اجراي دستور configure از گزينه prefix-- استÙاده
|
|
|
|
|
كنيد.
|
|
|
|
|
3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
|
|
|
|
|
كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
|
|
|
|
|
به دلايل مختل٠ممكن است اين اتÙاق بيÙتد. اما
|
|
|
|
|
در قدم اول شما مطمئن شويد كه كه امكانات
|
|
|
|
|
اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
|
|
|
|
|
براي اجرا شدن نياز به استÙاده از امكانات
|
|
|
|
|
ØاÙظه مشترك Ùˆ سماÙورها دارد.
|
|
|
|
|
3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
|
|
|
|
را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
|
|
|
|
|
اØتمالاً‌ قسمت ايجاد ØاÙظه مشترك در كرنل به
|
|
|
|
|
درستي تنظيم نشده است Ùˆ يا اينكه بايد Ùضاي
|
|
|
|
|
ØاÙظه اشتراكي در كرنل را زياد كرد. ميزان
|
|
|
|
|
دقيق ØاÙظه مشترك مورد نياز بسته به معماري Ùˆ
|
|
|
|
|
Ù†Øوه استÙاده از باÙرها توسط برنامه postmaster
|
|
|
|
|
دارد. براي بيشتر سيستم‌ها كه با تنظيمات
|
|
|
|
|
پيش‌Ùرض كار مي‌كنند مقدار اين ØاÙظه Øدود 1
|
|
|
|
|
مگابايت است. براي ديدن اطلاعات بيشتر راجع به
|
|
|
|
|
ØاÙظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide
|
|
|
|
|
مراجعه كنيد.
|
|
|
|
|
3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
|
|
|
|
را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
|
|
|
|
|
اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
|
|
|
|
|
device باشد به اين معني است كه تعداد سماÙورهاي
|
|
|
|
|
تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر
|
|
|
|
|
Ùرايندي كه در backend اجرا مي‌شود به يك سماÙور
|
|
|
|
|
نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
|
|
|
|
|
است كه postmaster را با اعمال Ù…Øدوديت روي تعداد
|
|
|
|
|
Ùرايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
|
|
|
|
|
براي اينكار از گزينه N- و يك عدد كمتر از 32
|
|
|
|
|
استÙاده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
|
|
|
|
|
پارامترهاي SEMMNS, SEMMNI كرنل را اÙزايش دهيم.
|
|
|
|
|
در زمان دسترسي خيلي زياد به پايگاه داده، ‌
|
|
|
|
|
سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن
|
|
|
|
|
سيستم شوند.
|
|
|
|
|
اگر پيغام خطا چيز ديگري باشد اØتمالاً به
|
|
|
|
|
دليل آن است كه كرنل از سماÙورها پشتيباني
|
|
|
|
|
نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
|
|
|
|
|
مديريتي PostgreSQL را مطالعه كنيد.
|
|
|
|
|
3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
|
|
|
|
|
كنترل كنم؟
|
|
|
|
|
به صورت پيش Ùرض Ùقط از ماشيني كه PostgreSQL روي آن
|
|
|
|
|
در Øال اجراست مي‌توان با استÙاده از
|
|
|
|
|
سوكت‌هاي يونيكسي به آن متصل شد. ساير
|
|
|
|
|
ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
|
|
|
|
|
آنكه گزينه tcp_sockets در Ùايل postgresql.conf Ùعال شده Ùˆ
|
|
|
|
|
همچنين با Ø§ØµÙ„Ø§Ø Ùايل PGDATA/ph_hba.conf هويت‌شناسي
|
|
|
|
|
مبتني بر ميزبان نيز Ùعال شود. با اين كار
|
|
|
|
|
مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
|
|
|
|
|
3.6) براي كارايي بالاتر و بهتر پايگاه داده من
|
|
|
|
|
چه تنظيماتي را بايد انجام دهم؟
|
|
|
|
|
به طور Øتم استÙاده از انديس‌ها باعث بالا
|
|
|
|
|
رÙتن سرعت پاسخ‌گويي به درخواست‌ها خواهد
|
|
|
|
|
شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†Øوه
|
|
|
|
|
پردازش يك دستور توسط PostgreSQL را مي‌دهد.
|
|
|
|
|
اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
|
|
|
|
|
آنها را با قرار دادن در يك Ùايل با دستور COPY‌
|
|
|
|
|
اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
|
|
|
|
|
است. Øتي‌الامكان سعي كنيد از تراكنشها
|
|
|
|
|
استÙاده نكنيد. تراكنشها مجموعه دستوراتي
|
|
|
|
|
هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك
|
|
|
|
|
دستور به صورت عادي اجرا شود PostgreSQL خود آن
|
|
|
|
|
دستور را به صورت يك تراكنش مستقل نگاه كرده و
|
|
|
|
|
اجرا مي‌كند. موقعی كه تغييرات زيادي در
|
|
|
|
|
پايگاه داده انجام مي‌شود انديسهاي قبلي را
|
|
|
|
|
ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد.
|
|
|
|
|
استÙاده از گزينه o -F- در Ùرمان postmaster باعث غير
|
|
|
|
|
Ùعال كردن ()fsync مي‌شود. اين دستور بعد از هر
|
|
|
|
|
تراكنش اطلاعات را روي هاردديسك منتقل
|
|
|
|
|
مي‌كند.
|
|
|
|
|
براي اÙزايش تعداد باÙرهاي ØاÙظه اشتراكي از
|
|
|
|
|
گزينه B- به همراه Ùرمان postmaster استÙاده كنيد.
|
|
|
|
|
توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
|
|
|
|
|
است postmaster اصلاً‌ اجرا نشود. هر باÙر 8 كيلو
|
|
|
|
|
بايت ØاÙظه نياز دارد Ùˆ تعداد باÙرها به طور
|
|
|
|
|
پيش Ùرض 64 است.
|
|
|
|
|
همچنين مي‌توان با گزينه S- ميزان ØاÙظه‌اي
|
|
|
|
|
كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
|
|
|
|
|
استÙاده مي‌شود را اÙزايش داد. مقدار پيش Ùرض
|
|
|
|
|
512 كيلو بايت است.
|
|
|
|
|
استÙاده از دستور CLUSTER نيز براي بالا بردن
|
|
|
|
|
كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
|
|
|
|
|
بيشتري در اين زمينه به شما مي‌دهد.
|
|
|
|
|
3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
|
|
|
|
|
دارد؟
|
|
|
|
|
PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن
|
|
|
|
|
وضعيت خود دارد كه براي اشكال زدايي مي‌توان
|
|
|
|
|
از آنها استÙاده كرد.
|
|
|
|
|
با استÙاده از گزينه enable-assert-- تعداد زيادي
|
|
|
|
|
()assert براي مونيتور كردن و توق٠برنامه در صورت
|
|
|
|
|
بروز خطاهاي ناخواسته Ùعال مي‌شود.
|
|
|
|
|
هم Postmaster و هم postgres گزينه‌هاي زيادي براي
|
|
|
|
|
اشكال زدايي دارند. موقعي كه postmaster را اجرا
|
|
|
|
|
مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ùايل log
|
|
|
|
|
ارسال كنيد.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
cd /usr/local/pgsql
|
|
|
|
|
./bin/postmaster >server.log 2>&1 &
|
2005-05-28 02:09:42 +04:00
|
|
|
|
اين كار يك Ùايل log در بالاترين شاخه PostgreSQL‌
|
|
|
|
|
ايجاد مي‌كند. اين Ùايل Øاوي اطلاعات Ù…Ùيدي
|
|
|
|
|
در مورد مسائل و خطاهايي است كه براي سرور
|
|
|
|
|
اتÙاق اÙتاده است. براي ديدن جزئيات بيشتر
|
|
|
|
|
مي‌توان از d- به همراه Ùرمان postmaster‌ استÙاده
|
|
|
|
|
كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
|
|
|
|
|
دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ùايل نوشته
|
|
|
|
|
مي‌شود. با بالابردن اين عدد Øجم اطلاعات
|
|
|
|
|
توليد شده در LogÙايل نيز اÙزايش مي‌يابد.
|
|
|
|
|
اگر postmaster در Øال اجرا نباشد، مي‌توانيم postgres
|
|
|
|
|
را به طور مستقيم از خط Ùرمان اجرا كرده Ùˆ
|
|
|
|
|
دستورات SQL را به آن بدهيم. اين كار Ùقط براي
|
|
|
|
|
اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
|
|
|
|
|
اين Øالت يك دستور با كاراكتر newline خاتمه پيدا
|
|
|
|
|
مي‌كند و نه با ;. اگر postmaster را با امكانات
|
|
|
|
|
اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
|
|
|
|
|
استÙاده از يك برنامه اشكال‌ياب اجراي
|
|
|
|
|
برنامه را مونيتور كنيد.
|
|
|
|
|
اگر postmaster در Øال اجرا باشد با دستور psql
|
|
|
|
|
مي‌توان به postgres متصل شد. با پيدا كردن PID
|
|
|
|
|
Ùرايند postgres كه psql به آن متصل شده است مي‌توان
|
|
|
|
|
آن را مونيتور كرد. براي اينكار بايد يك
|
|
|
|
|
برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
|
|
|
|
|
بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ
|
|
|
|
|
است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
|
|
|
|
|
مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
|
|
|
|
|
اين Ùاصله شما مي‌توانيد برنامه اشكال‌ياب
|
|
|
|
|
را به آن متصل كرده و با قرار دادن يك نقطه
|
|
|
|
|
توق٠روند اجراي آن را مونيتور كنيد.
|
|
|
|
|
postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
|
|
|
|
|
پيدا كردن اشكالات بسيار مناسب هستند.
|
|
|
|
|
شما مي‌توانيد postgreSQL را با امكانات profiling
|
|
|
|
|
كامپيل كنيد. اين كار باعث مي‌شود كه زمان
|
|
|
|
|
اجراي دقيق هر تابع در برنامه مشخص شود.
|
|
|
|
|
خروجي‌هاي توليد شده در اين Øالت در Ùايل
|
|
|
|
|
DLINUX_PROFILE. ريخته مي‌شود.
|
|
|
|
|
3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
|
|
|
|
|
وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
|
|
|
|
|
شما بايد Øداكثر تعداد Ùرايندهاي همزمان
|
|
|
|
|
postmaster را اÙزايش دهيد. مقدار پيش Ùرض 32 است.
|
|
|
|
|
براي اÙزايش آن مي‌توان از گزينه N- استÙاده
|
|
|
|
|
كرد Ùˆ يا Ùايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
|
|
|
|
|
توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
|
|
|
|
|
باشد بايد مقدار B- را نيز اÙزايش دهيم. اين
|
|
|
|
|
مقدار بايد Øداقل دو برابر مقدار N-‌ باشد.
|
|
|
|
|
براي اعداد خيلي بالا بايد بعضي از
|
|
|
|
|
پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
|
|
|
|
|
پارامترهايي نظير Øداكثر اندازه ØاÙظه
|
|
|
|
|
اشتراكي SHMMAX ØŒ Øداكثر تعداد سماÙورها SEMMNI‌ Ùˆ
|
|
|
|
|
SEMMNS ØŒ Øداكثر تعداد Ùرايندها NPROCØŒ Øداكثر
|
|
|
|
|
Ùرايندهاي يك كاربر MAXUPRC Ùˆ Øداكثر Ùايلهاي باز
|
|
|
|
|
NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
|
|
|
|
|
همزمان postgreSQL Ù…Øدود است آن است كه نيازهاي
|
|
|
|
|
PostgreSQL بيش از منابع موجود سيستم نباشد.
|
|
|
|
|
3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
|
|
|
|
|
دراين شاخه Ùايلهاي موقتي قرار دارد كه با
|
|
|
|
|
اجراي درخواستها به وجود آمده است. به عنوان
|
|
|
|
|
مثال اگر براي اجراي دستور order by نياز به انجام
|
|
|
|
|
مرتب سازي باشد Ùˆ در صورتي كه ØاÙظه مشخص شده
|
|
|
|
|
با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك
|
|
|
|
|
Ùايل موقت در اين شاخه ايجاد مي‌كند تا عمل
|
|
|
|
|
مرتب سازي را انجام دهد.
|
|
|
|
|
Ùايلهاي موقت معمولاً به صورت اتوماتيك پاك
|
|
|
|
|
مي‌شود اما اگر postgreSQL در Øين مرتب سازي crash‌
|
|
|
|
|
كند آن Ùايلها باقي مي‌مانند. با stop Ùˆ start كردن
|
|
|
|
|
برنامه postmaster اين Ùايلها پاك مي‌شوند.
|
|
|
|
|
3.10) چرا براي به روز كردن نسخه پايگاه داده من
|
|
|
|
|
بايد كل داده ها را dump‌ و مجدداً restore كنم؟
|
|
|
|
|
تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
|
|
|
|
|
كه Ùقط minor آنها متÙاوت است Ùقط تغييرات كوچكي
|
|
|
|
|
اعمال مي‌كنند؛ بنابراين براي به روز كردن از
|
|
|
|
|
نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
|
|
|
|
|
نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
|
|
|
|
|
ساختار داخلي جداول Ùˆ Ùايلهاي داده تغيير
|
|
|
|
|
مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
|
|
|
|
|
براي انتقال داده‌هاي موجود در پايگاه داده
|
|
|
|
|
در اين Øالت بايد ‌از dump Ùˆ restore استÙاده كرد.
|
|
|
|
|
در نسخه‌هايي كه ساختار روي ديسك تغييري
|
|
|
|
|
نمي‌كند مي توان از برنامه pg_upgrade براي به روز
|
|
|
|
|
كردن پايگاه داده استÙاده كرد بدون اينكه
|
|
|
|
|
نيازي به استÙاده از dump Ùˆ restore باشد. در
|
|
|
|
|
يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
|
|
|
|
|
شده است كه آيا برنامه pg_upgrade براي اين توزيع
|
|
|
|
|
وجود دارد يا خير.
|
|
|
|
|
3.11) از Ú†Ù‡ سخت اÙزاري بايد استÙاده كنم؟
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
چون اكثر سخت‌اÙزارهاي PC سازگار هستند مردم
|
|
|
|
|
Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در
|
|
|
|
|
Øاليكه اينطور نيست. استÙاده از هاردهاي SCSI Ùˆ
|
|
|
|
|
ØاÙظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا
|
|
|
|
|
نسبت به سخت اÙزارهاي ارزانتر نتايج بهتري از
|
|
|
|
|
نظر كارايي و پايداري سيستم بهمراه خواهد
|
|
|
|
|
داشت. PostgreSQL روي بيشتر سخت اÙزارها اجرا
|
|
|
|
|
مي‌شود اما اگر كارايي Ùˆ اطمينان Ùاكتورهاي
|
|
|
|
|
مهمي هستند بايد سخت اÙزار مناسب استÙاده شود.
|
|
|
|
|
در گروههاي پستي در مورد سخت اÙزار مناسب Ùˆ
|
|
|
|
|
انتخاب آن بØØ« شده است.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
سوالات عملياتي
|
|
|
|
|
4.1) تÙاوت بين binary cursors Ùˆ Normal cursors چيست؟
|
|
|
|
|
راهنماي دستور DECLARE‌ را مطالعه كنيد.
|
|
|
|
|
4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
|
|
|
|
|
يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
|
|
|
|
|
راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
|
|
|
|
|
در واقع كل درخواست بايد بررسي و ارزيابي شود
|
|
|
|
|
Øتي اگر شما Ùقط چند ردي٠اول را بخواهيد. براي
|
|
|
|
|
مثال درخواست ORDER BY را در نظر بگيريد. اگر
|
|
|
|
|
انديس يا نمايه‌اي براي ORDER BY وجود داشته
|
|
|
|
|
باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر
|
|
|
|
|
اول درخواستي را ارزيابي كند و يا اينكه كل
|
|
|
|
|
درخواست پردازش شود تا تعداد رديÙ‌هاي
|
|
|
|
|
درخواستي توليد شود.
|
|
|
|
|
براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل
|
|
|
|
|
مي‌كنيم:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT col
|
|
|
|
|
FROM tab
|
|
|
|
|
ORDER BY random()
|
|
|
|
|
LIMIT 1;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
|
|
|
|
|
چيزهايي كه در psql‌ وجود دارد را ببينم؟
|
|
|
|
|
براي ديدن ليست جداول دستور dt\ را در برنامه
|
|
|
|
|
psql‌ استÙاده كنيد. براي ديدن ليست كامل
|
|
|
|
|
Ùرمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
|
|
|
|
|
برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
|
|
|
|
|
‌قرار دارد. اين Ùايل Øاوي Ùرامين SQLيي است كه
|
|
|
|
|
خروجي را براي دستوراتي كه با \‌در psql شروع
|
|
|
|
|
مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
|
|
|
|
|
گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
|
|
|
|
|
از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
|
|
|
|
|
PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
|
|
|
|
|
با استÙاده از آن اطلاعات داخلي پايگاه داده
|
|
|
|
|
را استخراج كرد.
|
|
|
|
|
4.4) چگونه يك ستون جدول را Øذ٠مي‌كنيد؟ چگونه
|
|
|
|
|
نوع داده آن را عوض كنيم؟
|
|
|
|
|
Øذ٠يك ستون در توزيع 7.3 با استÙاده از دستور
|
|
|
|
|
ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي
|
|
|
|
|
قبلي به روش زير عمل كنيد:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
BEGIN;
|
|
|
|
|
LOCK TABLE old_table;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را Øذ٠كنيد را در اينجا بياوريد
|
2004-09-29 20:23:16 +04:00
|
|
|
|
INTO TABLE new_table
|
|
|
|
|
FROM old_table;
|
|
|
|
|
DROP TABLE old_table;
|
|
|
|
|
ALTER TABLE new_table RENAME TO old_table;
|
|
|
|
|
COMMIT;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
براي عوض كردن نوع داده يك ستون به روش زير عمل
|
|
|
|
|
كنيد:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
BEGIN;
|
|
|
|
|
ALTER TABLE tab ADD COLUMN new_col new_data_type;
|
|
|
|
|
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
|
|
|
|
|
ALTER TABLE tab DROP COLUMN old_col;
|
|
|
|
|
COMMIT;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.5) Øداكثر اندازه يك رديÙ،‌ جدول Ùˆ خود
|
|
|
|
|
پايگاه داده چقدر است؟
|
|
|
|
|
Ù…Øدوديتها عبارتند از:
|
|
|
|
|
Øداكثر اندازه پايگاه داده نامØدود (تا 32 ترابايت وجود دارد)
|
|
|
|
|
Øداكثر اندازه يك جدول 32 ترابايت
|
|
|
|
|
Øداكثر ا ندازه يك ردي٠1.6 ترابايت
|
|
|
|
|
Øداكثر اندازه يك Ùيلد 1 گيگا بايت
|
|
|
|
|
Øداكثر اندازه رديÙهاي يك جدول نا Ù…Øدود
|
|
|
|
|
Øداكثر ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
|
|
|
|
|
Øداكثر انديسهاي يك جدول نا Ù…Øدود
|
|
|
|
|
البته در Øالت نامØدود نيز ما Ù…Øدود به Øجم
|
|
|
|
|
هاردديسك Ùˆ Ùضاي ØاÙظه خواهيم بود. در صورتي
|
|
|
|
|
Ú©Ù‡ مقادير مشخص شده به عنوان نامØدود به صورت
|
|
|
|
|
غير معمولي بزرك شوند كارايي سيستم كاهش
|
|
|
|
|
خواهد ياÙت.
|
|
|
|
|
براي ذخيره كردن جداول با اندازه خيلي بزرگ
|
|
|
|
|
نيازي نيست كه سيستم عامل امكان ايجاد
|
|
|
|
|
Ùايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
|
|
|
|
|
بزرگ به صورت Ùايلهايي به Øجم يك گيگا بايت
|
|
|
|
|
نگاهداري مي‌شوند.
|
|
|
|
|
اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
|
|
|
|
|
قرار دهيم Øداكثر اندازه جدول Ùˆ Øداكثر تعداد
|
|
|
|
|
ستونها 4 برابر خواهد شد.
|
|
|
|
|
4.6) چقدر Ùضاي ديسك سخت براي ذخيره كردن
|
|
|
|
|
داده‌‌هاي يك Ùايل متني مورد نياز است؟
|
|
|
|
|
يك پايگاه داده PostgreSQL‌ تا 5 برابر Ùضايي روي
|
|
|
|
|
هاردديسك براي نگاهداري يك Ùايل متني نياز
|
|
|
|
|
دارد.
|
|
|
|
|
به عنوان مثال يك Ùايل با 100000 خط را در نظر
|
|
|
|
|
بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
|
|
|
|
|
متني آمده است. Ùرض كنيد كه رشته متني به طور
|
|
|
|
|
متوسط 20 بايت باشد. اندازه Ùايل برابر 2.8 مگا
|
|
|
|
|
بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
|
|
|
|
|
Ùايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
|
|
|
|
|
32 bytes: اندازه سرايند هر خط به طور تقريبي
|
|
|
|
|
24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
|
|
|
|
|
+ 4 bytes: اشاره گر روي صÙØÙ‡ به يك چندتايي
|
2004-09-29 20:23:16 +04:00
|
|
|
|
----------------------------------------
|
2005-05-28 02:09:42 +04:00
|
|
|
|
60 bytes در هر رديÙ
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
اندازه صÙØات داده در PostgreSQL برابر با 8 كيلو بايت است
|
|
|
|
|
8192 تعداد بايت‌ها در هر صÙØÙ‡
|
|
|
|
|
------------------- = 136 تعداد رديÙ‌ها در يك صÙØÙ‡ پايگاه داده
|
|
|
|
|
60 تعداد بايت‌هاي هر رديÙ
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
100000 تعداد رديÙها
|
|
|
|
|
-------------------- = تعدادصÙØات پايگاه داده
|
|
|
|
|
128 تعداد رديÙها در هر صÙØÙ‡
|
2005-03-12 00:46:54 +03:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
735 تعداد صÙØات * 8192 تعداد بايت‌هاي هر صÙØÙ‡ = 6,021,120 مگا بايت
|
|
|
|
|
سربار انديسها يا نمايه‌ها از اين مقدار كمتر
|
|
|
|
|
است ولي چون شامل خود داده‌ها هم هست ممکن است
|
|
|
|
|
اندازه آنها هم بزرگ شود.
|
|
|
|
|
NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
|
|
|
|
|
Ùضاي بسيار كمي را اشغال مي‌كنند.
|
|
|
|
|
4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
|
|
|
|
|
پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
|
|
|
|
|
شده است؟
|
|
|
|
|
psql تعداد زيادي دستور دارد كه با \ شروع
|
|
|
|
|
مي‌شوند و اين اطلاعات را در اختيار ما قرار
|
|
|
|
|
مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
|
|
|
|
|
كنيد. همچنين جداول سيستمي كه با نام آنها pg_
|
|
|
|
|
‌شروع مي‌شود نيز اين اطلاعات را در خود
|
|
|
|
|
دارند. اجراي برنامه psql با گزينه l- نيز باعث
|
|
|
|
|
نشان دادن ليست تمام پايگاههاي داده مي‌شود.
|
|
|
|
|
همچنين Ùايل pgsql/src/tutorial/syscat.source نيز Ùرمانهاي
|
|
|
|
|
SELECT كه با استÙاده از آن مي‌توان اطلاعات
|
|
|
|
|
پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
|
|
|
|
|
4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
|
|
|
|
|
چرا از نمايه ها استÙاده نمي‌كنند؟
|
|
|
|
|
به طور معمول براي درخواستها از نمايه‌ها
|
|
|
|
|
استÙاده نمي‌شود. تنها در صورتي از نمايه‌ها
|
|
|
|
|
استÙاده مي‌شود كه اندازه جدول از يك اندازه
|
|
|
|
|
Øداقل بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از
|
|
|
|
|
رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين
|
|
|
|
|
كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك
|
|
|
|
|
كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
|
|
|
|
|
از خواندن مستقيم جدول يا خواندن ترتيبي
|
|
|
|
|
ركوردها كندتر باشد.
|
|
|
|
|
براي تعيين اينكه از نمايه استÙاده شود يا
|
|
|
|
|
خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
|
|
|
|
|
جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
|
|
|
|
|
ANALYZE به دست مي‌آيد. با استÙاده از اين
|
|
|
|
|
اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك
|
|
|
|
|
جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
|
|
|
|
|
تعيين كند كه آيا از نمايه استÙاده شود يا خير.
|
|
|
|
|
اطلاعات آماري همچنين براي تعيين ترتيب الØاق
|
|
|
|
|
Ùˆ روشهاي الØاق به صورت بهينه نيز كاربر دارد.
|
|
|
|
|
جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
|
|
|
|
|
همزمان با تغيير داده‌هاي جدول انجام شود.
|
|
|
|
|
نمايه‌ها به طور معمول همراه با دستور ORDER BY
|
|
|
|
|
به كار برده نمي‌شوند. براي يك جدول بزرگ يك
|
|
|
|
|
پيمايش ترتيبي همراه با دستور مرتب سازي از به
|
|
|
|
|
كار بردن نمايه‌ها سريعتر خواهد بود.
|
|
|
|
|
اما اگر همراه با ORDER BY‌ از LIMIT استÙاده شود
|
|
|
|
|
اغلب از نمايه‌ها استÙاده مي‌شود چون Ùقط
|
|
|
|
|
قسمتي از جدول استÙاده مي‌شود. در Øقيقت هر
|
|
|
|
|
چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙاده
|
|
|
|
|
نمي‌كنند ولي مي‌توانيم با استÙاده از دستور
|
|
|
|
|
زير با استÙاده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
|
|
|
|
|
LIMIT‌ آنها را به دست آوريم.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT col
|
|
|
|
|
FROM tab
|
|
|
|
|
ORDER BY col [ DESC ]
|
|
|
|
|
LIMIT 1;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در
|
|
|
|
|
انتخاب پيمايش ترتيبي اشتباه كرده است با
|
|
|
|
|
دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
|
|
|
|
|
استÙاده از نمايه‌ها باعث اÙزايش سرعت
|
|
|
|
|
درخواست‌ها خواهد شد.
|
|
|
|
|
استÙاده از نمايه‌ها هنگامي كه از علائم ويژه
|
|
|
|
|
نظير LIKE Ùˆ ~ استÙاده مي‌كنيد Ùقط در بعضي
|
|
|
|
|
شرايط خاصي كه در اينجا ذكر شده است ممكن است:
|
|
|
|
|
ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
|
|
|
|
|
باشد براي مثال:
|
|
|
|
|
دستورات LIKE نبايد با علامت % شروع شوند
|
|
|
|
|
الگوهاي منظمي كه با ~ مي‌ايد Øتماً بايد با
|
|
|
|
|
علامت ^ شروع شود
|
|
|
|
|
رشته جستجو نبايد با يك مجموعه از
|
|
|
|
|
كاراكتر‌ها مثل [a-e] شروع شود
|
|
|
|
|
جستجوهاي غيرØساس به متن مثل ILIKE‌ Ùˆ *~ از
|
|
|
|
|
نمايه‌ها استÙاده نمي‌كنند. در عوض از
|
|
|
|
|
توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
|
|
|
|
|
استÙاده مي‌كنند.
|
|
|
|
|
مقدار پيش Ùرض locale‌ بايد در initdb استÙاده شود.
|
2005-03-12 00:46:54 +03:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.9) چگونه مي‌توانم Ù†Øوه بررسي درخواست را
|
|
|
|
|
توسط بهينه‌ساز درخواستها مشاهده كنم؟
|
|
|
|
|
راهنماي دستور EXPLAIN را نگاه كنيد.
|
|
|
|
|
4.10) نمايه R-tree‌ چيست؟
|
|
|
|
|
از نمايه R-Tree براي انديس كردن داده‌هاي
|
|
|
|
|
Ùاصله‌اي استÙاده مي‌شود. يك نمايه hash
|
|
|
|
|
نمي‌توانند جستجوهاي Ù…Øدوده‌اي را انجام
|
|
|
|
|
دهد. نمايه "B-tree" نيز براي انجام جستجوي
|
|
|
|
|
Ù…Øدوده‌اي در يك جهت قابل استÙاده است. اما
|
|
|
|
|
R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
|
|
|
|
|
پشتيباني كند. براي مثال استÙاده اگر از نمايه
|
|
|
|
|
R-tree‌ براي گونه Point استÙاده شود سرعت
|
|
|
|
|
درخواست‌هايي نظير "select all points within a bounding
|
|
|
|
|
rectangle" به مراتب اÙزايش مي‌يابد.
|
|
|
|
|
مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
|
|
|
|
|
Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching."
|
|
|
|
|
Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
|
|
|
|
|
R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
|
|
|
|
|
پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
|
|
|
|
|
بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
|
|
|
|
|
توسعه R-tree‌ نياز به كار بيشتري دارد.
|
|
|
|
|
4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
|
|
|
|
|
Optimizer)
|
|
|
|
|
استÙاده از GEQO سرعت بهينه سازي درخواست را
|
|
|
|
|
هنگاميكه تعداد زيادي جدول را با استÙاده از
|
|
|
|
|
الگوريتم ژنتيك الØاق مي‌كنيم اÙزايش
|
|
|
|
|
مي‌دهد.
|
|
|
|
|
4.12) چگونه از عبارات منظم براي جستجو استÙاده
|
|
|
|
|
كنم؟ چگونه جستجويي انجام دهم كه Øساس به متن
|
|
|
|
|
نباشد؟ چگونه براي يك جستجوي غير Øساس به متن
|
|
|
|
|
از نمايه استÙاده كنم؟
|
|
|
|
|
براي جستجوي عبارت منظم از عملگر ~‌ استÙاده
|
|
|
|
|
مي‌كنيم. براي جستجوي غير Øساس به متن از
|
|
|
|
|
عملگر *~ Ùˆ يا ILIKE‌ استÙاده مي‌كنيم.
|
|
|
|
|
روش ديگر انجام جستجوي غير Øساس به متن در زير
|
|
|
|
|
نشان داده شده است.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE lower(col) = 'abc';
|
2005-05-28 02:09:42 +04:00
|
|
|
|
اين از نمايه‌هاي استاندارد استÙاده
|
|
|
|
|
نمي‌كند. ولي شما مي توانيد با دستور زير يك
|
|
|
|
|
نمايه ايجاد كنيد Ùˆ از آن استÙاده كنيد.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
CREATE INDEX tabindex ON tab (lower(col));
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
|
|
|
|
|
كه يك Ùيلد NULL‌ است؟
|
|
|
|
|
با استÙاده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
|
|
|
|
|
NULL بودن يك Ùيلد را تست كنيم.
|
|
|
|
|
4.14) تÙاوت بين گونه‌هاي مختل٠character چيست؟
|
2004-09-29 20:23:16 +04:00
|
|
|
|
Type Internal Name Notes
|
|
|
|
|
--------------------------------------------------
|
2005-05-28 02:09:42 +04:00
|
|
|
|
VARCHAR(n) varchar اندازه، Øداكثر طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡
|
|
|
|
|
CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙاده مي‌شود
|
|
|
|
|
TEXT text Øداكثر طول را مشخص نمي‌كند
|
|
|
|
|
BYTEA bytea آرايه‌اي از بايت با طول متغير
|
|
|
|
|
"char" char يك كاراكتر
|
|
|
|
|
نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
|
|
|
|
|
پيغامهاي خطا مي‌توان ديد.
|
|
|
|
|
چهار گونه اول همگي از نوع varlena هستند (4 بايت
|
|
|
|
|
اول روي ديسك طول را مشخص مي‌كند كه به دنبال
|
|
|
|
|
آن داده‌ها قرار دارند.)‌بنابراين Ùضاي
|
|
|
|
|
واقعي استÙاده شده روي ديسك از اندازه تعريÙ
|
|
|
|
|
شده بيشتر است. اما اين گونه‌ها را مي‌توان
|
|
|
|
|
Ùشرده كرد كه اينكار باعث مي‌شود Ùضاي كمتري
|
|
|
|
|
روي ديسك اشغال كنند.
|
|
|
|
|
براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
|
|
|
|
|
بهترين انتخاب است. در اين گونه Øداكثر طول
|
|
|
|
|
رشته Ù…Øدود است بر خلا٠text كه هيچ Ù…Øدوديتي
|
|
|
|
|
روي Øداكثر اندازه رشته نمي‌گذارد.(در اين
|
|
|
|
|
گونه Øداكثر طول يك رشته يك گيگا بايت خواهد
|
|
|
|
|
بود)
|
|
|
|
|
گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
|
|
|
|
|
است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
|
|
|
|
|
(خالي) پر مي‌شود تا به طول مشخص شده برسد در
|
|
|
|
|
Øاليكه گونه VARCHAR كاراكترها را به همان صورت
|
|
|
|
|
كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
|
|
|
|
|
داده‌هاي باينري است به خصوص داده‌هاي
|
|
|
|
|
باينتري كه شامل بايت‌هاي NULL هستند. از نظر
|
|
|
|
|
كارايي تمام اين گونه‌ها يكسان هستند.
|
|
|
|
|
4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
|
|
|
|
|
اÙزايشي ايجاد كنم؟
|
|
|
|
|
PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
|
|
|
|
|
براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد
|
|
|
|
|
منØصر به Ùرد براي هر ردي٠)به روش زير عمل
|
|
|
|
|
كنيد:
|
|
|
|
|
CREATE TABLE person (
|
|
|
|
|
id SERIAL,
|
|
|
|
|
name TEXT
|
2004-09-29 20:23:16 +04:00
|
|
|
|
);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
دستور بالا به طور اتوماتيک به دستور زير
|
|
|
|
|
تبديل مي‌شود:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
CREATE SEQUENCE person_id_seq;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
CREATE TABLE person (
|
2004-09-29 20:23:16 +04:00
|
|
|
|
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
2005-05-28 02:09:42 +04:00
|
|
|
|
name TEXT
|
2004-09-29 20:23:16 +04:00
|
|
|
|
);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
براي ديدن اطلاعات بيشتر به راهنماي دستور
|
|
|
|
|
create_sequence مراجعه كنيد. همچنين مي‌توان از
|
|
|
|
|
OID‌هر ردي٠به عنوان يك مقدار منØصر به Ùرد
|
|
|
|
|
استÙاده كرد. اما در اين Øالت براي dump كردن Ùˆ
|
|
|
|
|
reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
|
|
|
|
|
با گزينه o-‌ اجرا كنيد.
|
|
|
|
|
4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
|
|
|
|
|
بدانم؟
|
|
|
|
|
يك روش براي گرÙتن مقدار بعدي يك Ùيلد سريال
|
|
|
|
|
استÙاده از تابع ()nextval است. در شبه ÙƒÙدي كه در
|
|
|
|
|
ادامه آمده است روش انجام اين كار نشان داده
|
|
|
|
|
شده است:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
new_id = execute("SELECT nextval('person_id_seq')");
|
|
|
|
|
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
2005-05-28 02:09:42 +04:00
|
|
|
|
با اجرا دستور Ùوق مقدار جديد را در متغير new_id
|
|
|
|
|
نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
|
|
|
|
|
درخواست‌هاي نيز استÙاده كنيد. توجه داشته
|
|
|
|
|
باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
|
|
|
|
|
شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
|
|
|
|
|
در آن table‌ نام جدول Ùˆ serialcolumn نام Ùيلد سريال
|
|
|
|
|
جدول مي‌باشد.
|
|
|
|
|
براي ديدن مقدار نسبت داده شده به Ùيلد سريال
|
|
|
|
|
نيز مي‌توان از تابع () currval به صورت زير
|
|
|
|
|
استÙاده كرد.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
|
|
|
|
new_id = execute("SELECT currval('person_id_seq')");
|
2005-05-28 02:09:42 +04:00
|
|
|
|
و سرانجام شما مي‌توانيد از مقدار OID كه خروجي
|
|
|
|
|
دستور INSERT است براي ديدن مقدار پيش Ùرض
|
|
|
|
|
استÙاده كنيد. هر چند اين روش در همه پلتÙرمها
|
|
|
|
|
قابل استÙاده نيست Ùˆ ضمن اينكه Ùيلد oid‌ بعد
|
|
|
|
|
از عدد 4 ميليارد دوباره صÙر مي‌شود. در زبان
|
|
|
|
|
perl با استÙاده از DBI Ùˆ DBD::Pg مقدار oid‌را
|
|
|
|
|
مي‌توانيد به شكل زير استخراج كنيد: بعد از
|
|
|
|
|
اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$
|
|
|
|
|
ذخيره خواهد شد.
|
|
|
|
|
4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
|
|
|
|
|
شرایط race برای سایر کاربران می شوند؟
|
|
|
|
|
خیر، استÙاده از این توابع شرایط race را به
|
|
|
|
|
وجود نمی آورد.
|
|
|
|
|
4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
|
|
|
|
|
شده مجدداً استÙاده نمی شود؟ چرا بین اعداد
|
|
|
|
|
سریالی یک Ùاصله خالی ایجاد Ù…ÛŒ شود؟
|
|
|
|
|
برای بالا بردن امکان اجرای همزمان تراکنشها،
|
|
|
|
|
اعداد سریالی به Ù…Øض اجرای تراکنش به آنها
|
|
|
|
|
تخصیص Ù…ÛŒ یابد در این Øالت اگر بعضی از
|
|
|
|
|
تراکنشها abort شوند بین اعداد سریالی استÙاده
|
|
|
|
|
شده یک Ùاصله خالی به وجود Ù…ÛŒ آید.
|
|
|
|
|
4.16) OID و TID چه هستند؟
|
|
|
|
|
OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه منØصر به
|
|
|
|
|
Ùرد برای هر ردی٠است. هر ردی٠جدیدی Ú©Ù‡ ایجاد
|
|
|
|
|
Ù…ÛŒ شود یک OID منØصر به Ùرد به آن اختصاص Ù…ÛŒ
|
|
|
|
|
یابد. تمام OIDهایی Ú©Ù‡ در Øین initdb ایجاد Ù…ÛŒ شوند
|
|
|
|
|
از 16384 کمتر هستند و OIDهایی بعداً تولید می شود
|
|
|
|
|
از این عدد بزرگتر خواهد بود. نکته مهم آن است
|
|
|
|
|
که OIDها نه تنها در یک جدول شبیه نیستند بلکه
|
|
|
|
|
در Ú©Ù„ پایگاه داده هیچ دو ردیÙÛŒ دارای OID یکسان
|
|
|
|
|
نخواهد بود.
|
|
|
|
|
PostgreSQL از OID در سیستم داخلی خود برای ایجاد
|
|
|
|
|
ارتباط بین ردیÙهای جداول مختل٠استÙاده Ù…ÛŒ
|
|
|
|
|
کند. توصیه می شود که یک ستون از نوع OID برای
|
|
|
|
|
ذخیره این Ùیلد در جدول ایجاد کنید. ساختن یک
|
|
|
|
|
نمایه برای این Ùیلد باعث دسترسی سریعتر به آن
|
|
|
|
|
خواهد شد.
|
|
|
|
|
تمام پایگاههای داده در PostgreSQL برای گرÙتن OID
|
|
|
|
|
جدید از یک ناØیه مرکزی استÙاده Ù…ÛŒ کند. ولی
|
|
|
|
|
اگر بخواهیم OID را به روش دیگری بگیریم و یا
|
|
|
|
|
اینکه در Øین Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای
|
|
|
|
|
اصلی آن تغییر نکند به روش زیر می توانیم عمل
|
|
|
|
|
کنیم:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
|
|
|
|
CREATE TABLE new_table(mycol int);
|
|
|
|
|
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
|
|
|
|
|
COPY tmp_table TO '/tmp/pgtable';
|
|
|
|
|
COPY new_table WITH OIDS FROM '/tmp/pgtable';
|
|
|
|
|
DROP TABLE tmp_table;
|
2005-05-28 02:09:42 +04:00
|
|
|
|
OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین Øداکثر
|
|
|
|
|
مقدار آن 4 میلیارد خواهد بود و بعد از آن
|
|
|
|
|
مقدار آن سرریز خواهد شد. البته تا کنون برای
|
|
|
|
|
کسی این اتÙاق Ù†ÛŒÙتاده است Ùˆ تصمیم گرداندگان
|
|
|
|
|
PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتÙاق رخ دهد
|
|
|
|
|
این مشکل را برطر٠کنند.
|
|
|
|
|
TIDها برای شناسایی Ù…ØÙ„ Ùیزیکی یک ردی٠بر اساس
|
|
|
|
|
بلوک Ùˆ Ø¢Ùست Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا
|
|
|
|
|
کردن یک ردی٠و یا بازخوانی آن عوض می شوند.
|
|
|
|
|
TIDها توسط نمایه ها استÙاده Ù…ÛŒ شوند.
|
|
|
|
|
4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
|
|
|
|
|
استÙاده مي‌شود چيست؟
|
|
|
|
|
لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استÙاده Ù…ÛŒ
|
|
|
|
|
شوند:
|
|
|
|
|
table, relation, class :کلاس، رابطه، جدول
|
|
|
|
|
row, record, tuple چندتایی، رکورد، ردیÙ
|
|
|
|
|
column, field, attribute صÙت، Ùیلد، ستون
|
|
|
|
|
retrieve, select انتخاب، خواندن
|
|
|
|
|
replace, updateبه روز کردن، جایگزینی
|
|
|
|
|
append, insert درج، اضاÙÙ‡ کردن
|
|
|
|
|
OID, serial value مقدار سریال
|
|
|
|
|
portal, cursor
|
|
|
|
|
range variable, table name, table alias
|
|
|
|
|
یک لیست عمومی از ترمهای مورد استÙاده در
|
|
|
|
|
پایگاه داده در آدرس
|
|
|
|
|
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm
|
|
|
|
|
وجود دارد.
|
|
|
|
|
4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
|
|
|
|
|
مي‌گيرم؟
|
|
|
|
|
این خطا اØتمالاً یا به خاطر تمام شدن ØاÙظه
|
|
|
|
|
مجازی سیستم شماست و یا اینکه کرنل برای
|
|
|
|
|
برنامه ها در مورد میزان استÙاده از ØاÙظه
|
|
|
|
|
مجازی Ù…Øدودیت اعمال کرده است. قبل از اجرای
|
|
|
|
|
برنامه اصلی یکی از دستورات زیر را اجرا کنید.
|
2004-09-29 20:23:16 +04:00
|
|
|
|
ulimit -d 262144
|
|
|
|
|
limit datasize 256m
|
2005-05-28 02:09:42 +04:00
|
|
|
|
بسته به نوع شل یکی از این دستورات ممکن است با
|
|
|
|
|
موÙقیت اجرا شود. با اجرای آن دستور Ù…Øدودیت
|
|
|
|
|
ØاÙظه مجازی برای برنامه ها برداشته شده Ùˆ با
|
|
|
|
|
این کار اØتمالاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
|
|
|
|
|
داده است اجرا خواهد شد.
|
|
|
|
|
4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
|
|
|
|
|
PostgreSQLيي كه من استÙاده مي‌كنم چيست؟
|
|
|
|
|
با اجرای دستور ()SELECT version
|
|
|
|
|
4.20) چرا در Øین اجرای عملیات روی large-objectها
|
|
|
|
|
خطای "invalid large obj descriptor"به وجود می آید؟
|
|
|
|
|
شما باید قبل از شروع دستوراتی که با large-objectها
|
|
|
|
|
کار می کنند از BEGIN و بعد از آنها هم یک END
|
|
|
|
|
بگذارید. در Øال Øاضر PostgreSQL هندل large-objectها را
|
|
|
|
|
در زمان نهایی شدن تراکنش (commitشدن) می بندد. به
|
|
|
|
|
همین دلیل اولین تلاش برای انجام هر کاری با
|
|
|
|
|
هندل منجر به خطای invalid large obj descriptor خواهد شد.
|
|
|
|
|
برای جلوگیری از این خطا Øتماً باید از یک
|
|
|
|
|
تراکنش استÙاده کنید. این کار همانطور Ú©Ù‡
|
|
|
|
|
قبلاً Ú¯Ùته شد با استÙاده از قرار دادن BEGIN Ùˆ END
|
|
|
|
|
در ابتدا و انتهای دستورات انجام می شود.
|
|
|
|
|
اگر این خطا را در Øین استÙاده از یک درایور ODBC
|
|
|
|
|
دریاÙت کردید اØتمالاً باید این دستور را
|
|
|
|
|
اجرا کنید: set auto-commit off
|
|
|
|
|
4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
|
|
|
|
|
جاري را به عنوان مقدار پيش‌Ùرض داشته باشد؟
|
|
|
|
|
از CURRENT_TIMESTAMP استÙاده کنید در مثال زیر Ù†Øوه
|
|
|
|
|
انجام این کار نشان داده شده است:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.22) چرا "زير درخواستهايي" كه از IN استÙاده
|
|
|
|
|
مي‌كنند كند هستند؟
|
|
|
|
|
در نسخه های قبل از 7.4 عمل الØاق زیر درخواست Ùˆ
|
|
|
|
|
درخواست اصلی به این صورت انجام می شود که
|
|
|
|
|
نتایج به دست آمده از زیر درخواست به صورت
|
|
|
|
|
ترتیبی برای هر ردی٠اعمال می شود. اگر
|
|
|
|
|
زیردرخواست ردی٠های کمی را به عنوان خروجی
|
|
|
|
|
برگرداند و درخواست بیرونی ردی٠های زیادی را
|
|
|
|
|
شامل شود استÙاده از IN بهترین روش است در غیر
|
|
|
|
|
اینصورت بهتر است از EXISTS استÙاده شود
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE col IN (SELECT subcol FROM subtab);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
به:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
برای اجرای سریع این درخواست باید برای ستون
|
|
|
|
|
subcol نمایه ایجاد شده باشد.
|
|
|
|
|
در نسخه های بعد از 7.4 IN برای الØاق از همان
|
|
|
|
|
تکنیک پیچیده مورد استÙاده در دستورات معمولی
|
|
|
|
|
استÙاده Ù…ÛŒ کند Ùˆ بنابراین استÙاده از آن نسبت
|
|
|
|
|
به EXISTS ارجØیت دارد.
|
|
|
|
|
4.23) چگونه مي‌توانم يك الØاق خارجي (outer join)
|
|
|
|
|
انجام دهم؟
|
|
|
|
|
برای انجام الØاق خارجی به روش زیر عمل کنید:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
یا
|
2004-09-29 20:23:16 +04:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
2005-05-28 02:09:42 +04:00
|
|
|
|
درخواستهای بالا t1.col , t2.col را به هم الØاق Ù…ÛŒ
|
|
|
|
|
کند Ùˆ همچنین ردیÙهای t1 Ú©Ù‡ نظیر آنها در t2
|
|
|
|
|
نبوده است را نیز برمی گرداند. اگر از RIGHT
|
|
|
|
|
استÙاده شود نتیجه بر عکس است. یعنی ردیÙهای t2
|
|
|
|
|
که نظیر آنها در t1 نباشد را نشان می دهد و اگر
|
|
|
|
|
از FULL استÙاده شود نتیجه هم شامل ردیÙهای t1
|
|
|
|
|
است Ùˆ هم شامل ردیÙهای t2. استÙاده از کلمه OUTER
|
|
|
|
|
اختیاری است چرا که این کلمه به طور ضمنی
|
|
|
|
|
دستورهای LEFT, RIGHT, FULL وجود دارد.
|
|
|
|
|
در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم الØاق
|
|
|
|
|
خارجی را به کمک دستورهای UNION, NOT IN شبیه سازی
|
|
|
|
|
کنیم. این کار در مثال زیر نشان داده شده است:
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
|
|
|
|
SELECT tab1.col1, tab2.col2
|
|
|
|
|
FROM tab1, tab2
|
|
|
|
|
WHERE tab1.col1 = tab2.col1
|
|
|
|
|
UNION ALL
|
|
|
|
|
SELECT tab1.col1, NULL
|
|
|
|
|
FROM tab1
|
|
|
|
|
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
|
|
|
|
ORDER BY col1
|
2005-05-28 02:09:42 +04:00
|
|
|
|
4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
|
|
|
|
|
داده توليد كرد؟
|
|
|
|
|
در Øال Øاضر این کار امکان پذیر نیست. PostgreSQL
|
|
|
|
|
Ùقط امکان درخواست از پایگاه داده ای را Ù…ÛŒ
|
|
|
|
|
دهد Ú©Ù‡ در Øال Øاضر به آن متصل باشید Ùˆ نمی
|
|
|
|
|
توان به طور همزمان از دو پایگاه داده استÙاده
|
|
|
|
|
کرد. البته یک برنامه کاربردی خود می تواند به
|
|
|
|
|
طور همزمان دو پایگاه داده را مورد استÙاده
|
|
|
|
|
قرار داده و نتایج را با هم ترکیب کند ولی نمی
|
|
|
|
|
تواند در یک درخواست به هر دو پایگاه داده
|
|
|
|
|
رجوع کند.
|
|
|
|
|
4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ
|
|
|
|
|
يا ستون باشد؟
|
|
|
|
|
در نسخه 7.3 خروجی یک تابع می تواند چند ردی٠یا
|
|
|
|
|
چند ستون باشد. برای دیدن اطلاعات بیشتر به
|
|
|
|
|
سایت زیر مراجعه
|
|
|
|
|
کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions
|
|
|
|
|
4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
|
|
|
|
|
جداول موقت را ايجاد يا Øذ٠كرد؟
|
|
|
|
|
PL/PgSQL Ù…Øتوای توابع را ذخیره (cache) Ù…ÛŒ کند. یک
|
|
|
|
|
اثر بد جانبی این کار آن است که اگر در تابع از
|
|
|
|
|
یک جدول موقت استÙاده شود Ùˆ بعداً آن جدول ØØ°Ù
|
|
|
|
|
و یک جدول جدید به جای آن ایجاد شود، در
|
|
|
|
|
Ùراخوانی مجدد آن تابع، Ù…Øتوای ذخیره شده
|
|
|
|
|
تابع هنوز به جدول قدیمی اشاره می کند و
|
|
|
|
|
بنابراین اجرای تابع با اشکال مواجه می شود.
|
|
|
|
|
راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از
|
|
|
|
|
دستور EXECUTE استÙاده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود
|
|
|
|
|
که درخواست برای هر بار اجرا مجدداً پیمایش و
|
|
|
|
|
تÙسیر شود.
|
|
|
|
|
4.27) چه گزينه‌هايي براي تكرار (replication) وجود
|
|
|
|
|
دارد؟
|
|
|
|
|
There are several master/slave replication options available. These allow only
|
|
|
|
|
the master to make database changes and the slave can only do database reads.
|
|
|
|
|
The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists
|
|
|
|
|
them. A multi-master replication solution is being worked on at
|
|
|
|
|
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
|
|
|
|
|
4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
|
|
|
|
|
contrib/pgcrypto شامل توابع رمزنگاری زیادی است که
|
|
|
|
|
Ù…ÛŒ توان از آنها در دستورات SQL استÙاده کرد.
|
|
|
|
|
برای رمز کردن ارتباط بین client و server ، پایگاه
|
|
|
|
|
داده Øتماً گزینه SSL را بر روی پایگاه داده
|
|
|
|
|
Ùعال کنیم.
|
|
|
|
|
در نسخه 7.3 به بعد کلمات عبور کاربران به طور
|
|
|
|
|
اتوماتیک به صورت رمز شده ذخیره می شود ولی
|
|
|
|
|
در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در
|
|
|
|
|
Ùایلpostgresql.conf Ùعال کنیم.
|
|
|
|
|
Ù…ÛŒ توان پایگاههای داده را روی یک Ùایل سیستم
|
|
|
|
|
رمزشده نگاهداری کرد
|
|
|
|
|
|
|
|
|
|
|
2004-09-29 20:23:16 +04:00
|
|
|
|
|
2005-05-28 02:09:42 +04:00
|
|
|
|
Extending PostgreSQL
|
|
|
|
|
5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
|
|
|
|
|
اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
|
|
|
|
|
دلایل مختلÙÛŒ Ù…ÛŒ تواند باعث بروز این مشکل
|
|
|
|
|
شود. اما قبل از همه تابع خود را به صورت جدا
|
|
|
|
|
تست کنید.
|
|
|
|
|
5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
|
|
|
|
|
جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
|
|
|
|
|
داشته باشم؟
|
|
|
|
|
کد خود را به گروه پستی pgsql-hackers ارسال کنید.
|
|
|
|
|
5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
|
|
|
|
|
كه خروجي آن يك ‌tuple (چند تايي) باشد؟
|
|
|
|
|
در نسخه های 7.3 به بعد یک تابع می تواند یک جدول
|
|
|
|
|
را به عنوان خروجی برگرداند. این ویژگی در
|
|
|
|
|
توابعی که به زبانهای C و PL/PgSQL نوشته می شوند
|
|
|
|
|
به طور کامل وجود دارد. راهنما برنامه نویسان
|
|
|
|
|
را مطالعه کنید. یک مثال از Ù†Øوه برگرداندن یک
|
|
|
|
|
جدول به عنوان خروجی در contrib/tablefunc آمده است.
|
|
|
|
|
5.4) من يك Ùايل منبع را عوض كرده ام چرا در
|
|
|
|
|
عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
|
|
|
|
|
Makefile برای Ùایلهای include شده وابستگیها را به
|
|
|
|
|
درستی نشان نمی دهد. برای اطمینان از اینکه
|
|
|
|
|
Ùایلی Ú©Ù‡ عوض کرده اید Øتماً دوباره کامپیل Ù…ÛŒ
|
|
|
|
|
شود دستور make clean را اجرا کنید. اگر از کامپیلر
|
|
|
|
|
gcc استÙاده Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه
|
|
|
|
|
enable-depend-- در موقع اجرای برنامه configure استÙاده
|
|
|
|
|
کنید این گزینه باعث می شود که وابستگیها به
|
|
|
|
|
طور اتوماتیک تولید شود.
|