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