mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
1256 lines
141 KiB
Plaintext
1256 lines
141 KiB
Plaintext
PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
|
||
پرسيده مي شوند
|
||
تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† ÙØ§ÙŠÙ„: 28 شهریور 1383 هجری
|
||
شمسی
|
||
نگهدارنده اصلي ÙØ§ÙŠÙ„ (زبان انگليسي)در ØØ§Ù„
|
||
ØØ§Ø¶Ø± : Bruce Momjian pgman@candle.pha.pa.us
|
||
نگهدارنده ÙØ§ÙŠÙ„ به زبان ÙØ§Ø±Ø³ÙŠ: m.taghizadeh@imenafzar.net
|
||
Ù…ØÙ…ود تقي‌زاده مهرجردی
|
||
|
||
آخرين نسخه اين ÙØ§ÙŠÙ„ را مي‌توانيد از اين
|
||
آدرس بگيريد 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
|
||
چيزي ننويسيد.
|
||
subscribe
|
||
end
|
||
آدرس گروه: pgsql-general-request@PostgreSQL.org
|
||
همچنين يك گروه پستي هم به صورت ارسال چكيده
|
||
پيامها وجود دارد. براي عضو شدن در اين گروه يك
|
||
نامه با Ù…ØØªÙˆÙŠØ§Øª زير به این آدرس ارسال كنيد.
|
||
pgsql-general-digest-request@PostgreSQL.org
|
||
subscribe
|
||
end
|
||
در اين گروه هر موقع ØØ¬Ù… نامه‌ها به 30
|
||
كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
|
||
گروه پستي بررسي Ø§ÙØ´ÙƒØ§Ù„ات هم وجود دارد. براي
|
||
عضو شدن در اين گروه يك نامه با Ù…ØØªÙˆÙŠØ§Øª زير به
|
||
pgsql-bugs-request@PostgreSQL.org ارسال كنيد.
|
||
subscribe
|
||
end
|
||
گروه پستي مخصوص توسعه دهندگان
|
||
(برنامه‌نويسان) نيز وجوددارد. براي عضويت در
|
||
اين گروه يك نامه به آدرس زير با Ù…ØØªÙˆÙŠØ§Øª مشخص
|
||
شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org
|
||
subscribe
|
||
end
|
||
گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
|
||
دارد كه مي‌توانيد در سايت http://www.postgresql.org
|
||
ببينيد.
|
||
همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
|
||
وجود دارد. شما مي‌توانيد از ÙØ±Ù…ان يونيكسي irc
|
||
-c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
|
||
irc.freenode.net Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد.
|
||
ليست شركتهايي كه از طريق آنها مي‌توانيد
|
||
خدمات پشتيباني تجاري در زمينه PostgreSQL Ø¯Ø±ÙŠØ§ÙØª
|
||
كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
|
||
موجود است.
|
||
1.7) آخرين نسخه اعلام شده چيست؟
|
||
آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
|
||
هد٠ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
|
||
ارائه شود.
|
||
1.8) چه مستندات و راهنمائيهايي وجود دارند؟
|
||
چندين كتابچه Ùˆ ØµÙØØ§Øª راهنما Ùˆ مثالهاي كوچك
|
||
همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
|
||
دارد. براي ديدن ØµÙØØ§Øª راهنما مي‌توانيد به
|
||
سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
|
||
دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
|
||
http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
|
||
وجود دارد. ليستي از كتابهايي كه قابل خريد
|
||
است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
|
||
وجود دارد. همچنين ليستي از مقالات Ùني در
|
||
مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
|
||
دارد.
|
||
برنامه psql يك دستور d\ دارد كه اطلاعاتي در
|
||
مورد انواع داده‌هاي قابل تعري٠و عملگر‌ها
|
||
و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
|
||
ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
|
||
1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
|
||
امكاناتي كه در اين پايگاه داده وجود ندارد
|
||
مطلع شوم؟
|
||
PostgreSQL يك زير مجموعه Ù¾ÙŠØ´Ø±ÙØªÙ‡ از SQL-92 را
|
||
پشتيباني مي‌كند. در ليست TODO Ø§ÙØ´ÙƒØ§Ù„ات
|
||
شناخته شده يا امكاناتي كه وجود ندارد و يا
|
||
برنامه‌‌هاي آينده آمده است.
|
||
1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
|
||
كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
|
||
‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
|
||
http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي
|
||
خيلي خوب هم در سايت‌هاي
|
||
http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ
|
||
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ
|
||
http://sqlcourse.com در مورد SQL وجود دارد.
|
||
كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
|
||
ويرايش دوم" در سايت
|
||
http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
|
||
تعداد زيادي از كاربران كتاب The Practical SQL را
|
||
ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
|
||
انتشارات McGraw-Hill مي‌باشد.
|
||
1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
|
||
خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
|
||
مشكلي ندارد.
|
||
1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
|
||
ملØÙ‚ شوم؟
|
||
ابتدا،‌آخرين سورس را دونلود كرده و مستندات
|
||
مربوط به برنامه‌نويسي PostgreSQL را در سايت
|
||
مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
|
||
pgsql-hackers عضو شويد. در مرØÙ„Ù‡ آخر وصله‌هاي با
|
||
كيÙيت بالا را به pgsql-patches ارسال كنيد.
|
||
تعداد زيادي از برنامه‌نويسان وجود دارند كه
|
||
امتياز انجام تغييرات در cvs‌ را دارند. هر
|
||
كدام از آنها تعداد زيادي وصله‌‌ با كيÙيت
|
||
بالا به گروه ارسال كرده‌اند كه اعتماد
|
||
گردانندگان PostgreSQL را به دست آورده‌اند.
|
||
1.13) چگونه مي‌توانم يك Ø§ÙØ´ÙƒØ§Ù„ را به گروه
|
||
برنامه نويس اعلام كنم؟
|
||
Ù„Ø·ÙØ§Ù‹ ØµÙØÙ‡ مربوط به Ø§ÙØ´ÙƒØ§Ù„ات PostgreSQL را در
|
||
سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
|
||
اين سايت Ù†ØÙˆÙ‡ گزارش Ùˆ ارسال يك اشكال توضيØ
|
||
داده شده است.
|
||
همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
|
||
يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
|
||
بازديد كنيد.
|
||
1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
|
||
چه صورت است؟
|
||
راههاي مختلÙÙŠ براي اندازه‌گيري Ùˆ مقايسه
|
||
Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ وجود دارد كه عبارتند از
|
||
امكانات، كارايي، قابليت اعتماد، پشتيباني و
|
||
قيمت
|
||
امكانات
|
||
PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
|
||
پايگاه داده تجاري بزرگ نظير transactions, subselets,
|
||
triggers, views, foreign key referential integrity Ùˆ sophisticated
|
||
locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
|
||
دارد كه پايگاههاي داده ديگر آن را ندارند
|
||
نظير user-defined types‌و Inheritance‌و rules‌و multi-version
|
||
concurrency control
|
||
|
||
كارايي
|
||
كارايي PostgreSQL در ØØ¯ بقيه سيستم‌هاي
|
||
تجاري و متن باز است. در بعضي موارد سريعتر و
|
||
در بعضي موارد از آنها كندتر است. در مقايسه
|
||
با MySQL براي كاربران بيشتر و درخواست‌هاي
|
||
پيچيده و بار زياد خواندن/نوشتن سريعتر است.
|
||
در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
|
||
البته MySQL خيلي از امكانات PostgreSQL كه در بالا
|
||
به آن اشاره شد را ندارد. هد٠اصلي ما امكانات
|
||
و قابليت اعتماد بالاست در ضمن آنكه تلاش
|
||
مي‌كنيم تا كارايي آن نيز بهبود يابد. در
|
||
آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
|
||
جالب بين MySQL و PostgreSQL وجود دارد. از طر٠ديگر
|
||
MySQL‌ يك شركت است كه Ù…ØØµÙˆÙ„ خود را به صورت متن
|
||
باز ارائه مي‌كند ولي براي Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± غير
|
||
متن باز خود Ø§ØØªÙŠØ§Ø¬ به ليسانس تجاري دارد بر
|
||
خلا٠PostgreSQL كه يك گروه كاملاً متن باز هستند.
|
||
|
||
قابليت اطمينان
|
||
ما Ùكر مي‌كنيم كه يك سيستم پايگاه
|
||
داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
|
||
تمام تلاشمان را براي ارائه كدهاي پايداري
|
||
كه به خوبي تست شده باشند Ùˆ كمترين Ø§ÙØ´ÙƒØ§Ù„ات
|
||
را داشته باشند مي‌كنيم. هر نسخه جديدي كه
|
||
ارائه مي‌شود ØØ¯Ø§Ù‚Ù„ يك ماه را در مرØÙ„Ù‡ تست
|
||
بتا مي‌گذراند. ما بر اين باور هستيم كه
|
||
قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
|
||
سيستم‌هاي پايگاه داده قابل توجه است و
|
||
نسخه‌هايي كه تاكنون ارائه شده است نشان
|
||
مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
|
||
Ù…ØÙƒÙ… Ùˆ مطمئن را كه آماده بهره‌برداري است
|
||
داريم.
|
||
پشتيباني
|
||
گروههاي پستي ما امكان ارتباط و تماس به
|
||
گروه بزرگي از برنامه نويسان و كاربران را
|
||
مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
|
||
ديگران كمك كنند. دسترسي مستقيم به
|
||
برنامه‌نويسان و گروههاي كاربران و
|
||
راهنماها و كداصلي باعث مي‌شود كه
|
||
پشتيباني PostgreSQL نسبت به ساير پايگاههاي
|
||
داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
|
||
ارائه خدمات پشتيباني به صورت تجاري نيز
|
||
وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
|
||
section 1.6 مراجعه كنيد.
|
||
قيمت
|
||
هم براي Ø§Ø³ØªÙØ§Ø¯Ù‡ تجاري Ùˆ هم غير تجاري هيچ
|
||
هزينه‌اي نبايد پرداخت شود. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
|
||
براي انجام تغييرات در PostgreSQL توسط Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
كنندگان وجود ندارد به جز مواردي كه در
|
||
ليسانس BSD به آن اشاره شده است.
|
||
1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
|
||
كمك كنم؟
|
||
PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
|
||
كه آن را مديون Marc Fournier‌ است كه اين ساختار را
|
||
ايجاد كرده است.
|
||
كيÙيت يك ساختار براي يك پروژه متن باز بسيار
|
||
اهميت دارد. يك ساختار خوب مي‌تواند مانع از
|
||
ØÙˆØ§Ø¯Ø«ÙŠ Ø´ÙˆØ¯ كه در ØØ±ÙƒØª روبه‌جلوي پروژه خللي
|
||
وارد مي‌كنند.
|
||
البته اين ساختار تشكيلاتي ارزان نيست.
|
||
هزينه‌هاي ثابت ماهانه و روزمره براي
|
||
نگهداري Ùˆ ØÙظ اين ساختار مورد نياز است. اگر
|
||
شما يا شركت شما مايل است كه از نظر مالي به
|
||
اين ØØ±ÙƒØª كمك كند Ù„Ø·ÙØ§Ù‹ به سايت
|
||
http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
|
||
اهدا كنيد.
|
||
هر چند در ØµÙØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
|
||
است ولي مشاركت عمدتاً براي پشتيباني از
|
||
پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
|
||
اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
|
||
مشخص شده ارسال كنيد.
|
||
اگر يك Ø§Ø³ØªÙØ§Ø¯Ù‡ موÙÙ‚ از PostgreSQL سراغ داريد
|
||
Ù„Ø·ÙØ§Ù‹ آن را به سايت http://advocacy.postgresql.org گزارش
|
||
دهيد.
|
||
|
||
|
||
|
||
سوالات مربوط به Ø§Ø³ØªÙØ§Ø¯Ù‡ از پايگاه داده
|
||
2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
|
||
دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
|
||
PostgreSQL‌ وجود دارد.
|
||
براي Ú¯Ø±ÙØªÙ† psqlODBC به سايت
|
||
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
|
||
كنيد.
|
||
OpenLlink را از اين سايت http://www.openlinksw.com
|
||
مي‌توانيد بگيريد. اين درايور با
|
||
Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ù…Ø®ØªÙ„Ù ODBC كار مي‌كند بنابراين
|
||
شما قادر خواهيد بود با Ø§Ø³ØªÙØ§Ø¯Ù‡ از OpenLink روي
|
||
اكثر سكو‌هايي كه Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø±ODBC‌دارند بدون
|
||
مشكل به PostgreSQL نيز متصل شويد.
|
||
اين Ù…ØØµÙˆÙ„ به كساني كه Ø§ØØªÙŠØ§Ø¬ به خدمات
|
||
پشتيباني تجاري دارند ÙØ±ÙˆØ®ØªÙ‡ مي‌شود. ولي
|
||
نسخه آزاد اين Ù†Ø±Ù…â€ŒØ§ÙØ²Ø§Ø± هميشه در درسترس
|
||
مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
|
||
را به آدرس 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 وجود دارد.
|
||
|
||
|
||
|
||
سوالات مديريتي
|
||
3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
|
||
از /usr/local/pgsql/ نصب كنم؟
|
||
موقع اجراي دستور configure از گزينه prefix-- Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
كنيد.
|
||
3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
|
||
كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
|
||
به دلايل مختل٠ممكن است اين Ø§ØªÙØ§Ù‚ Ø¨ÙŠÙØªØ¯. اما
|
||
در قدم اول شما مطمئن شويد كه كه امكانات
|
||
اضاÙÙ‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
|
||
براي اجرا شدن نياز به Ø§Ø³ØªÙØ§Ø¯Ù‡ از امكانات
|
||
ØØ§Ùظه مشترك Ùˆ سماÙورها دارد.
|
||
3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
||
را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
|
||
Ø§ØØªÙ…الاً‌ قسمت ايجاد ØØ§Ùظه مشترك در كرنل به
|
||
درستي تنظيم نشده است Ùˆ يا اينكه بايد ÙØ¶Ø§ÙŠ
|
||
ØØ§Ùظه اشتراكي در كرنل را زياد كرد. ميزان
|
||
دقيق ØØ§Ùظه مشترك مورد نياز بسته به معماري Ùˆ
|
||
Ù†ØÙˆÙ‡ Ø§Ø³ØªÙØ§Ø¯Ù‡ از Ø¨Ø§ÙØ±Ù‡Ø§ توسط برنامه postmaster
|
||
دارد. براي بيشتر سيستم‌ها كه با تنظيمات
|
||
Ù¾ÙŠØ´â€ŒÙØ±Ø¶ كار مي‌كنند مقدار اين ØØ§Ùظه ØØ¯ÙˆØ¯ 1
|
||
مگابايت است. براي ديدن اطلاعات بيشتر راجع به
|
||
ØØ§Ùظه مشترك Ùˆ سماÙور به PostgreSQL Administrator's Guide
|
||
مراجعه كنيد.
|
||
3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
|
||
را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
|
||
اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
|
||
device باشد به اين معني است كه تعداد سماÙورهاي
|
||
تنظيم شده در كرنل كاÙÙŠ نيست. PostgreSQL‌ براي هر
|
||
ÙØ±Ø§ÙŠÙ†Ø¯ÙŠ ÙƒÙ‡ در backend اجرا مي‌شود به يك سماÙور
|
||
نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
|
||
است كه postmaster را با اعمال Ù…ØØ¯ÙˆØ¯ÙŠØª روي تعداد
|
||
ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠÙŠ ÙƒÙ‡ مي‌تواند ايجاد كند اجرا كنيم.
|
||
براي اينكار از گزينه N- و يك عدد كمتر از 32
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
|
||
پارامترهاي SEMMNS, SEMMNI كرنل را Ø§ÙØ²Ø§ÙŠØ´ دهيم.
|
||
در زمان دسترسي خيلي زياد به پايگاه داده، ‌
|
||
سماÙورهاي نامعتبر مي‌توانند باعث crash‌ كردن
|
||
سيستم شوند.
|
||
اگر پيغام خطا چيز ديگري باشد Ø§ØØªÙ…الاً به
|
||
دليل آن است كه كرنل از سماÙورها پشتيباني
|
||
نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
|
||
مديريتي PostgreSQL را مطالعه كنيد.
|
||
3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
|
||
كنترل كنم؟
|
||
به صورت پيش ÙØ±Ø¶ Ùقط از ماشيني كه PostgreSQL روي آن
|
||
در ØØ§Ù„ اجراست مي‌توان با Ø§Ø³ØªÙØ§Ø¯Ù‡ از
|
||
سوكت‌هاي يونيكسي به آن متصل شد. ساير
|
||
ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
|
||
آنكه گزينه tcp_sockets در ÙØ§ÙŠÙ„ postgresql.conf ÙØ¹Ø§Ù„ شده Ùˆ
|
||
همچنين با Ø§ØµÙ„Ø§Ø ÙØ§ÙŠÙ„ PGDATA/ph_hba.conf هويت‌شناسي
|
||
مبتني بر ميزبان نيز ÙØ¹Ø§Ù„ شود. با اين كار
|
||
مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
|
||
3.6) براي كارايي بالاتر و بهتر پايگاه داده من
|
||
چه تنظيماتي را بايد انجام دهم؟
|
||
به طور ØØªÙ… Ø§Ø³ØªÙØ§Ø¯Ù‡ از انديس‌ها باعث بالا
|
||
Ø±ÙØªÙ† سرعت پاسخ‌گويي به درخواست‌ها خواهد
|
||
شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†ØÙˆÙ‡
|
||
پردازش يك دستور توسط PostgreSQL را مي‌دهد.
|
||
اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
|
||
آنها را با قرار دادن در يك ÙØ§ÙŠÙ„ با دستور COPY‌
|
||
اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
|
||
است. ØØªÙŠâ€ŒØ§Ù„امكان سعي كنيد از تراكنشها
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ نكنيد. تراكنشها مجموعه دستوراتي
|
||
هستند كه بيند BEGIN Ùˆ â€COMMIT مي‌آيند. اگر يك
|
||
دستور به صورت عادي اجرا شود PostgreSQL خود آن
|
||
دستور را به صورت يك تراكنش مستقل نگاه كرده و
|
||
اجرا مي‌كند. موقعی كه تغييرات زيادي در
|
||
پايگاه داده انجام مي‌شود انديسهاي قبلي را
|
||
ØØ°Ù Ùˆ مجدداً‌ ايجاد كنيد.
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه o -F- در ÙØ±Ù…ان postmaster باعث غير
|
||
ÙØ¹Ø§Ù„ كردن ()fsync مي‌شود. اين دستور بعد از هر
|
||
تراكنش اطلاعات را روي هاردديسك منتقل
|
||
مي‌كند.
|
||
براي Ø§ÙØ²Ø§ÙŠØ´ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ÙŠ ØØ§Ùظه اشتراكي از
|
||
گزينه B- به همراه ÙØ±Ù…ان postmaster Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد.
|
||
توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
|
||
است postmaster اصلاً‌ اجرا نشود. هر Ø¨Ø§ÙØ± 8 كيلو
|
||
بايت ØØ§Ùظه نياز دارد Ùˆ تعداد Ø¨Ø§ÙØ±Ù‡Ø§ به طور
|
||
پيش ÙØ±Ø¶ 64 است.
|
||
همچنين مي‌توان با گزينه S- ميزان ØØ§Ùظه‌اي
|
||
كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود را Ø§ÙØ²Ø§ÙŠØ´ داد. مقدار پيش ÙØ±Ø¶
|
||
512 كيلو بايت است.
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور CLUSTER نيز براي بالا بردن
|
||
كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
|
||
بيشتري در اين زمينه به شما مي‌دهد.
|
||
3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
|
||
دارد؟
|
||
PostgerSQL‌ امكانات مختلÙÙŠ براي گزارش دادن
|
||
وضعيت خود دارد كه براي اشكال زدايي مي‌توان
|
||
از آنها Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد.
|
||
با Ø§Ø³ØªÙØ§Ø¯Ù‡ از گزينه enable-assert-- تعداد زيادي
|
||
()assert براي مونيتور كردن و توق٠برنامه در صورت
|
||
بروز خطاهاي ناخواسته ÙØ¹Ø§Ù„ مي‌شود.
|
||
هم Postmaster و هم postgres گزينه‌هاي زيادي براي
|
||
اشكال زدايي دارند. موقعي كه postmaster را اجرا
|
||
مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت ÙØ§ÙŠÙ„ log
|
||
ارسال كنيد.
|
||
cd /usr/local/pgsql
|
||
./bin/postmaster >server.log 2>&1 &
|
||
اين كار يك ÙØ§ÙŠÙ„ log در بالاترين شاخه PostgreSQL‌
|
||
ايجاد مي‌كند. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ Ø§Ø·Ù„Ø§Ø¹Ø§Øª Ù…Ùيدي
|
||
در مورد مسائل و خطاهايي است كه براي سرور
|
||
Ø§ØªÙØ§Ù‚ Ø§ÙØªØ§Ø¯Ù‡ است. براي ديدن جزئيات بيشتر
|
||
مي‌توان از d- به همراه ÙØ±Ù…ان postmaster‌ Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
|
||
دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Logâ€ŒÙØ§ÙŠÙ„ نوشته
|
||
مي‌شود. با بالابردن اين عدد ØØ¬Ù… اطلاعات
|
||
توليد شده در LogÙØ§ÙŠÙ„ نيز Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد.
|
||
اگر postmaster در ØØ§Ù„ اجرا نباشد، مي‌توانيم postgres
|
||
را به طور مستقيم از خط ÙØ±Ù…ان اجرا كرده Ùˆ
|
||
دستورات SQL را به آن بدهيم. اين كار Ùقط براي
|
||
اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
|
||
اين ØØ§Ù„ت يك دستور با كاراكتر newline خاتمه پيدا
|
||
مي‌كند و نه با ;. اگر postmaster را با امكانات
|
||
اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از يك برنامه اشكال‌ياب اجراي
|
||
برنامه را مونيتور كنيد.
|
||
اگر postmaster در ØØ§Ù„ اجرا باشد با دستور psql
|
||
مي‌توان به postgres متصل شد. با پيدا كردن PID
|
||
ÙØ±Ø§ÙŠÙ†Ø¯ postgres كه psql به آن متصل شده است مي‌توان
|
||
آن را مونيتور كرد. براي اينكار بايد يك
|
||
برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
|
||
بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙÙŠ
|
||
است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
|
||
مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
|
||
اين ÙØ§ØµÙ„Ù‡ شما مي‌توانيد برنامه اشكال‌ياب
|
||
را به آن متصل كرده و با قرار دادن يك نقطه
|
||
توق٠روند اجراي آن را مونيتور كنيد.
|
||
postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
|
||
پيدا كردن اشكالات بسيار مناسب هستند.
|
||
شما مي‌توانيد postgreSQL را با امكانات profiling
|
||
كامپيل كنيد. اين كار باعث مي‌شود كه زمان
|
||
اجراي دقيق هر تابع در برنامه مشخص شود.
|
||
خروجي‌هاي توليد شده در اين ØØ§Ù„ت در ÙØ§ÙŠÙ„
|
||
DLINUX_PROFILE. ريخته مي‌شود.
|
||
3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
|
||
وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
|
||
شما بايد ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ Ù‡Ù…Ø²Ù…Ø§Ù†
|
||
postmaster را Ø§ÙØ²Ø§ÙŠØ´ دهيد. مقدار پيش ÙØ±Ø¶ 32 است.
|
||
براي Ø§ÙØ²Ø§ÙŠØ´ آن مي‌توان از گزينه N- Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
كرد Ùˆ يا ÙØ§ÙŠÙ„ postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
|
||
توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
|
||
باشد بايد مقدار B- را نيز Ø§ÙØ²Ø§ÙŠØ´ دهيم. اين
|
||
مقدار بايد ØØ¯Ø§Ù‚Ù„ دو برابر مقدار N-‌ باشد.
|
||
براي اعداد خيلي بالا بايد بعضي از
|
||
پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
|
||
پارامترهايي نظير ØØ¯Ø§ÙƒØ«Ø± اندازه ØØ§Ùظه
|
||
اشتراكي SHMMAX ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد سماÙورها SEMMNI‌ Ùˆ
|
||
SEMMNS ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ NPROCØŒ ØØ¯Ø§ÙƒØ«Ø±
|
||
ÙØ±Ø§ÙŠÙ†Ø¯Ù‡Ø§ÙŠ ÙŠÙƒ كاربر MAXUPRC Ùˆ ØØ¯Ø§ÙƒØ«Ø± ÙØ§ÙŠÙ„هاي باز
|
||
NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
|
||
همزمان postgreSQL Ù…ØØ¯ÙˆØ¯ است آن است كه نيازهاي
|
||
PostgreSQL بيش از منابع موجود سيستم نباشد.
|
||
3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
|
||
دراين شاخه ÙØ§ÙŠÙ„هاي موقتي قرار دارد كه با
|
||
اجراي درخواستها به وجود آمده است. به عنوان
|
||
مثال اگر براي اجراي دستور order by نياز به انجام
|
||
مرتب سازي باشد Ùˆ در صورتي كه ØØ§Ùظه مشخص شده
|
||
با گزينه S- براي اينكار كاÙÙŠ نباشد سيستم يك
|
||
ÙØ§ÙŠÙ„ موقت در اين شاخه ايجاد مي‌كند تا عمل
|
||
مرتب سازي را انجام دهد.
|
||
ÙØ§ÙŠÙ„هاي موقت معمولاً به صورت اتوماتيك پاك
|
||
مي‌شود اما اگر postgreSQL در ØÙŠÙ† مرتب سازي crash‌
|
||
كند آن ÙØ§ÙŠÙ„ها باقي مي‌مانند. با stop Ùˆ start كردن
|
||
برنامه postmaster اين ÙØ§ÙŠÙ„ها پاك مي‌شوند.
|
||
3.10) چرا براي به روز كردن نسخه پايگاه داده من
|
||
بايد كل داده ها را dump‌ و مجدداً restore كنم؟
|
||
تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
|
||
كه Ùقط minor آنها Ù…ØªÙØ§ÙˆØª است Ùقط تغييرات كوچكي
|
||
اعمال مي‌كنند؛ بنابراين براي به روز كردن از
|
||
نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
|
||
نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
|
||
ساختار داخلي جداول Ùˆ ÙØ§ÙŠÙ„هاي داده تغيير
|
||
مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
|
||
براي انتقال داده‌هاي موجود در پايگاه داده
|
||
در اين ØØ§Ù„ت بايد ‌از dump Ùˆ restore Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد.
|
||
در نسخه‌هايي كه ساختار روي ديسك تغييري
|
||
نمي‌كند مي توان از برنامه pg_upgrade براي به روز
|
||
كردن پايگاه داده Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد بدون اينكه
|
||
نيازي به Ø§Ø³ØªÙØ§Ø¯Ù‡ از dump Ùˆ restore باشد. در
|
||
يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
|
||
شده است كه آيا برنامه pg_upgrade براي اين توزيع
|
||
وجود دارد يا خير.
|
||
3.11) از Ú†Ù‡ سخت Ø§ÙØ²Ø§Ø±ÙŠ Ø¨Ø§ÙŠØ¯ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟
|
||
|
||
چون اكثر Ø³Ø®Øªâ€ŒØ§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ PC سازگار هستند مردم
|
||
Ùكر مي‌كنند كه كيÙيت آنها نيز يكسان است. در
|
||
ØØ§Ù„يكه اينطور نيست. Ø§Ø³ØªÙØ§Ø¯Ù‡ از هاردهاي SCSI Ùˆ
|
||
ØØ§Ùظه‌هاي ECC Ùˆ مادربردهاي با كيÙيت بالا
|
||
نسبت به سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ÙŠ Ø§Ø±Ø²Ø§Ù†ØªØ± نتايج بهتري از
|
||
نظر كارايي و پايداري سيستم بهمراه خواهد
|
||
داشت. PostgreSQL روي بيشتر سخت Ø§ÙØ²Ø§Ø±Ù‡Ø§ اجرا
|
||
مي‌شود اما اگر كارايي Ùˆ اطمينان ÙØ§ÙƒØªÙˆØ±Ù‡Ø§ÙŠ
|
||
مهمي هستند بايد سخت Ø§ÙØ²Ø§Ø± مناسب Ø§Ø³ØªÙØ§Ø¯Ù‡ شود.
|
||
در گروههاي پستي در مورد سخت Ø§ÙØ²Ø§Ø± مناسب Ùˆ
|
||
انتخاب آن Ø¨ØØ« شده است.
|
||
|
||
|
||
|
||
سوالات عملياتي
|
||
4.1) ØªÙØ§ÙˆØª بين binary cursors Ùˆ Normal cursors چيست؟
|
||
راهنماي دستور DECLARE‌ را مطالعه كنيد.
|
||
4.2) من چگونه مي‌توانم Ùقط روي چند ردي٠اول يا
|
||
يك ردي٠تصادÙÙŠ درخواست SELECT‌ بزنم؟
|
||
راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
|
||
در واقع كل درخواست بايد بررسي و ارزيابي شود
|
||
ØØªÙŠ Ø§Ú¯Ø± شما Ùقط چند ردي٠اول را بخواهيد. براي
|
||
مثال درخواست ORDER BY را در نظر بگيريد. اگر
|
||
انديس يا نمايه‌اي براي ORDER BY وجود داشته
|
||
باشد،‌postgreSQL‌ ممكن است بتواند Ùقط چند سطر
|
||
اول درخواستي را ارزيابي كند و يا اينكه كل
|
||
درخواست پردازش شود تا تعداد رديÙ‌هاي
|
||
درخواستي توليد شود.
|
||
براي انتخاب يك سطر تصادÙÙŠ به روش زير عمل
|
||
مي‌كنيم:
|
||
SELECT col
|
||
FROM tab
|
||
ORDER BY random()
|
||
LIMIT 1;
|
||
4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
|
||
چيزهايي كه در psql‌ وجود دارد را ببينم؟
|
||
براي ديدن ليست جداول دستور dt\ را در برنامه
|
||
psql‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. براي ديدن ليست كامل
|
||
ÙØ±Ù…انها ?\ را اجرا كنيد. راه ديگر خواندن متن
|
||
برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
|
||
‌قرار دارد. اين ÙØ§ÙŠÙ„ ØØ§ÙˆÙŠ ÙØ±Ø§Ù…ين SQLيي است كه
|
||
خروجي را براي دستوراتي كه با \‌در psql شروع
|
||
مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
|
||
گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
|
||
از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
|
||
PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
|
||
با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن اطلاعات داخلي پايگاه داده
|
||
را استخراج كرد.
|
||
4.4) چگونه يك ستون جدول را ØØ°Ù مي‌كنيد؟ چگونه
|
||
نوع داده آن را عوض كنيم؟
|
||
ØØ°Ù يك ستون در توزيع 7.3 با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور
|
||
ALTER TABLE DROP COLUMN اضاÙÙ‡ شده است. در نسخه‌هاي
|
||
قبلي به روش زير عمل كنيد:
|
||
BEGIN;
|
||
LOCK TABLE old_table;
|
||
SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù كنيد را در اينجا بياوريد
|
||
INTO TABLE new_table
|
||
FROM old_table;
|
||
DROP TABLE old_table;
|
||
ALTER TABLE new_table RENAME TO old_table;
|
||
COMMIT;
|
||
براي عوض كردن نوع داده يك ستون به روش زير عمل
|
||
كنيد:
|
||
BEGIN;
|
||
ALTER TABLE tab ADD COLUMN new_col new_data_type;
|
||
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
|
||
ALTER TABLE tab DROP COLUMN old_col;
|
||
COMMIT;
|
||
4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ø±Ø¯ÙŠÙØŒâ€Œ جدول Ùˆ خود
|
||
پايگاه داده چقدر است؟
|
||
Ù…ØØ¯ÙˆØ¯ÙŠØªÙ‡Ø§ عبارتند از:
|
||
ØØ¯Ø§ÙƒØ«Ø± اندازه پايگاه داده Ù†Ø§Ù…ØØ¯ÙˆØ¯ (تا 32 ترابايت وجود دارد)
|
||
ØØ¯Ø§ÙƒØ«Ø± اندازه يك جدول 32 ترابايت
|
||
ØØ¯Ø§ÙƒØ«Ø± ا ندازه يك ردي٠1.6 ترابايت
|
||
ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ùيلد 1 گيگا بايت
|
||
ØØ¯Ø§ÙƒØ«Ø± اندازه رديÙهاي يك جدول نا Ù…ØØ¯ÙˆØ¯
|
||
ØØ¯Ø§ÙƒØ«Ø± ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
|
||
ØØ¯Ø§ÙƒØ«Ø± انديسهاي يك جدول نا Ù…ØØ¯ÙˆØ¯
|
||
البته در ØØ§Ù„ت Ù†Ø§Ù…ØØ¯ÙˆØ¯ نيز ما Ù…ØØ¯ÙˆØ¯ به ØØ¬Ù…
|
||
هاردديسك Ùˆ ÙØ¶Ø§ÙŠ ØØ§Ùظه خواهيم بود. در صورتي
|
||
Ú©Ù‡ مقادير مشخص شده به عنوان Ù†Ø§Ù…ØØ¯ÙˆØ¯ به صورت
|
||
غير معمولي بزرك شوند كارايي سيستم كاهش
|
||
خواهد ÙŠØ§ÙØª.
|
||
براي ذخيره كردن جداول با اندازه خيلي بزرگ
|
||
نيازي نيست كه سيستم عامل امكان ايجاد
|
||
ÙØ§ÙŠÙ„هاي بزرگ را داشته باشد. بلكه جداول خيلي
|
||
بزرگ به صورت ÙØ§ÙŠÙ„هايي به ØØ¬Ù… يك گيگا بايت
|
||
نگاهداري مي‌شوند.
|
||
اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
|
||
قرار دهيم ØØ¯Ø§ÙƒØ«Ø± اندازه جدول Ùˆ ØØ¯Ø§ÙƒØ«Ø± تعداد
|
||
ستونها 4 برابر خواهد شد.
|
||
4.6) چقدر ÙØ¶Ø§ÙŠ Ø¯ÙŠØ³Ùƒ سخت براي ذخيره كردن
|
||
داده‌‌هاي يك ÙØ§ÙŠÙ„ متني مورد نياز است؟
|
||
يك پايگاه داده PostgreSQL‌ تا 5 برابر ÙØ¶Ø§ÙŠÙŠ Ø±ÙˆÙŠ
|
||
هاردديسك براي نگاهداري يك ÙØ§ÙŠÙ„ متني نياز
|
||
دارد.
|
||
به عنوان مثال يك ÙØ§ÙŠÙ„ با 100000 خط را در نظر
|
||
بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
|
||
متني آمده است. ÙØ±Ø¶ كنيد كه رشته متني به طور
|
||
متوسط 20 بايت باشد. اندازه ÙØ§ÙŠÙ„ برابر 2.8 مگا
|
||
بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
|
||
ÙØ§ÙŠÙ„ به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
|
||
32 bytes: اندازه سرايند هر خط به طور تقريبي
|
||
24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
|
||
+ 4 bytes: اشاره گر روي ØµÙØÙ‡ به يك چندتايي
|
||
----------------------------------------
|
||
60 bytes در هر رديÙ
|
||
|
||
اندازه ØµÙØØ§Øª داده در PostgreSQL برابر با 8 كيلو بايت است
|
||
8192 تعداد بايت‌ها در هر ØµÙØÙ‡
|
||
------------------- = 136 تعداد رديÙ‌ها در يك ØµÙØÙ‡ پايگاه داده
|
||
60 تعداد بايت‌هاي هر رديÙ
|
||
|
||
100000 تعداد رديÙها
|
||
-------------------- = ØªØ¹Ø¯Ø§Ø¯ØµÙØØ§Øª پايگاه داده
|
||
128 تعداد رديÙها در هر ØµÙØÙ‡
|
||
|
||
735 تعداد ØµÙØØ§Øª * 8192 تعداد بايت‌هاي هر ØµÙØÙ‡ = 6,021,120 مگا بايت
|
||
سربار انديسها يا نمايه‌ها از اين مقدار كمتر
|
||
است ولي چون شامل خود داده‌ها هم هست ممکن است
|
||
اندازه آنها هم بزرگ شود.
|
||
NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
|
||
ÙØ¶Ø§ÙŠ Ø¨Ø³ÙŠØ§Ø± كمي را اشغال مي‌كنند.
|
||
4.7) چگونه مي‌توانم بÙهمم كه Ú†Ù‡ كاربران،‌
|
||
پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ
|
||
شده است؟
|
||
psql تعداد زيادي دستور دارد كه با \ شروع
|
||
مي‌شوند و اين اطلاعات را در اختيار ما قرار
|
||
مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
|
||
كنيد. همچنين جداول سيستمي كه با نام آنها pg_
|
||
‌شروع مي‌شود نيز اين اطلاعات را در خود
|
||
دارند. اجراي برنامه psql با گزينه l- نيز باعث
|
||
نشان دادن ليست تمام پايگاههاي داده مي‌شود.
|
||
همچنين ÙØ§ÙŠÙ„ pgsql/src/tutorial/syscat.source نيز ÙØ±Ù…انهاي
|
||
SELECT كه با Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن مي‌توان اطلاعات
|
||
پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
|
||
4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
|
||
چرا از نمايه ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند؟
|
||
به طور معمول براي درخواستها از نمايه‌ها
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌شود. تنها در صورتي از نمايه‌ها
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود كه اندازه جدول از يك اندازه
|
||
ØØ¯Ø§Ù‚Ù„ بزرگتر باشد Ùˆ درخواست هم Ùقط قسمتي از
|
||
رديÙ‌هاي جدول را انتخاب كرده باشد. دليل اين
|
||
كار آن است كه دسترسي‌هاي تصادÙÙŠ به هاردديسك
|
||
كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
|
||
از خواندن مستقيم جدول يا خواندن ترتيبي
|
||
ركوردها كندتر باشد.
|
||
براي تعيين اينكه از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا
|
||
خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
|
||
جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
|
||
ANALYZE به دست مي‌آيد. با Ø§Ø³ØªÙØ§Ø¯Ù‡ از اين
|
||
اطلاعات،‌ بهينه ساز از تعداد رديÙ‌هاي يك
|
||
جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
|
||
تعيين كند كه آيا از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ شود يا خير.
|
||
اطلاعات آماري همچنين براي تعيين ترتيب Ø§Ù„ØØ§Ù‚
|
||
Ùˆ روشهاي Ø§Ù„ØØ§Ù‚ به صورت بهينه نيز كاربر دارد.
|
||
جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
|
||
همزمان با تغيير داده‌هاي جدول انجام شود.
|
||
نمايه‌ها به طور معمول همراه با دستور ORDER BY
|
||
به كار برده نمي‌شوند. براي يك جدول بزرگ يك
|
||
پيمايش ترتيبي همراه با دستور مرتب سازي از به
|
||
كار بردن نمايه‌ها سريعتر خواهد بود.
|
||
اما اگر همراه با ORDER BY‌ از LIMIT Ø§Ø³ØªÙØ§Ø¯Ù‡ شود
|
||
اغلب از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود چون Ùقط
|
||
قسمتي از جدول Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. در ØÙ‚يقت هر
|
||
چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
نمي‌كنند ولي مي‌توانيم با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دستور
|
||
زير با Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
|
||
LIMIT‌ آنها را به دست آوريم.
|
||
SELECT col
|
||
FROM tab
|
||
ORDER BY col [ DESC ]
|
||
LIMIT 1;
|
||
اگر شما Ùكر مي‌كنيد كه بهينه ساز سيستم در
|
||
انتخاب پيمايش ترتيبي اشتباه كرده است با
|
||
دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها باعث Ø§ÙØ²Ø§ÙŠØ´ سرعت
|
||
درخواست‌ها خواهد شد.
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از نمايه‌ها هنگامي كه از علائم ويژه
|
||
نظير LIKE Ùˆ ~ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيد Ùقط در بعضي
|
||
شرايط خاصي كه در اينجا ذكر شده است ممكن است:
|
||
ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
|
||
باشد براي مثال:
|
||
دستورات LIKE نبايد با علامت % شروع شوند
|
||
الگوهاي منظمي كه با ~ مي‌ايد ØØªÙ…اً بايد با
|
||
علامت ^ شروع شود
|
||
رشته جستجو نبايد با يك مجموعه از
|
||
كاراكتر‌ها مثل [a-e] شروع شود
|
||
جستجوهاي ØºÙŠØ±ØØ³Ø§Ø³ به متن مثل ILIKE‌ Ùˆ *~ از
|
||
نمايه‌ها Ø§Ø³ØªÙØ§Ø¯Ù‡ نمي‌كنند. در عوض از
|
||
توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنند.
|
||
مقدار پيش ÙØ±Ø¶ locale‌ بايد در initdb Ø§Ø³ØªÙØ§Ø¯Ù‡ شود.
|
||
|
||
4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را
|
||
توسط بهينه‌ساز درخواستها مشاهده كنم؟
|
||
راهنماي دستور EXPLAIN را نگاه كنيد.
|
||
4.10) نمايه R-tree‌ چيست؟
|
||
از نمايه R-Tree براي انديس كردن داده‌هاي
|
||
ÙØ§ØµÙ„ه‌اي Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود. يك نمايه hash
|
||
نمي‌توانند جستجوهاي Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø±Ø§ انجام
|
||
دهد. نمايه "B-tree" نيز براي انجام جستجوي
|
||
Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø¯Ø± يك جهت قابل Ø§Ø³ØªÙØ§Ø¯Ù‡ است. اما
|
||
R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
|
||
پشتيباني كند. براي مثال Ø§Ø³ØªÙØ§Ø¯Ù‡ اگر از نمايه
|
||
R-tree‌ براي گونه Point Ø§Ø³ØªÙØ§Ø¯Ù‡ شود سرعت
|
||
درخواست‌هايي نظير "select all points within a bounding
|
||
rectangle" به مراتب Ø§ÙØ²Ø§ÙŠØ´ مي‌يابد.
|
||
مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
|
||
Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching."
|
||
Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
|
||
R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
|
||
پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
|
||
بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
|
||
توسعه R-tree‌ نياز به كار بيشتري دارد.
|
||
4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
|
||
Optimizer)
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از GEQO سرعت بهينه سازي درخواست را
|
||
هنگاميكه تعداد زيادي جدول را با Ø§Ø³ØªÙØ§Ø¯Ù‡ از
|
||
الگوريتم ژنتيك Ø§Ù„ØØ§Ù‚ مي‌كنيم Ø§ÙØ²Ø§ÙŠØ´
|
||
مي‌دهد.
|
||
4.12) چگونه از عبارات منظم براي جستجو Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن
|
||
نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن
|
||
از نمايه Ø§Ø³ØªÙØ§Ø¯Ù‡ كنم؟
|
||
براي جستجوي عبارت منظم از عملگر ~‌ Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
مي‌كنيم. براي جستجوي غير ØØ³Ø§Ø³ به متن از
|
||
عملگر *~ Ùˆ يا ILIKE‌ Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌كنيم.
|
||
روش ديگر انجام جستجوي غير ØØ³Ø§Ø³ به متن در زير
|
||
نشان داده شده است.
|
||
SELECT *
|
||
FROM tab
|
||
WHERE lower(col) = 'abc';
|
||
اين از نمايه‌هاي استاندارد Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
نمي‌كند. ولي شما مي توانيد با دستور زير يك
|
||
نمايه ايجاد كنيد Ùˆ از آن Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد.
|
||
CREATE INDEX tabindex ON tab (lower(col));
|
||
4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
|
||
كه يك Ùيلد NULL‌ است؟
|
||
با Ø§Ø³ØªÙØ§Ø¯Ù‡ از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
|
||
NULL بودن يك Ùيلد را تست كنيم.
|
||
4.14) ØªÙØ§ÙˆØª بين گونه‌هاي مختل٠character چيست؟
|
||
Type Internal Name Notes
|
||
--------------------------------------------------
|
||
VARCHAR(n) varchar اندازه، ØØ¯Ø§ÙƒØ«Ø± طول را نشان مي دهد بدون اضاÙÙ‡ شدن كاراكتر اضاÙÙ‡
|
||
CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده Ø§Ø³ØªÙØ§Ø¯Ù‡ مي‌شود
|
||
TEXT text ØØ¯Ø§ÙƒØ«Ø± طول را مشخص نمي‌كند
|
||
BYTEA bytea آرايه‌اي از بايت با طول متغير
|
||
"char" char يك كاراكتر
|
||
نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
|
||
پيغامهاي خطا مي‌توان ديد.
|
||
چهار گونه اول همگي از نوع varlena هستند (4 بايت
|
||
اول روي ديسك طول را مشخص مي‌كند كه به دنبال
|
||
آن داده‌ها قرار دارند.)‌بنابراين ÙØ¶Ø§ÙŠ
|
||
واقعي Ø§Ø³ØªÙØ§Ø¯Ù‡ شده روي ديسك از اندازه تعريÙ
|
||
شده بيشتر است. اما اين گونه‌ها را مي‌توان
|
||
ÙØ´Ø±Ø¯Ù‡ كرد كه اينكار باعث مي‌شود ÙØ¶Ø§ÙŠ ÙƒÙ…ØªØ±ÙŠ
|
||
روي ديسك اشغال كنند.
|
||
براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
|
||
بهترين انتخاب است. در اين گونه ØØ¯Ø§ÙƒØ«Ø± طول
|
||
رشته Ù…ØØ¯ÙˆØ¯ است بر خلا٠text كه هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
|
||
روي ØØ¯Ø§ÙƒØ«Ø± اندازه رشته نمي‌گذارد.(در اين
|
||
گونه ØØ¯Ø§ÙƒØ«Ø± طول يك رشته يك گيگا بايت خواهد
|
||
بود)
|
||
گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
|
||
است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
|
||
(خالي) پر مي‌شود تا به طول مشخص شده برسد در
|
||
ØØ§Ù„يكه گونه VARCHAR كاراكترها را به همان صورت
|
||
كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
|
||
داده‌هاي باينري است به خصوص داده‌هاي
|
||
باينتري كه شامل بايت‌هاي NULL هستند. از نظر
|
||
كارايي تمام اين گونه‌ها يكسان هستند.
|
||
4.15.1) چگونه مي‌توانم يك Ùيلد سريال يا
|
||
Ø§ÙØ²Ø§ÙŠØ´ÙŠ Ø§ÙŠØ¬Ø§Ø¯ كنم؟
|
||
PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
|
||
براي ايجاد يك Ùيلد سريال (براي داشتن يك Ùيلد
|
||
Ù…Ù†ØØµØ± به ÙØ±Ø¯ براي هر ردي٠)به روش زير عمل
|
||
كنيد:
|
||
CREATE TABLE person (
|
||
id SERIAL,
|
||
name TEXT
|
||
);
|
||
دستور بالا به طور اتوماتيک به دستور زير
|
||
تبديل مي‌شود:
|
||
CREATE SEQUENCE person_id_seq;
|
||
CREATE TABLE person (
|
||
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
||
name TEXT
|
||
);
|
||
براي ديدن اطلاعات بيشتر به راهنماي دستور
|
||
create_sequence مراجعه كنيد. همچنين مي‌توان از
|
||
OID‌هر ردي٠به عنوان يك مقدار Ù…Ù†ØØµØ± به ÙØ±Ø¯
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد. اما در اين ØØ§Ù„ت براي dump كردن Ùˆ
|
||
reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
|
||
با گزينه o-‌ اجرا كنيد.
|
||
4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
|
||
بدانم؟
|
||
يك روش براي Ú¯Ø±ÙØªÙ† مقدار بعدي يك Ùيلد سريال
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ از تابع ()nextval است. در شبه ÙƒÙØ¯ÙŠ ÙƒÙ‡ در
|
||
ادامه آمده است روش انجام اين كار نشان داده
|
||
شده است:
|
||
new_id = execute("SELECT nextval('person_id_seq')");
|
||
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
||
با اجرا دستور Ùوق مقدار جديد را در متغير new_id
|
||
نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
|
||
درخواست‌هاي نيز Ø§Ø³ØªÙØ§Ø¯Ù‡ كنيد. توجه داشته
|
||
باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
|
||
شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
|
||
در آن table‌ نام جدول Ùˆ serialcolumn نام Ùيلد سريال
|
||
جدول مي‌باشد.
|
||
براي ديدن مقدار نسبت داده شده به Ùيلد سريال
|
||
نيز مي‌توان از تابع () currval به صورت زير
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ كرد.
|
||
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
||
new_id = execute("SELECT currval('person_id_seq')");
|
||
و سرانجام شما مي‌توانيد از مقدار 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های
|
||
اصلی آن تغییر نکند به روش زیر می توانیم عمل
|
||
کنیم:
|
||
|
||
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;
|
||
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"
|
||
مي‌گيرم؟
|
||
این خطا Ø§ØØªÙ…الاً یا به خاطر تمام شدن ØØ§Ùظه
|
||
مجازی سیستم شماست و یا اینکه کرنل برای
|
||
برنامه ها در مورد میزان Ø§Ø³ØªÙØ§Ø¯Ù‡ از ØØ§Ùظه
|
||
مجازی Ù…ØØ¯ÙˆØ¯ÛŒØª اعمال کرده است. قبل از اجرای
|
||
برنامه اصلی یکی از دستورات زیر را اجرا کنید.
|
||
ulimit -d 262144
|
||
limit datasize 256m
|
||
بسته به نوع شل یکی از این دستورات ممکن است با
|
||
موÙقیت اجرا شود. با اجرای آن دستور Ù…ØØ¯ÙˆØ¯ÛŒØª
|
||
ØØ§Ùظه مجازی برای برنامه ها برداشته شده Ùˆ با
|
||
این کار Ø§ØØªÙ…الاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
|
||
داده است اجرا خواهد شد.
|
||
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 Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید در مثال زیر Ù†ØÙˆÙ‡
|
||
انجام این کار نشان داده شده است:
|
||
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||
|
||
4.22) چرا "زير درخواستهايي" كه از IN Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
مي‌كنند كند هستند؟
|
||
در نسخه های قبل از 7.4 عمل Ø§Ù„ØØ§Ù‚ زیر درخواست Ùˆ
|
||
درخواست اصلی به این صورت انجام می شود که
|
||
نتایج به دست آمده از زیر درخواست به صورت
|
||
ترتیبی برای هر ردی٠اعمال می شود. اگر
|
||
زیردرخواست ردی٠های کمی را به عنوان خروجی
|
||
برگرداند و درخواست بیرونی ردی٠های زیادی را
|
||
شامل شود Ø§Ø³ØªÙØ§Ø¯Ù‡ از IN بهترین روش است در غیر
|
||
اینصورت بهتر است از EXISTS Ø§Ø³ØªÙØ§Ø¯Ù‡ شود
|
||
SELECT *
|
||
FROM tab
|
||
WHERE col IN (SELECT subcol FROM subtab);
|
||
به:
|
||
SELECT *
|
||
FROM tab
|
||
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
|
||
برای اجرای سریع این درخواست باید برای ستون
|
||
subcol نمایه ایجاد شده باشد.
|
||
در نسخه های بعد از 7.4 IN برای Ø§Ù„ØØ§Ù‚ از همان
|
||
تکنیک پیچیده مورد Ø§Ø³ØªÙØ§Ø¯Ù‡ در دستورات معمولی
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ Ù…ÛŒ کند Ùˆ بنابراین Ø§Ø³ØªÙØ§Ø¯Ù‡ از آن نسبت
|
||
به EXISTS ارجØÛŒØª دارد.
|
||
4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join)
|
||
انجام دهم؟
|
||
برای انجام Ø§Ù„ØØ§Ù‚ خارجی به روش زیر عمل کنید:
|
||
SELECT *
|
||
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
||
یا
|
||
SELECT *
|
||
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
||
درخواستهای بالا t1.col , t2.col را به هم Ø§Ù„ØØ§Ù‚ Ù…ÛŒ
|
||
کند Ùˆ همچنین ردیÙهای t1 Ú©Ù‡ نظیر آنها در t2
|
||
نبوده است را نیز برمی گرداند. اگر از RIGHT
|
||
Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه بر عکس است. یعنی ردیÙهای t2
|
||
که نظیر آنها در t1 نباشد را نشان می دهد و اگر
|
||
از FULL Ø§Ø³ØªÙØ§Ø¯Ù‡ شود نتیجه هم شامل ردیÙهای t1
|
||
است Ùˆ هم شامل ردیÙهای t2. Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلمه OUTER
|
||
اختیاری است چرا که این کلمه به طور ضمنی
|
||
دستورهای LEFT, RIGHT, FULL وجود دارد.
|
||
در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم Ø§Ù„ØØ§Ù‚
|
||
خارجی را به کمک دستورهای UNION, NOT IN شبیه سازی
|
||
کنیم. این کار در مثال زیر نشان داده شده است:
|
||
|
||
SELECT tab1.col1, tab2.col2
|
||
FROM tab1, tab2
|
||
WHERE tab1.col1 = tab2.col1
|
||
UNION ALL
|
||
SELECT tab1.col1, NULL
|
||
FROM tab1
|
||
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
||
ORDER BY col1
|
||
4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
|
||
داده توليد كرد؟
|
||
در ØØ§Ù„ ØØ§Ø¶Ø± این کار امکان پذیر نیست. 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 ÙØ¹Ø§Ù„ کنیم.
|
||
Ù…ÛŒ توان پایگاههای داده را روی یک ÙØ§ÛŒÙ„ سیستم
|
||
رمزشده نگاهداری کرد
|
||
|
||
|
||
|
||
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 Ø§Ø³ØªÙØ§Ø¯Ù‡
|
||
کنید این گزینه باعث می شود که وابستگیها به
|
||
طور اتوماتیک تولید شود. |