mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-29 22:49:41 +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 Ø§Ø³ØªÙØ§Ø¯Ù‡ 
 | ||
| کنید این گزینه باعث می شود که وابستگیها به 
 | ||
| طور اتوماتیک تولید شود. |