From 1b46bcc0c36138d68abc6334153408762c5618ad Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 27 May 2005 22:10:20 +0000 Subject: Update Farsi FAQ. Mahmoud Taghizadeh --- doc/src/FAQ/FAQ_farsi.html | 2294 ++++++++++++++++++++++---------------------- 1 file changed, 1158 insertions(+), 1136 deletions(-) (limited to 'doc/src') diff --git a/doc/src/FAQ/FAQ_farsi.html b/doc/src/FAQ/FAQ_farsi.html index f9b89147033..b304095b750 100644 --- a/doc/src/FAQ/FAQ_farsi.html +++ b/doc/src/FAQ/FAQ_farsi.html @@ -1,388 +1,394 @@ -PostgreSQL FAQ +PostgreSQL FAQ - - -

سوالاتي كه اغلب در مورد -PostgreSQL‌ -پرسيده مي شوند

-

تاريخ آخرين اصلاح اين فايل: -28 شهریور 1383 هجری شمسی

-

نگهدارنده اصلي فايل (زبان -انگليسي)در حال حاضر : Bruce Momjian + + +

سوالاتي كه اغلب در مورد + +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.1) PostgreSQL +چيست و چگونه بايد آن را تلفظ كرد؟
1.2) -قانون كپي رايت‌ (حقوق معنوي) در مورد PostgreSQL - به چه صورت است؟
قانون كپي رايت‌ (حقوق معنوي) در مورد PostgreSQL + به چه صورت است؟
1.3) -PostgreSQL
‌ روي چه نوع -يونيكسهايي اجرا مي‌شود؟
PostgreSQL
‌ روي چه نوع +يونيكسهايي اجرا مي‌شود؟
1.4) -روي چه محيطهاي غير يونيكسي مي‌توان آن -را اجرا كرد؟
روي چه محيطهاي غير يونيكسي مي‌توان آن +را اجرا كرد؟
1.5) PostgreSQL -را از كجا مي‌توانم بگيرم؟

1.6) -از كجا خدمات پشتيباني بگيرم؟
از كجا خدمات پشتيباني بگيرم؟
1.7) -آخرين نسخه اعلام شده چيست؟

1.8) -چه مستندات و راهنمائيهايي وجود دارند؟
چه مستندات و راهنمائيهايي وجود دارند؟
1.9) -چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين -پايگاه داده وجود ندارد  مطلع شوم؟
چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين +پايگاه داده وجود ندارد  مطلع شوم؟
1.10) -
چگونه مي‌توانم زبان -SQL را ياد بگيرم؟
چگونه مي‌توانم زبان +SQL را ياد بگيرم؟
1.11) -آيا PostgreSQL -مشكل Y2K‌ -دارد يا خير؟
PostgreSQL +مشكل Y2K‌ +دارد يا خير؟
1.12) -چگونه مي‌توانم به تيم برنامه نويس +چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملحق شوم؟

1.13) -چگونه مي‌توانم يك اشكال را به گروه برنامه نويس اعلام كنم؟
چگونه مي‌توانم يك اشكال را به گروه برنامه نويس اعلام كنم؟
1.14) -
 وضعيت -PostgreSQL‌ در -مقايسه با ساير DBMSها به چه -صورت است؟
 وضعيت +PostgreSQL‌ در +مقايسه با ساير DBMSها به چه +صورت است؟
1.15) -من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟
+من چگونه مي‌توانم از نظر مالي به PostgreSQL +كمك كنم؟

-

سوالات مربوط به -استفاده از پايگاه داده

+

سوالات مربوط به +استفاده از پايگاه داده

2.1) -آيا هيچ درايور ODBC‌ -براي PostgreSQL -وجود دارد؟
آيا هيچ درايور ODBC
‌ +براي PostgreSQL +وجود دارد؟
2.2) -چه ابزارهايي براي استفاده از PostgreSQL‌ -با صفحات وب وجود دارد؟
چه ابزارهايي براي استفاده از PostgreSQL‌ +با صفحات وب وجود دارد؟
2.3) -آيا PostgreSQL‌ يك واسط كاربري گرافيكي -دارد؟
آيا PostgreSQL‌ يك واسط كاربري گرافيكي +دارد؟
2.4) -با چه زبانهاي برنامه‌نويسي مي‌توان با PostgreSQL‌ -ارتباط برقرار كرد؟
+با چه زبانهاي برنامه‌نويسي مي‌توان با PostgreSQL‌ +ارتباط برقرار كرد؟

-

سوالات مربوط به -راهبري

+

سوالات مربوط به +راهبري

3.1) -چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي -غير از /usr/local/pgsql/  نصب كنم؟
چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي +غير از /usr/local/pgsql/  نصب كنم؟
3.2) -چرا موقعي كه من برنامه postmaster‌ را -اجرا مي كنم پيام Bad system call‌ و يا core dump -‌مي‌گيرم؟
چرا موقعي كه من برنامه postmaster‌ را +اجرا مي كنم پيام Bad system call‌ و يا core dump +‌مي‌گيرم؟
3.3) -چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي IpcMemoryCreate  مي‌گيرم؟
چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ +را اجرا كنم خطاي IpcMemoryCreate  مي‌گيرم؟
3.4) -چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ -را اجرا كنم خطاي  IpcSemaphoreCreate -مي‌گيرم؟
چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌ +را اجرا كنم خطاي  IpcSemaphoreCreate +مي‌گيرم؟
3.5) -چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟
چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟
3.6) -براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد -انجام دهم؟
براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد +انجام دهم؟
3.7) -چه امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟
چه امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟
3.8) -چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام "Sorry, too many clients" -مي‌گيرم؟
چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام +"Sorry, too many clients" +مي‌گيرم؟
3.9) -در شاخه  pgsql_tmp  چه چيزي قرار دارد؟
 pgsql_tmp  چه چيزي قرار دارد؟
3.10) -چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را -dump‌ و مجدداً restore كنم؟
چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را +dump‌ و مجدداً restore كنم؟
3.11) -از چه سخت افزاري بايد استفاده كنم؟
+از چه سخت افزاري بايد استفاده كنم؟

-

سوالات عملياتي

+

سوالات عملياتي

4.1) -تفاوت بين binary cursors و Normal -cursors چيست؟
4.1) تفاوت بين binary cursors و +Normal cursors چيست؟
4.2) -من چگونه مي‌توانم فقط روي چند رديف اول -يا يك رديف تصادفي درخواست SELECT‌ -بزنم؟
من چگونه مي‌توانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست +SELECT‌ بزنم؟
4.3) -من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در -psql‌ وجود دارد را ببينم؟
من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در +psql‌ وجود دارد را ببينم؟
4.4) -چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه نوع داده آن را عوض -كنيم؟
چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه نوع داده آن را عوض +كنيم؟
4.5) -حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟
حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟
4.6) -چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد -نياز است؟
چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد +نياز است؟
4.7) -چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و -جداولي در سيستم تعريف شده است؟
چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و +جداولي در سيستم تعريف شده است؟
4.8) -چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استفاده -نمي‌كنند؟
چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استفاده +نمي‌كنند؟
4.9) -چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟
چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها +مشاهده كنم؟
4.10) -نمايه R-tree‌ چيست؟
نمايه R-tree‌ چيست؟
4.11) -بهينه ساز تكويني درخواست چيست؟ (Genetic Query Optimizer)
بهينه ساز تكويني درخواست چيست؟ (Genetic Query Optimizer)
4.12) -چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام -دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده -كنم؟
چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام +دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده +كنم؟
4.13) -چگونه مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ -است؟
چگونه مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ +است؟
4.14) -تفاوت بين گونه‌هاي مختلف character چيست؟
تفاوت بين گونه‌هاي مختلف character چيست؟
4.15.1) -چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟
چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟
4.15.2) -چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟
4.15.3) آیا توابع ()nextval -و ()currval منجر به ایجاد شرایط race -برای سایر کاربران می شوند؟
چگونه مي‌توانم مقدار يك درج سريالي را بدانم؟
4.15.3) آیا توابع ()nextval +و ()currval منجر به ایجاد شرایط race +برای سایر کاربران می شوند؟
4.15.4) -چرا اعداد سریالی مربوط به تراکنشهای abort -شده مجدداً استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟
4.16) -OID و TID چه هستند؟
چرا اعداد سریالی مربوط به تراکنشهای abort +شده مجدداً استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟
4.16) OID و TID چه +هستند؟
4.17) -معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟
معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ +استفاده مي‌شود چيست؟
4.18) -چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" -مي‌گيرم؟
"ERROR: Memory exhausted in AllocSetAlloc" +مي‌گيرم؟
4.19) -از كجا تشخيص دهم كه ويرايش يا نسخه PostgreSQLيي -كه من استفاده مي‌كنم چيست؟
4.20) چرا در حین اجرای عملیات روی -large-objectها خطای "invalid large obj descriptor"به -وجود می آید؟
از كجا تشخيص دهم كه ويرايش يا نسخه PostgreSQLيي +كه من استفاده مي‌كنم چيست؟
4.20) چرا در حین اجرای عملیات روی +large-objectها خطای "invalid large obj descriptor"به +وجود می آید؟
4.21) -چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌فرض داشته باشد؟
چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار +پيش‌فرض داشته باشد؟
4.22) -چرا زير درخواستهايي كه از IN استفاده -مي‌كنند كند هستند؟
چرا زير درخواستهايي كه از IN استفاده +مي‌كنند كند هستند؟
4.23) -چگونه مي‌توانم يك الحاق خارجي (outer join) -انجام دهم؟
چگونه مي‌توانم يك الحاق خارجي (outer join) +انجام دهم؟
4.24) -چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟
چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟
4.25) -چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟
چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟
4.26)  -در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟
در توابع PL/PgSQL چرا نمي‌توان با اطمينان +جداول موقت را ايجاد يا حذف كرد؟
4.27) -چه گزينه‌هايي براي تكرار (replication) -وجود دارد؟
چه گزينه‌هايي براي تكرار (replication) +وجود دارد؟
4.28) -چه گزينه‌هايي براي رمزنگاري وجود دارد؟
+چه گزينه‌هايي براي رمزنگاري وجود دارد؟

-

توسعه +

توسعه PostgreSQL

5.1) -من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
من يك تابع نوشته‌ام. چگونه آن را در psql +اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
5.2) -چگونه مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي -PostgreSQL‌ همكاري و مشاركت داشته باشم.
چگونه مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي +PostgreSQL‌ همكاري و مشاركت داشته باشم.
5.3) -چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك tuple  (چند -تايي) باشد؟
چگونه مي‌توانم يك تابع به زبان C بنويسم +كه خروجي آن يك tuple  (چند +تايي) باشد؟
5.4) -من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن -تغيير ديده نمي‌شود؟
+من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن +تغيير ديده نمي‌شود؟


-

سوالات عمومي

+

سوالات عمومي

1.1) -PostgreSQL چيست و چگونه آن را بايد تلفظ كرد؟

-

PostgreSQL به صورت -Post-Gres-Q-L‌ تلفظ مي‌شود. يك فايل صوتي در آدرس +PostgreSQL چيست و چگونه آن را بايد تلفظ كرد؟

+

PostgreSQL به صورت +Post-Gres-Q-L‌ تلفظ مي‌شود. يك فايل صوتي در آدرس -http://www.postfresql.org/postgresql.mp3 براي كساني كه مايلند تلفظ -صحيح را بشنوند وجود دارد.

-

PostgreSQL از روي سيستم مديريت پايگاه -داده POSTGRES توسعه داده شده است (هنوز هم بعضي مواقع -براي سادگي به آن Postgres گفته مي‌شود) كه يك نمونه -تحقيقاتي از پايگاه داده‌هاي نسل بعد است. PostgreSQL -همان الگوي داده قوي و انواع داده  را حفظ كرده است ولي زبان -PostQuel را با يك زيرمجموعه پيشرفته از -SQL جايگزين كرده است. PostgreSQL -متن باز بوده و متن كامل آن در دسترس است.

-

PostgreSQL  توسط -يك تيم برنامه‌نويس كه همگي در گروه پست الكترونيك برنامه‌نويسان -PostgreSQL  عضو هستند، انجام مي‌شود. هماهنگ كننده -اصلي در حال حاضر Marc G. Fournier‌ به آدرس +http://www.postfresql.org/postgresql.mp3‌ براي كساني كه مايلند تلفظ +صحيح را بشنوند وجود دارد.

+

PostgreSQL از روي سيستم مديريت پايگاه +داده POSTGRES توسعه داده شده است (هنوز هم بعضي مواقع +براي سادگي به آن Postgres گفته مي‌شود) كه يك نمونه +تحقيقاتي از پايگاه داده‌هاي نسل بعد است. PostgreSQL +همان الگوي داده قوي و انواع داده  را حفظ كرده است ولي زبان +PostQuel را با يك زيرمجموعه پيشرفته از +SQL جايگزين كرده است. PostgreSQL +متن باز بوده و متن كامل آن در دسترس است.

+

PostgreSQL  توسط يك +تيم برنامه‌نويس كه همگي در گروه پست الكترونيك برنامه‌نويسان +PostgreSQL  عضو هستند، انجام مي‌شود. هماهنگ كننده +اصلي در حال حاضر Marc G. Fournier‌ به آدرس -scrappy@PostgreSQL.org  مي‌باشد. (براي ديدن نحوه ملحق شدن به اين -تيم قسمت   مي‌باشد. (براي ديدن نحوه ملحق شدن به اين +تيم قسمت 1.6 -را ببينيد). اين تيم در حاضر مسئوليت تمام مسائل مربوط به برنامه‌نويسي -PostgreSQL را بر عهده دارد. اين يك پروژه گروهي است و -تحت كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در مورد اين تيم به آدرس +را ببينيد). اين تيم در حاضر مسئوليت تمام مسائل مربوط به برنامه‌نويسي +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 تحت قانون -كپي رايت زير قرار دارد:

+href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html"> +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-2005, 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) روي چه محيطهاي غير يونيكسي مي‌توان آن -را اجرا كرد؟

+

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 -مي‌باشد. PostgreSQL‌ همچنين -امكان ارتباط به صورت ODBC‌  را نيز دارد.

+

مي‌توان psql, +كتابخانه libpq و ساير واسطها و برنامه‌هاي كاربردي را +طوري كامپيل كرد كه روي محيطهاي ويندوز نيز اجرا شوند. در اين حالت +Client روي ويندوز اجرا مي‌شود و از طربق شبكه و پروتكل +TCP/IP با يك سرور كه روي يك پلتفرم لينوكس در حال +اجراست ارتباط برقرار مي‌كند.يك فايل win32.mak همراه با +كدهاي PostgreSQL وجود دارد كه براي كامپيل كردن +كتابخانه libpq و برنامه psql +مي‌باشد. PostgreSQL‌ همچنين +امكان ارتباط به صورت ODBC‌  را نيز دارد.

Server

-

با استفاده از -Cygwin‌ و كتابخانه Cygnus -مي‌توان پايگاه داده را روي ويندوز NT و يا -Win2K اجرا كرد.براي ديدن اطلاعات بيشتر فايل +

با استفاده از +Cygwin‌ و كتابخانه Cygnus +مي‌توان پايگاه داده را روي ويندوز NT و يا +Win2K اجرا كرد.براي ديدن اطلاعات بيشتر فايل pgsql/doc/FAQ_MSWIN -را كه بهمراه توزبع‌هاي PostgreSQL آمده است -ببينيد و يا اينكه به اين صفحه http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN -مراجعه كنيد.

-

در حال حاضر يك عمليات انتقال -PostgreSQL به روي سكوهاي Win NT/2000/XP در -جريان است. براي ديدن وضعيت اين پروژه به سايت‌هاي ‌را كه بهمراه توزبع‌هاي 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 مي‌توانيد اطلاعات -بيشتر را ببينيد.

+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) از كجا خدمات پشتيباني بگيرم؟

-

گروه پستي اصلي +

PostgreSQL‌ را از +سايت اصلي آن  ftp://ftp.PostgreSQL.org/pub مي‌توانيد +بگيريد. در صفحه اصلي سايت ليست ساير آدرسهايي كه مي‌توانيد +PostgreSQL‌ را از آنها بگيريد آمده است.

+

1.6) +از كجا خدمات پشتيباني بگيرم؟

+

گروه پستي اصلي pgsql-general@PostgreSQL.org -مي‌باشد. اين گروه براي بحث در مورد موضوعات مختلف در زمينه -PostgreSQL است. براي عضو شدن در اين گروه پستي يك نامه الكترونيكي -به آدرس گروه با -محتوياتی كه در ادامه آمده است ارسال كنيد. در قسمت -Subject چيزي ننويسيد.

+مي‌باشد. اين گروه براي بحث در مورد موضوعات مختلف در زمينه +PostgreSQL است. براي عضو شدن در اين گروه پستي يك نامه الكترونيكي به آدرس +گروه با محتوياتی كه در ادامه آمده است ارسال كنيد. در قسمت +Subject چيزي ننويسيد.

    subscribe
     end
 
-

آدرس گروه: pgsql-general-request@PostgreSQL.org

-

همچنين يك گروه پستي هم به صورت ارسال چكيده -پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به -این آدرس  -ارسال كنيد. pgsql-general-digest-request@PostgreSQL.org +

آدرس گروه: +pgsql-general-request@PostgreSQL.org

+

همچنين يك گروه پستي هم به صورت ارسال چكيده +پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به این آدرس  +ارسال كنيد. +pgsql-general-digest-request@PostgreSQL.org

    subscribe
     end
 
-

در اين گروه هر موقع حجم نامه‌ها به 30 كيلوبايت -رسيد براي تمام اعضاء ارسال مي‌شود.

-

گروه پستي بررسي اِشكالات هم وجود دارد. براي عضو -شدن در اين گروه يك نامه با محتويات زير به +

در اين گروه هر موقع حجم نامه‌ها به 30 كيلوبايت +رسيد براي تمام اعضاء ارسال مي‌شود.

+

گروه پستي بررسي اِشكالات هم وجود دارد. براي عضو +شدن در اين گروه يك نامه با محتويات زير به pgsql-bugs-request@PostgreSQL.org -ارسال كنيد.

+href="mailto:pgsql-bugs-request@PostgreSQL.org"> +pgsql-bugs-request@PostgreSQL.org +ارسال كنيد.

    subscribe
     end
 
-

گروه پستي مخصوص توسعه دهندگان -(برنامه‌نويسان) نيز وجوددارد. براي عضويت در اين گروه يك نامه به آدرس زير با -محتويات مشخص شده ارسال كنيد.  +

گروه پستي مخصوص توسعه دهندگان (برنامه‌نويسان) +نيز وجوددارد. براي عضويت در اين گروه يك نامه به آدرس زير با محتويات مشخص شده +ارسال كنيد.  pgsql-hackers-request@PostgreSQL.org  

@@ -391,280 +397,293 @@ href="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers- 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 -موجود است.

+

گروههاي پستي ديگري نيز در زمينه +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 وجود دارد. براي ديدن صفحات راهنما مي‌توانيد به -سايت +

آخرين نسخه PostgreSQL + كه وجود دارد 7.4.3 است.

+

هدف ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد +ارائه شود.

+

1.8) +چه مستندات و راهنمائيهايي وجود دارند؟

+

چندين كتابچه و صفحات راهنما و مثالهاي كوچك +همراه با متن اصلي PostgreSQL‌ در شاخه +doc وجود دارد. براي ديدن صفحات راهنما مي‌توانيد به +سايت http://www.PostgreSQL.org/docs - نيز مراجعه نماييد.

-

دو كتاب در زمينه PostgreSQL - در آدرس‌هاي  نيز مراجعه نماييد.

+

دو كتاب در زمينه PostgreSQL + در آدرس‌هاي http://www.PostgreSQL.org/docs/awbook.htmhttp://www.commandprompt.com/ppbook -وجود دارد. ليستي از كتابهايي كه قابل خريد است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php -وجود دارد. همچنين ليستي از مقالات فني در مورد -PostgreSQL در آدرس +http://techdocs.PostgreSQL.org/techdocs/bookreviews.php +وجود دارد. همچنين ليستي از مقالات فني در مورد +PostgreSQL در آدرس http://techdocs.PostgreSQL.org -وجود دارد.

-

برنامه psql يك دستور -d\ دارد كه اطلاعاتي در مورد انواع داده‌هاي قابل تعريف -و عملگر‌ها و توابع و ... به ما نشان مي‌دهد. در سايت اصلي ما اطلاعات بيشتري را -مي‌توانيد پيدا كنيد.

+وجود دارد.

+

برنامه psql يك دستور +d\ دارد كه اطلاعاتي در مورد انواع داده‌هاي قابل تعريف +و عملگر‌ها و توابع و ... به ما نشان مي‌دهد. در سايت اصلي ما اطلاعات بيشتري را +مي‌توانيد پيدا كنيد.

1.9) -چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين -پايگاه داده وجود ندارد  مطلع شوم؟

-

PostgreSQL يك زير -مجموعه پيشرفته از SQL-92 را پشتيباني مي‌كند. در ليست +چگونه مي‌توانم ازاشكالات شناخته شده و يا امكاناتي كه در اين +پايگاه داده وجود ندارد  مطلع شوم؟ +

PostgreSQL يك زير +مجموعه پيشرفته از SQL-92 را پشتيباني مي‌كند. در ليست  TODO   اِشكالات -شناخته شده يا امكاناتي كه وجود ندارد و يا برنامه‌‌هاي آينده آمده است.

-

1.10) چگونه مي‌توانم زبان -SQL را ياد بگيرم؟

-

كتاب PostgreSQL در -آدرس SQL http://www.PostgreSQL.org/docs/awbook.html -‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس 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.shtmhttp://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 -مي‌باشد.

+وجود دارد. يك راهنماي خيلي خوب هم در سايت‌هاي  +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 +مشكل Y2K‌ +دارد يا خير؟

+

خير،‌PostgreSQL‌ با +تاريخ‌هاي قبل و بعد از 2000 مشكلي ندارد.

+

1.12) +چگونه مي‌توانم به تيم برنامه نويس PostgreSQL -ملحق شوم؟

-

ابتدا،‌آخرين سورس را دونلود كرده و مستندات -مربوط به برنامه‌نويسي PostgreSQL را در سايت مطالعه -كنيد. سپس به گروههاي پستي ‌ pgsql-patches pgsql-hackers - عضو شويد. در مرحله آخر وصله‌هاي با كيفيت بالا را به -pgsql-patches ارسال كنيد.

-

تعداد زيادي از برنامه‌نويسان وجود دارند كه -امتياز انجام تغييرات در cvs‌ را دارند. هر كدام از آنها -تعداد زيادي وصله‌‌ با كيفيت بالا به گروه ارسال كرده‌اند كه اعتماد گردانندگان -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 بازديد -كنيد.

+چگونه مي‌توانم يك اِشكال را به گروه برنامه نويس اعلام كنم؟ +

لطفاً صفحه مربوط به اِشكالات +PostgreSQL را در سايت +http://www.PostgreSQL.org/bugs/bugs.php +مشاهده‌ كنيد. در اين سايت نحوه گزارش و ارسال يك +اشكال توضيح داده شده است.

+

 همچنين براي ديدن +نسخه‌هاي جديدتر PostgreSQL و يا وجود يك وصله جديد از +سايت ftp://ftp.PostgreSQL.org/pub بازديد +كنيد.

1.14) -وضعيت -PostgreSQL‌ در -مقايسه با ساير DBMSها به چه -صورت است؟

-

راههاي مختلفي براي اندازه‌گيري و مقايسه -نرم‌افزارها وجود دارد كه عبارتند از امكانات، كارايي، قابليت اعتماد، پشتيباني و -قيمت

+وضعيت +PostgreSQL‌ در +مقايسه با ساير DBMSها به چه +صورت است؟ +

راههاي مختلفي براي اندازه‌گيري و مقايسه +نرم‌افزارها وجود دارد كه عبارتند از امكانات، كارايي، قابليت اعتماد، پشتيباني و +قيمت

-
امكانات
-
PostgreSQL بيشتر امكانات - موجود در سيستم‌هاي پايگاه داده تجاري بزرگ نظير +
امكانات
+
PostgreSQL بيشتر امكانات + موجود در سيستم‌هاي پايگاه داده تجاري بزرگ نظير transactions, subselets, triggers, views, foreign key referential integrity - و sophisticated locking‌ را دارد. در - PostgreSQL‌‌ امكاناتي وجود دارد كه پايگاههاي داده - ديگر آن را ندارند نظير user-defined types‌و - Inheritance‌و rules‌و + و 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 در حد بقيه سيستم‌هاي تجاري و + متن باز است. در بعضي موارد سريعتر و در بعضي موارد از آنها كندتر است. در + مقايسه با MySQL براي كاربران بيشتر و درخواست‌هاي + پيچيده و بار زياد خواندن/نوشتن سريعتر است. در درخواست‌هاي ساده + SELECT‌ از MySQL كندتر است. البته + MySQL خيلي از امكانات + PostgreSQL كه در بالا به آن اشاره شد را ندارد. هدف اصلي ما امكانات و + قابليت اعتماد بالاست در ضمن آنكه تلاش مي‌كنيم تا كارايي آن نيز بهبود يابد. + در آدرس + http://openacs.org/philosophy/why-not-mysql.html + يك مقايسه جالب بين MySQL و + PostgreSQL وجود دارد. از طرف ديگر MySQL‌ يك + شركت است كه محصول خود را به صورت متن باز ارائه مي‌كند ولي براي نرم‌افزار غير + متن باز خود احتياج به ليسانس تجاري دارد بر خلاف + PostgreSQL كه يك گروه كاملاً متن باز هستند.

 

-
قابليت اطمينان
-
ما فكر مي‌كنيم كه يك سيستم پايگاه داده‌اي كه مطمئن - نباشد ارزشي ندارد. ما تمام تلاشمان را براي ارائه كدهاي پايداري كه به خوبي - تست شده باشند و كمترين اِشكالات را داشته باشند مي‌كنيم. هر نسخه جديدي كه - ارائه مي‌شود حداقل يك ماه را در مرحله تست بتا مي‌گذراند. ما بر اين باور - هستيم كه قابليت اطمينان PostgreSQL‌ در مقايسه با - ساير سيستم‌هاي پايگاه داده قابل توجه است و نسخه‌هايي كه تاكنون ارائه شده است - نشان مي‌دهد كه ما توانايي ارائه يك سيستم قوي و محكم و مطمئن را كه آماده - بهره‌برداري است داريم.
+
قابليت اطمينان
+
ما فكر مي‌كنيم كه يك سيستم پايگاه داده‌اي كه مطمئن + نباشد ارزشي ندارد. ما تمام تلاشمان را براي ارائه كدهاي پايداري كه به خوبي + تست شده باشند و كمترين اِشكالات را داشته باشند مي‌كنيم. هر نسخه جديدي كه + ارائه مي‌شود حداقل يك ماه را در مرحله تست بتا مي‌گذراند. ما بر اين باور + هستيم كه قابليت اطمينان PostgreSQL‌ در مقايسه با + ساير سيستم‌هاي پايگاه داده قابل توجه است و نسخه‌هايي كه تاكنون ارائه شده است + نشان مي‌دهد كه ما توانايي ارائه يك سيستم قوي و محكم و مطمئن را كه آماده + بهره‌برداري است داريم.
-
پشتيباني
-
گروههاي پستي ما امكان ارتباط و تماس به گروه بزرگي از - برنامه نويسان و كاربران را مي‌دهد كه مي‌توانند در حل مشكلات به ديگران كمك - كنند. دسترسي مستقيم به برنامه‌نويسان و گروههاي كاربران و راهنماها و كداصلي - باعث مي‌شود كه پشتيباني PostgreSQL نسبت به ساير - پايگاههاي داده به نحو بهتري انجام شود. همچنين امكان ارائه خدمات پشتيباني به - صورت تجاري نيز وجود دارد. براي ديدن اطلاعات بيشتر به FAQ - section 1.6  مراجعه كنيد.
+
پشتيباني
+
گروههاي پستي ما امكان ارتباط و تماس به گروه بزرگي از + برنامه نويسان و كاربران را مي‌دهد كه مي‌توانند در حل مشكلات به ديگران كمك + كنند. دسترسي مستقيم به برنامه‌نويسان و گروههاي كاربران و راهنماها و كداصلي + باعث مي‌شود كه پشتيباني PostgreSQL نسبت به ساير + پايگاههاي داده به نحو بهتري انجام شود. همچنين امكان ارائه خدمات پشتيباني به + صورت تجاري نيز وجود دارد. براي ديدن اطلاعات بيشتر به FAQ section 1.6  مراجعه كنيد.
-
قيمت
-
هم براي استفاده تجاري و هم غير تجاري هيچ هزينه‌اي - نبايد پرداخت شود. هيچ محدوديتي براي انجام تغييرات در - PostgreSQL توسط استفاده كنندگان وجود ندارد به جز مواردي كه در ليسانس - BSD به آن اشاره شده است.
+
قيمت
+
هم براي استفاده تجاري و هم غير تجاري هيچ هزينه‌اي + نبايد پرداخت شود. هيچ محدوديتي براي انجام تغييرات در + PostgreSQL توسط استفاده كنندگان وجود ندارد به جز مواردي كه در ليسانس + BSD به آن اشاره شده است.

1.15) -من چگونه مي‌توانم از نظر مالي به PostgreSQL -كمك كنم؟

-

PostgreSQL  داراي -يك ساختار تشكيلاتي درجه اول است كه آن را مديون Marc Fournier‌ -است كه اين ساختار را ايجاد كرده است.

-

كيفيت يك ساختار براي يك پروژه متن باز بسيار -اهميت دارد. يك ساختار خوب مي‌تواند مانع از حوادثي شود كه در حركت روبه‌جلوي پروژه -خللي وارد مي‌كنند.

-

البته اين ساختار تشكيلاتي ارزان نيست. هزينه‌هاي -ثابت ماهانه و روزمره براي نگهداري و حفظ اين ساختار مورد نياز است. اگر شما يا -شركت شما مايل است كه از نظر مالي به اين حركت كمك كند لطفاً به سايت من چگونه مي‌توانم از نظر مالي به PostgreSQL +كمك كنم؟ +

PostgreSQL  داراي يك +ساختار تشكيلاتي درجه اول است كه آن را مديون Marc Fournier‌ +است كه اين ساختار را ايجاد كرده است.

+

كيفيت يك ساختار براي يك پروژه متن باز بسيار +اهميت دارد. يك ساختار خوب مي‌تواند مانع از حوادثي شود كه در حركت روبه‌جلوي پروژه +خللي وارد مي‌كنند.

+

البته اين ساختار تشكيلاتي ارزان نيست. هزينه‌هاي +ثابت ماهانه و روزمره براي نگهداري و حفظ اين ساختار مورد نياز است. اگر شما يا +شركت شما مايل است كه از نظر مالي به اين حركت كمك كند لطفاً به سايت http://store.pgsql.com/shopping -مراجعه كرده و كمك خود را اهدا كنيد.

-

هر چند در صفحه اصلي عبارت -PostgreSQL,Inc‌ ذكر شده است ولي مشاركت عمدتاً براي پشتيباني از پروژه -PostgreSQL‌ مي باشد و نه براي يك شركت مشخص. اگر ترجيح -مي‌دهيد مي‌توانيد يك چك به آدرس مشخص شده ارسال كنيد.

-

اگر يك استفاده موفق از -PostgreSQL سراغ داريد لطفاً آن را به سايت http://advocacy.postgresql.org گزارش -دهيد.

+مراجعه كرده و كمك خود را اهدا كنيد.

+

هر چند در صفحه اصلي عبارت +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 نيز متصل شويد.

-

اين محصول به كساني كه احتياج به خدمات پشتيباني -تجاري دارند فروخته مي‌شود. ولي نسخه آزاد اين نرم‌افزار هميشه در درسترس مي‌باشد. -براي كسب اطلاعات بيشتر سوالات خود را به آدرس آيا هيچ درايور 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 -وجود دارد.

+چه ابزارهايي براي استفاده از PostgreSQL‌ +با صفحات وب وجود دارد؟ +

در سايت http://www.webreview.com براي استفاده از +PostgreSQL‌ در صفحات وب راهنماييهاي خوبي وجود دارد.

+

براي تركيب و استفاده در صفحات وب زبان +PHP‌ يك واسط بسيار مناسب است. اطلاعات بيشتر راجع به +PHP‌در سايت http://www.php.net وجود +دارد.

+

مثالهايي نيز با استفاده از +Perl‌ و CGI.pm و mod_perl +وجود دارد.

2.3) -آيا PostgreSQL‌ يك واسط كاربري گرافيكي -دارد؟

-

چند نرم افزار گرافيكي براي -PostgreSQL‌ وجود دارد كه شامل pgAccess درسايت آيا PostgreSQL‌ يك واسط كاربري گرافيكي +دارد؟ +

چند نرم افزار گرافيكي براي +PostgreSQL‌ وجود دارد كه شامل pgAccess درسايت http://www.pgaccess.org -و pgAdmin III در سايت و pgAdmin III در سايت http://www.pgadmin.org -و RHDB Admin در سايت و 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 -مراجعه كنيد.

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 تعدادي از واسطهاي مورد نياز براي ارتباط -با پايگاه داده از طريق زبانهاي مختلف آمده است كه در زير ليست آنها را مشاهده -مي‌كنيد.

+با چه زبانهاي برنامه‌نويسي مي‌توان با PostgreSQL‌ +ارتباط برقرار كرد؟ +

بيشتر زبانهاي برنامه‌نويسي +مي‌توانند با PostgreSQL‌ ارتباط برقرار كنند. به همراه  +سورس PostgreSQL تعدادي از واسطهاي مورد نياز براي ارتباط +با پايگاه داده از طريق زبانهاي مختلف آمده است كه در زير ليست آنها را مشاهده +مي‌كنيد.

  • C (libpq)

  • @@ -679,233 +698,235 @@ href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql
  • TCL (libpgtcl)

-

واسطهاي ديگر در -سايت واسطهاي ديگر در +سايت http://gborg.postgresql.org -در قسمت Drivers/Interfaces وجود -دارد.

+در قسمت Drivers/Interfaces وجود +دارد.


-

سوالات مديريتي

+

سوالات مديريتي

3.1) -چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي -غير از /usr/local/pgsql/  نصب كنم؟

-

موقع اجراي دستور -configure از گزينه prefix-- استفاده كنيد.

+چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي +غير از /usr/local/pgsql/  نصب كنم؟ +

موقع اجراي دستور +configure از گزينه prefix-- استفاده كنيد.

3.2) -چرا موقعي كه من برنامه postmaster‌ را -اجرا مي كنم پيام Bad system call‌ و يا core dump -‌مي‌گيرم؟

-

به دلايل مختلف ممكن است اين اتفاق بيفتد. اما در -قدم اول شما مطمئن شويد كه كه امكانات اضافه System V‌ -در كرنل شما نصب شده باشد. PostgreSQL براي اجرا شدن -نياز به استفاده از امكانات حافظه مشترك و سمافورها دارد.

+چرا موقعي كه من برنامه 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 را مطالعه كنيد.

+چرا موقعي كه من سعي مي‌كنم برنامه 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‌ ايجاد كرد.

+چگونه مي‌توانم اتصالات ساير ماشينها را كنترل كنم؟ +

به صورت پيش فرض فقط از ماشيني كه +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 -اطلاعات بيشتري در اين زمينه به شما مي‌دهد.

+براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد +انجام دهم؟ +

به طور حتم استفاده از انديس‌ها باعث بالا رفتن +سرعت پاسخ‌گويي به درخواست‌ها خواهد شد. دستور 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 ارسال كنيد.

+چه امكاناتي براي پيدا كردن اشكال‌ وجود دارد؟ +

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 ثانيه تاخير اجرا شود و در اين فاصله شما مي‌توانيد -برنامه اشكال‌ياب را به آن متصل كرده و با قرار دادن يك نقطه توقف  روند اجراي -آن را مونيتور كنيد.

+در بالاترين شاخه 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. ريخته مي‌شود.

+گزينه‌هاي 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 بيش از منابع موجود سيستم -نباشد.

+چرا موقعي كه من مي‌خواهم به پايگاه داده وصل شوم پيام +"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 اين فايلها پاك مي‌شوند.

+در شاخه  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 براي اين -توزيع وجود دارد يا خير.

+چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را +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 روي بيشتر سخت افزارها اجرا مي‌شود اما اگر كارايي و اطمينان -فاكتورهاي مهمي هستند بايد سخت افزار مناسب استفاده شود. در گروههاي پستي در مورد -سخت افزار مناسب  و انتخاب آن بحث شده است.

+

چون اكثر سخت‌افزارهاي PC + سازگار هستند مردم فكر مي‌كنند كه كيفيت آنها نيز يكسان است. در حاليكه +اينطور نيست. استفاده از هاردهاي SCSI و حافظه‌هاي +ECC و مادربردهاي با كيفيت بالا نسبت به سخت افزارهاي ارزانتر نتايج بهتري +از نظر كارايي و پايداري سيستم بهمراه خواهد داشت. +PostgreSQL روي بيشتر سخت افزارها اجرا مي‌شود اما اگر كارايي و اطمينان +فاكتورهاي مهمي هستند بايد سخت افزار مناسب استفاده شود. در گروههاي پستي در مورد +سخت افزار مناسب  و انتخاب آن بحث شده است.


-

سوالات عملياتي

-

4.1) تفاوت بين -binary cursors و Normal cursors -چيست؟

-

راهنماي دستور DECLARE‌ -را مطالعه كنيد.

+

سوالات عملياتي

+

4.1) تفاوت بين +binary cursors و Normal cursors +چيست؟

+

راهنماي دستور DECLARE‌ +را مطالعه كنيد.

4.2) -من چگونه مي‌توانم فقط روي چند رديف اول -يا يك رديف تصادفي درخواست SELECT‌ -بزنم؟

-

راهنماي دستور FETCH - يا SELECT...LIMIT را ببينيد.

-

در واقع كل درخواست بايد بررسي و -ارزيابي شود حتي اگر شما فقط چند رديف اول را بخواهيد. براي مثال درخواست -ORDER BY را در نظر بگيريد. اگر انديس يا نمايه‌اي براي ORDER -BY وجود داشته باشد،‌postgreSQL‌ ممكن است -بتواند فقط چند سطر اول درخواستي را ارزيابي كند و يا اينكه كل درخواست پردازش شود -تا تعداد رديف‌هاي درخواستي توليد شود.

-

براي انتخاب يك سطر تصادفي به -روش زير عمل مي‌كنيم:

+من چگونه مي‌توانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست +SELECT‌ بزنم؟ +

راهنماي دستور FETCH + يا SELECT...LIMIT را ببينيد.

+

در واقع كل درخواست بايد بررسي و +ارزيابي شود حتي اگر شما فقط چند رديف اول را بخواهيد. براي مثال درخواست +ORDER BY را در نظر بگيريد. اگر انديس يا نمايه‌اي براي +ORDER BY وجود داشته باشد،‌postgreSQL‌ +ممكن است بتواند فقط چند سطر اول درخواستي را ارزيابي كند و يا اينكه كل درخواست +پردازش شود تا تعداد رديف‌هاي درخواستي توليد شود.

+

براي انتخاب يك سطر تصادفي به +روش زير عمل مي‌كنيم:

    SELECT col
     FROM tab
     ORDER BY random()
@@ -913,30 +934,30 @@ BY وجود داشت
 

4.3) -من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در -psql‌ وجود دارد را ببينم؟

-

براي ديدن ليست جداول دستور  -dt\ را در برنامه psql -استفاده كنيد. براي ديدن ليست كامل فرمانها ?\ را اجرا -كنيد. راه ديگر خواندن متن برنامه psql‌ است كه در شاخه - pgsql/src/bin/psql/describe.c قرار -دارد. اين فايل حاوي فرامين SQLيي است كه خروجي را -براي  دستوراتي كه با \‌در psql -شروع مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با گزينه -E-‌است. اينكار باعث مي‌شود كه psql -قبل از اجرا هر دستور SQL‌متناظر آن را نشان دهد. -PostgreSQL‌همچنين يك برنامه SQLi دارد كه -مي‌توان با استفاده از آن  اطلاعات داخلي پايگاه داده را استخراج كرد.

+من چگونه مي‌توانم ليستي از جداول يا ساير چيزهايي كه در +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 -اضافه شده است. در نسخه‌هاي قبلي به روش زير عمل كنيد:

+چگونه يك ستون جدول را حذف مي‌كنيد؟ چگونه نوع داده آن را عوض +كنيم؟ +

حذف يك ستون در توزيع 7.3 +با استفاده از دستور ALTER TABLE DROP COLUMN +اضافه شده است. در نسخه‌هاي قبلي به روش زير عمل كنيد:

    BEGIN;
     LOCK TABLE old_table;
-    SELECT ...  -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را حذف كنيد را در اينجا بياوريد
+    SELECT ...  -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را حذف كنيد را در اينجا بياوريد
     INTO TABLE new_table
     FROM old_table;
     DROP TABLE old_table;
@@ -944,8 +965,8 @@ PostgreSQL‌همچنين 
     COMMIT;
 
-

براي عوض كردن نوع داده يك ستون -به روش زير عمل كنيد:

+

براي عوض كردن نوع داده يك ستون +به روش زير عمل كنيد:

    BEGIN;
     ALTER TABLE tab ADD COLUMN new_col new_data_type;
@@ -955,105 +976,102 @@ PostgreSQL‌همچنين 
 

4.5) -حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟

-

محدوديتها عبارتند از:

+حداكثر اندازه يك رديف،‌ جدول و خود پايگاه داده چقدر است؟ +

محدوديتها عبارتند از:

-
    حداكثر اندازه پايگاه داده             نامحدود (تا 32 ترابايت وجود دارد)
-    حداكثر اندازه يك جدول               32 ترابايت
-    حداكثر ا ندازه يك رديف              1.6 ترابايت
-    حداكثر اندازه يك فيلد                1 گيگا بايت
-    حداكثر اندازه رديفهاي يك جدول  نا محدود
-    حداكثر ستونهاي يك جدول 	بسته به نوع جدول بين 250 تا 6000 
-    حداكثر انديسهاي يك جدول	نا محدود
+	
    حداكثر اندازه پايگاه داده             نامحدود (تا 32 ترابايت وجود دارد)
+    حداكثر اندازه يك جدول               32 ترابايت
+    حداكثر ا ندازه يك رديف              1.6 ترابايت
+    حداكثر اندازه يك فيلد                1 گيگا بايت
+    حداكثر اندازه رديفهاي يك جدول  نا محدود
+    حداكثر ستونهاي يك جدول 	بسته به نوع جدول بين 250 تا 6000 
+    حداكثر انديسهاي يك جدول	نا محدود
 
-

البته در حالت نامحدود نيز ما -محدود به حجم هاردديسك و فضاي حافظه خواهيم بود. در صورتي -که مقادير مشخص شده به عنوان -نامحدود به صورت غير معمولي بزرك شوند كارايي سيستم كاهش خواهد يافت.

-

براي ذخيره كردن جداول با اندازه -خيلي بزرگ نيازي نيست كه سيستم عامل امكان ايجاد فايلهاي بزرگ را داشته باشد. بلكه -جداول خيلي بزرگ به صورت فايلهايي به حجم يك گيگا بايت نگاهداري مي‌شوند.

-

اگر اندازه بلوكهاي داده را -برابر 32 كيلو بايت قرار دهيم حداكثر اندازه جدول و حداكثر تعداد ستونها 4 برابر -خواهد شد.

+

البته در حالت نامحدود نيز ما +محدود به حجم هاردديسك و فضاي حافظه خواهيم بود. در صورتي که مقادير مشخص شده به +عنوان نامحدود به صورت غير معمولي بزرك شوند كارايي سيستم كاهش خواهد يافت.

+

براي ذخيره كردن جداول با اندازه +خيلي بزرگ نيازي نيست كه سيستم عامل امكان ايجاد فايلهاي بزرگ را داشته باشد. بلكه +جداول خيلي بزرگ به صورت فايلهايي به حجم يك گيگا بايت نگاهداري مي‌شوند.

+

اگر اندازه بلوكهاي داده را +برابر 32 كيلو بايت قرار دهيم حداكثر اندازه جدول و حداكثر تعداد ستونها 4 برابر +خواهد شد.

4.6) -چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد -نياز است؟

-

يك پايگاه داده -PostgreSQL‌ تا 5 برابر فضايي روي هاردديسك براي نگاهداري يك فايل -متني نياز دارد.

-

به عنوان مثال يك فايل با 100000 -خط را در نظر بگيريد كه در هر خط يك عدد صحيح و يك توضيح متني آمده است. فرض كنيد -كه رشته متني به طور متوسط 20 بايت باشد. اندازه فايل برابر 2.8 مگا بايت خواهد بود -ولي PostgreSQL براي نگاهداري اين فايل به 6.4 مگا بايت -اطلاعات نياز خواهد داشت.

+چقدر فضاي ديسك سخت براي ذخيره كردن داده‌‌هاي يك فايل متني مورد +نياز است؟
+

يك پايگاه داده +PostgreSQL‌ تا 5 برابر فضايي روي هاردديسك براي نگاهداري يك فايل +متني نياز دارد.

+

به عنوان مثال يك فايل با 100000 +خط را در نظر بگيريد كه در هر خط يك عدد صحيح و يك توضيح متني آمده است. فرض كنيد +كه رشته متني به طور متوسط 20 بايت باشد. اندازه فايل برابر 2.8 مگا بايت خواهد بود +ولي PostgreSQL براي نگاهداري اين فايل به 6.4 مگا بايت +اطلاعات نياز خواهد داشت.

-
    32 bytes: اندازه سرايند هر خط به طور تقريبي
-    24 bytes: يك عدد صحيح و يك رشته 24 بايتي
-   + 4 bytes: اشاره گر روي صفحه به يك چندتايي
+	
    32 bytes: اندازه سرايند هر خط به طور تقريبي
+    24 bytes: يك عدد صحيح و يك رشته 24 بايتي
+   + 4 bytes: اشاره گر روي صفحه به يك چندتايي
    ----------------------------------------
-    60 bytes در هر رديف
+    60 bytes در هر رديف
 
-اندازه صفحات داده در PostgreSQL برابر با 8 كيلو بايت است
-   8192 تعداد بايت‌ها در هر صفحه
-   -------------------   =  136 تعداد رديف‌ها در يك صفحه پايگاه داده
-     60  تعداد بايت‌هاي هر رديف
+اندازه صفحات داده در PostgreSQL برابر با 8 كيلو بايت است
+   8192 تعداد بايت‌ها در هر صفحه
+   -------------------   =  136 تعداد رديف‌ها در يك صفحه پايگاه داده
+     60  تعداد بايت‌هاي هر رديف
 
-   100000  تعداد رديفها
-   --------------------  = تعدادصفحات پايگاه داده
-      128 تعداد رديفها در هر صفحه
+   100000  تعداد رديفها
+   --------------------  = تعدادصفحات پايگاه داده
+      128 تعداد رديفها در هر صفحه
 
-735 تعداد صفحات * 8192 تعداد بايت‌هاي هر صفحه  =  6,021,120 مگا بايت
+735 تعداد صفحات * 8192 تعداد بايت‌هاي هر صفحه  =  6,021,120 مگا بايت
 
-

سربار انديسها يا نمايه‌ها از -اين مقدار كمتر است ولي چون شامل خود داده‌ها هم هست -ممکن است اندازه آنها هم بزرگ شود.

-

NULLها به صورت bitmap -ذخيره مي‌شوند و از اينرو فضاي بسيار كمي را اشغال مي‌كنند.

+

سربار انديسها يا نمايه‌ها از +اين مقدار كمتر است ولي چون شامل خود داده‌ها هم هست +ممکن است اندازه آنها هم بزرگ شود.

+

NULLها به صورت bitmap +ذخيره مي‌شوند و از اينرو فضاي بسيار كمي را اشغال مي‌كنند.

4.7) -چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و -جداولي در سيستم تعريف شده است؟

+چگونه مي‌توانم بفهمم كه چه كاربران،‌ پايگاه داده،‌ نمايه و +جداولي در سيستم تعريف شده است؟

psql -تعداد زيادي دستور دارد كه با \ شروع -مي‌شوند و اين اطلاعات را در اختيار ما قرار مي‌دهند. براي ديدن آنها دستور -?\  را اجرا كنيد.  همچنين جداول سيستمي كه نام آنها -با -pg_ ‌شروع مي‌شود نيز اين اطلاعات -را در خود دارند. اجراي برنامه psql با گزينه l- - نيز باعث نشان دادن ليست تمام پايگاههاي داده مي‌شود.

-

همچنين فايل pgsql/src/tutorial/syscat.source -نيز فرمانهاي SELECT كه با -استفاده از آن مي‌توان اطلاعات پايگاه داده را استخراج كرد شرح داده است.

+تعداد زيادي دستور دارد كه با \ شروع +مي‌شوند و اين اطلاعات را در اختيار ما قرار مي‌دهند. براي ديدن آنها دستور +?\  را اجرا كنيد.  همچنين جداول سيستمي كه با نام آنها +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‌ ، آنها را به دست آوريم.

+چرا درخواستهاي من كند اجرا مي‌شوند يا چرا از نمايه ها استفاده +نمي‌كنند؟ +

به طور معمول +براي درخواستها از نمايه‌ها استفاده نمي‌شود. +تنها در صورتي از نمايه‌ها استفاده مي‌شود كه اندازه جدول از يك اندازه حداقل +بزرگتر باشد و درخواست هم فقط قسمتي از رديف‌هاي جدول را انتخاب كرده باشد. دليل +اين كار آن است كه دسترسي‌هاي تصادفي به هاردديسك كه به خاطر نمايه‌ها ايجاد مي‌شود +ممكن است از خواندن مستقيم جدول يا خواندن ترتيبي ركوردها كندتر باشد.

+

براي تعيين اينكه از نمايه +استفاده شود يا خير، PostgreSQL بايد اطلاعات آماري را در +مورد يك جدول بداند. اين اطلاعات توسط دستور ANALYZE و +VACUUM ANALYZE به دست مي‌آيد. با استفاده از اين اطلاعات،‌ +بهينه ساز از تعداد رديف‌هاي يك جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند تعيين كند +كه آيا از نمايه استفاده شود يا خير. اطلاعات آماري همچنين براي تعيين ترتيب الحاق +و روشهاي الحاق به صورت بهينه نيز كاربر دارد. جمع آوري اطلاعات آماري بايد به صورت +دوره‌اي همزمان با تغيير داده‌هاي جدول انجام شود.

+

نمايه‌ها به طور معمول همراه با +دستور ORDER BY به كار برده نمي‌شوند. براي يك جدول بزرگ يك +پيمايش ترتيبي همراه با دستور مرتب سازي از به كار بردن نمايه‌ها سريعتر خواهد بود.

+

اما اگر همراه با ORDER +BY‌ از LIMIT استفاده شود اغلب از نمايه‌ها +استفاده مي‌شود چون فقط قسمتي از جدول استفاده مي‌شود. در حقيقت هر چند +توابع ()MIN‌ و ()MAX +از نمايه‌ها استفاده نمي‌كنند ولي مي‌توانيم با استفاده از دستور +زير با استفاده از نمايه‌ها و دستور ORDER BY و +LIMIT‌ آنها را به دست آوريم.

    SELECT col
     FROM tab
@@ -1061,355 +1079,356 @@ LIMIT‌ ، آنها را
     LIMIT 1;
 
-

اگر شما فكر مي‌كنيد كه بهينه -ساز سيستم در انتخاب پيمايش ترتيبي اشتباه كرده است با دستور 'SET enable_seqscan TO 'off'  -مي‌توانيد ببينيد آيا استفاده از نمايه‌ها باعث افزايش سرعت درخواست‌ها خواهد شد -يا خير.

-

استفاده از نمايه‌ها هنگامي كه -از علائم ويژه نظير LIKE و ~ -استفاده مي‌كنيد فقط در بعضي شرايط خاص كه در اينجا ذكر شده است ممكن است:

+

اگر شما فكر مي‌كنيد كه بهينه +ساز سيستم در انتخاب پيمايش ترتيبي اشتباه كرده است با دستور 'SET +enable_seqscan TO 'off'  +مي‌توانيد ببينيد آيا استفاده از نمايه‌ها باعث افزايش سرعت درخواست‌ها خواهد شد.

+

استفاده از نمايه‌ها هنگامي كه +از علائم ويژه نظير LIKE و ~ +استفاده مي‌كنيد فقط در بعضي شرايط خاصي كه در اينجا ذكر شده است ممكن است:

  • -

    ابتداي رشته جستجو بايد به - طور صريح مشخص باشد براي مثال:

  • -
-

- دستورات - LIKE نبايد با علامت -% شروع - شوند

-

- الگوهاي منظمي كه با -~ مي‌آيد حتماً بايد با علامت -^ شروع - شود

-
    +

    ابتداي رشته جستجو بايد به + طور صريح مشخص باشد براي مثال: +

  • +

    دستورات + LIKE نبايد با علامت % شروع + شوند

  • +
  • +

    الگوهاي منظمي كه با + ~ مي‌ايد حتماً بايد با علامت ^ شروع + شود

  • -

    رشته جستجو نبايد با يك - مجموعه از كاراكتر‌ها  مثل [a-e] شروع شود

  • +

    رشته جستجو نبايد با يك + مجموعه از كاراكتر‌ها  مثل [a-e] شروع شود

  • -

    جستجوهاي غيرحساس به متن مثل  - ILIKE‌ و *~ از نمايه‌ها - استفاده نمي‌كنند. در عوض از توابع نمايه‌اي كه در قسمت +

    جستجوهاي غيرحساس به متن مثل  + ILIKE‌ و *~ از نمايه‌ها + استفاده نمي‌كنند. در عوض از توابع نمايه‌اي كه در قسمت 4.12 - توضيح داده شد استفاده مي‌كنند.

  • + توضيح داده شد استفاده مي‌كنند.
  • -

    مقدار پيش فرض locale‌ - بايد در initdb استفاده شود.

  • +

    مقدار پيش فرض locale‌ + بايد در initdb استفاده شود.

4.9) -چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها -مشاهده كنم؟

-

راهنماي دستور EXPLAIN -را نگاه كنيد.

+چگونه مي‌توانم نحوه بررسي درخواست را توسط بهينه‌ساز درخواستها +مشاهده كنم؟ +

راهنماي دستور 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‌ -نياز به كار بيشتري دارد.

+نمايه 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 -سرعت بهينه سازي درخواست را هنگاميكه تعداد زيادي جدول را با استفاده از الگوريتم -ژنتيك الحاق مي‌كنيم افزايش مي‌دهد.

+بهينه ساز تكويني درخواست چيست؟ (Genetic Query Optimizer) +

استفاده از GEQO +سرعت بهينه سازي درخواست را هنگاميكه تعداد زيادي جدول را با استفاده از الگوريتم +ژنتيك الحاق مي‌كنيم افزايش مي‌دهد.

4.12) -چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام -دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده -كنم؟

-

براي جستجوي عبارت منظم از عملگر -~‌ استفاده مي‌كنيم. براي جستجوي غير حساس به متن از عملگر -*~ و يا ILIKE‌ استفاده مي‌كنيم.

-

روش ديگر انجام جستجوي غير حساس -به متن در زير نشان داده شده است.

+چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام +دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده +كنم؟ +

براي جستجوي عبارت منظم از عملگر +~‌ استفاده مي‌كنيم. براي جستجوي غير حساس به متن از عملگر +*~ و يا ILIKE‌ استفاده مي‌كنيم.

+

روش ديگر انجام جستجوي غير حساس +به متن در زير نشان داده شده است.

    SELECT *
     FROM tab
-    WHERE lower(col) = 'abc';
+    WHERE lower(col) = 'abc';
 
-

اين از نمايه‌هاي استاندارد -استفاده نمي‌كند. ولي شما مي توانيد با دستور زير يك نمايه ايجاد كنيد و از آن -استفاده كنيد.

+

اين از نمايه‌هاي استاندارد +استفاده نمي‌كند. ولي شما مي توانيد با دستور زير يك نمايه ايجاد كنيد و از آن +استفاده كنيد.

    CREATE INDEX tabindex ON tab (lower(col));
 
-

4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ -است؟

-

با استفاده از توابع IS -NULL و IS NOT NULL مي‌توانيم NULL -بودن يك فيلد را تست كنيم.

+

4.13) Iچگونه +مي‌توانم در يك درخواست تشخيص دهم كه يك فيلد NULL‌ است؟

+

با استفاده از توابع IS +NULL و IS NOT NULL مي‌توانيم NULL +بودن يك فيلد را تست كنيم.

4.14) -تفاوت بين گونه‌هاي مختلف character چيست؟

+تفاوت بين گونه‌هاي مختلف character چيست؟
Type            Internal Name   Notes
 --------------------------------------------------
-VARCHAR(n)      varchar      اندازه، حداكثر طول را نشان مي دهد بدون اضافه شدن كاراكتر اضافه
-CHAR(n)            bpchar       كاراكترهاي بلانك براي پر شدن طول مشخص شده استفاده مي‌شود
-TEXT                text            حداكثر طول را مشخص نمي‌كند
-BYTEA               bytea         آرايه‌اي از بايت با طول متغير
-"char"               char           يك كاراكتر
+VARCHAR(n)      varchar      اندازه، حداكثر طول را نشان مي دهد بدون اضافه شدن كاراكتر اضافه
+CHAR(n)            bpchar       كاراكترهاي بلانك براي پر شدن طول مشخص شده استفاده مي‌شود
+TEXT                text            حداكثر طول را مشخص نمي‌كند
+BYTEA               bytea         آرايه‌اي از بايت با طول متغير
+"char"               char           يك كاراكتر
 
-

نام داخلي گونه‌ها را در -system catalogue ‌و بعضي از پيغامهاي خطا مي‌توان ديد.

-

چهار گونه اول همگي از نوع -varlena هستند (4 بايت اول روي ديسك طول را مشخص مي‌كند كه -به دنبال آن داده‌ها قرار دارند.)‌بنابراين فضاي واقعي استفاده شده روي ديسك از -اندازه تعريف شده بيشتر است. اما اين گونه‌ها را مي‌توان فشرده كرد كه اينكار باعث -مي‌شود فضاي كمتري روي ديسك اشغال كنند.

-

براي ذخيره رشته‌هاي با طول -متغير(VARCHAR(n‌ -بهترين انتخاب است. در اين گونه حداكثر طول رشته محدود است بر خلاف -text كه هيچ محدوديتي روي حداكثر -اندازه رشته نمي‌گذارد.(در اين گونه حداكثر طول يك رشته يك گيگا بايت خواهد بود)

-

گونه (CHAR(n - براي ذخيره داده‌هاي با طول يكسان است.يك -گونه‌ي +

نام داخلي گونه‌ها را در +system catalogue ‌و بعضي از پيغامهاي خطا مي‌توان ديد.

+

چهار گونه اول همگي از نوع +varlena هستند (4 بايت اول روي ديسك طول را مشخص مي‌كند كه +به دنبال آن داده‌ها قرار دارند.)‌بنابراين فضاي واقعي استفاده شده روي ديسك از +اندازه تعريف شده بيشتر است. اما اين گونه‌ها را مي‌توان فشرده كرد كه اينكار باعث +مي‌شود فضاي كمتري روي ديسك اشغال كنند.

+

براي ذخيره رشته‌هاي با طول +متغير(VARCHAR(n‌ +بهترين انتخاب است. در اين گونه حداكثر طول رشته محدود است بر خلاف +text كه هيچ محدوديتي روي حداكثر +اندازه رشته نمي‌گذارد.(در اين گونه حداكثر طول يك رشته يك گيگا بايت خواهد بود)

+

گونه (CHAR(n + براي ذخيره داده‌هاي با طول يكسان است.يك گونه‌ي (CHAR(n -با كاراكترهاي بلانك (خالي) پر مي‌شود تا به طول مشخص شده برسد در -حاليكه گونه VARCHAR -كاراكترها را به همان صورت كه هستند ذخيره مي‌كند. گونه BYTEA -براي ذخيره داده‌هاي باينري است به خصوص داده‌هاي باينري كه شامل بايت‌هاي -NULL هستند. از نظر كارايي تمام اين گونه‌ها يكسان هستند.

+با كاراكترهاي بلانك (خالي) پر مي‌شود تا به طول مشخص شده برسد در +حاليكه گونه VARCHAR +كاراكترها را به همان صورت كه هستند ذخيره مي‌كند. گونه BYTEA +براي ذخيره داده‌هاي باينري است به خصوص داده‌هاي باينتري كه شامل بايت‌هاي +NULL هستند. از نظر كارايي تمام اين گونه‌ها يكسان هستند.

4.15.1) -چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟

-

PostgreSQL از داده‌هاي سريال -پشتيباني مي‌كند. براي ايجاد يك فيلد سريال (براي داشتن يك فيلد منحصر به فرد براي -هر رديف )به روش زير عمل كنيد:

+چگونه مي‌توانم يك فيلد سريال يا افزايشي ايجاد كنم؟ +

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'),
+        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')");
+

براي ديدن اطلاعات بيشتر به +راهنماي دستور 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')");
+

با اجرا دستور فوق مقدار جديد را +در متغير 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 با استفاده از DBIDBD::Pg مقدار oid‌را مي‌توانيد -به اين شكل استخراج كنيد: بعد از اجراي ()st->execute$ -مقدار oid‌ در متغير  sth->pg_oid_status$ -ذخيره خواهد شد.

-

4.15.3) آیا -توابع ()nextval و ()currval منجر -به ایجاد شرایط race برای سایر کاربران می شوند؟

-

خیر، استفاده از این توابع شرایط -race را به وجود نمی آورد.

+

و سرانجام شما مي‌توانيد از +مقدار OID كه خروجي دستور INSERT + است براي ديدن مقدار پيش فرض استفاده كنيد. هر چند اين روش در همه پلتفرمها قابل +استفاده نيست و ضمن اينكه فيلد oid‌ بعد از عدد 4 ميليارد +دوباره صفر مي‌شود. در زبان perl با استفاده از DBIDBD::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های -اصلی آن تغییر نکند به روش زیر می توانیم عمل کنیم:

+چرا اعداد سریالی مربوط به تراکنشهای 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';
+        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ها -توسط نمایه ها استفاده می شوند.

+

OID یک عدد صحیح 4 بایتی است و +بنابراین حداکثر مقدار آن 4 میلیارد خواهد بود و بعد از آن مقدار آن سرریز خواهد +شد.  البته تا کنون برای  کسی  این اتفاق نیفتاده است و تصمیم +گرداندگان PostgreSQL آن است که قبل از آنکه این اتفاق رخ +دهد این مشکل را برطرف کنند.

+

TIDها برای شناسایی محل فیزیکی +یک ردیف بر اساس بلوک و آفست می باشد. TIDها بعد از تغییر +پیدا کردن یک ردیف و یا بازخوانی آن عوض می شوند. TIDها +توسط نمایه ها استفاده می شوند.

4.17) -معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ -استفاده مي‌شود چيست؟

-

لیست برخی از ترمها و کلماتی که -استفاده می شوند:

+معني بعضي از ترمها و كلماتي كه در PostgreSQL‌ +استفاده مي‌شود چيست؟
+

لیست برخی از ترمها و کلماتی که +استفاده می شوند:

  • table, relation, class - :کلاس، رابطه، جدول

  • -

    row, record, tuple چندتایی، - رکورد، ردیف

  • + :کلاس، رابطه، جدول
  • +

    row, record, tuple چندتایی، + رکورد، ردیف

  • column, field, attribute - صفت، فیلد، ستون

  • -

    retrieve, select انتخاب، - خواندن

  • -

    replace, updateبه روز کردن، - جایگزینی + صفت، فیلد، ستون

  • +

    retrieve, select انتخاب، + خواندن

  • +

    replace, updateبه روز کردن، + جایگزینی

  • -

    append, insert درج، اضافه - کردن

  • +

    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" -مي‌گيرم؟

-

این خطا احتمالاً یا به خاطر -تمام شدن حافظه مجازی سیستم شماست و یا اینکه کرنل برای برنامه ها در مورد میزان -استفاده از حافظه مجازی محدودیت اعمال کرده است. قبل از اجرای برنامه اصلی یکی از -دستورات زیر را اجرا کنید.

+چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc" +مي‌گيرم؟ +

این خطا احتمالاً یا به خاطر +تمام شدن حافظه مجازی سیستم شماست و یا اینکه کرنل برای برنامه ها در مورد میزان +استفاده از حافظه مجازی محدودیت اعمال کرده است. قبل از اجرای برنامه اصلی یکی از +دستورات زیر را اجرا کنید.

    ulimit -d 262144
     limit datasize 256m
 
-

بسته به نوع شل یکی از این -دستورات ممکن است با موفقیت اجرا شود. با اجرای آن دستور محدودیت حافظه مجازی برای -برنامه ها برداشته شده و با این کار احتمالاً درخواستی که قبلاً خطا می داده است -اجرا خواهد شد.

-

4.19) از كجا -تشخيص دهم كه ويرايش يا نسخه PostgreSQLيي -كه من استفاده مي‌كنم چيست؟

-

با اجرای دستور +

بسته به نوع شل یکی از این +دستورات ممکن است با موفقیت اجرا شود. با اجرای آن دستور محدودیت حافظه مجازی برای +برنامه ها برداشته شده و با این کار احتمالاً درخواستی که قبلاً خطا می داده است +اجرا خواهد شد.

+

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 خواهد شد. -برای جلوگیری از این خطا حتماً باید از یک تراکنش استفاده کنید. -این کار همانطور که قبلاً گفته شد با استفاده از قرار دادن BEGINEND در ابتدا و انتهای دستورات انجام می شود.

-

اگر این خطا را در حین استفاده -از یک درایور ODBC دریافت کردید احتمالاً باید این دستور را -اجرا کنید: set auto-commit off

+

4.20) چرا در +حین اجرای عملیات روی large-objectها خطای "invalid +large obj descriptor"به وجود می آید؟

+

شما باید قبل از +شروع دستوراتی که با large-objectها کار می کنند از +BEGIN  و بعد از آنها هم یک END +بگذارید. در حال حاضر PostgreSQL هندل large-objectها +را در زمان نهایی شدن تراکنش (commitشدن) +می بندد. به همین دلیل اولین تلاش برای انجام هر کاری با هندل منجر +به خطای invalid large obj descriptor خواهد شد. +برای جلوگیری از این خطا حتماً باید از یک تراکنش استفاده کنید. +این کار همانطور که قبلاً گفته شد با استفاده از قرار دادن BEGINEND در ابتدا و انتهای دستورات انجام می شود.

+

اگر این خطا را در حین استفاده +از یک درایور ODBC دریافت کردید احتمالاً باید این دستور را +اجرا کنید: set auto-commit off

4.21) -چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار -پيش‌فرض داشته باشد؟

-

از CURRENT_TIMESTAMP - استفاده کنید در مثال زیر نحوه -انجام این کار نشان داده شده است:

+چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار +پيش‌فرض داشته باشد؟
+

از CURRENT_TIMESTAMP + استفاده کنید در مثال زیر نحوه انجام +این کار نشان داده شده است:

CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
 
 

4.22) -چرا "زير درخواستهايي" كه از IN استفاده -مي‌كنند كند هستند؟

-

در نسخه های قبل از 7.4 عمل -الحاق زیر درخواست و درخواست اصلی به این صورت انجام می شود که نتایج به دست آمده -از زیر درخواست به صورت ترتیبی برای هر ردیف اعمال می شود. اگر زیردرخواست ردیف های -کمی را به عنوان خروجی برگرداند و درخواست بیرونی ردیف های زیادی را شامل شود -استفاده از IN بهترین روش است در غیر اینصورت بهتر است از -EXISTS استفاده شود

+چرا "زير درخواستهايي" كه از 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) -انجام دهم؟

-

برای انجام الحاق خارجی به روش -زیر عمل کنید:

+

برای اجرای سریع این درخواست +باید برای ستون 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 شبیه -سازی کنیم. این کار در مثال زیر نشان داده شده است:

+

درخواستهای بالا 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
@@ -1422,90 +1441,93 @@ t2 که نظیر آن
 

4.24) -چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟

-

در حال حاضر این کار امکان پذیر -نیست. PostgreSQL فقط امکان درخواست از پایگاه داده ای را -می دهد که در حال حاضر به آن متصل باشید و نمی‌توان به طور همزمان از دو پایگاه -داده استفاده کرد. البته یک برنامه کاربردی خود می تواند به طور همزمان دو  -پایگاه داده را مورد استفاده قرار داده و نتایج را با هم ترکیب کند ولی نمی تواند -در یک درخواست به هر  دو پایگاه داده رجوع کند.

+چگونه مي‌توان درخواستهايي از چند پايگاه داده توليد كرد؟ +

در حال حاضر این کار امکان پذیر +نیست. PostgreSQL فقط امکان درخواست از پایگاه داده ای را +می دهد که در حال حاضر به آن متصل باشید و نمی توان به طور همزمان از دو پایگاه +داده استفاده کرد. البته یک برنامه کاربردی خود می تواند به طور همزمان دو  +پایگاه داده را مورد استفاده قرار داده و نتایج را با هم ترکیب کند ولی نمی تواند +در یک درخواست به هر  دو پایگاه داده رجوع کند.

4.25) -چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟

-

در نسخه 7.3 خروجی یک تابع می -تواند چند ردیف یا چند ستون باشد. برای دیدن  اطلاعات بیشتر به سایت زیر -مراجعه کنید:چگونه خروجي يك تابع مي‌تواند  چند رديف يا ستون باشد؟ +

در نسخه 7.3 خروجی یک تابع می +تواند چند ردیف یا چند ستون باشد. برای دیدن  اطلاعات بیشتر به سایت زیر +مراجعه کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions  

4.26) -در توابع PL/PgSQL چرا نمي‌توان با اطمينان -جداول موقت را ايجاد يا حذف كرد؟

-

PL/PgSQL محتوای توابع را ذخیره -(cache) می کند. یک اثر بد جانبی -این کار آن است که اگر در تابع از یک جدول موقت استفاده شود و بعداً آن جدول حذف و -یک جدول جدید به جای آن ایجاد شود، در فراخوانی مجدد  آن تابع، محتوای ذخیره -شده تابع  هنوز به جدول قدیمی اشاره می کند و بنابراین اجرای تابع با اشکال -مواجه می شود. راه حل این مشکل آن است که برای جداول موقت از دستور EXECUTE -استفاده شود که این کار سبب می شود که درخواست برای هر بار اجرا مجدداً پیمایش و -تفسیر شود.

+در توابع PL/PgSQL چرا نمي‌توان با اطمينان +جداول موقت را ايجاد يا حذف كرد؟ +

PL/PgSQL محتوای توابع را ذخیره +(cache) می کند. یک اثر بد جانبی +این کار آن است که اگر در تابع از یک جدول موقت استفاده شود و بعداً آن جدول حذف و +یک جدول جدید به جای آن ایجاد شود، در فراخوانی مجدد  آن تابع، محتوای ذخیره +شده تابع  هنوز به جدول قدیمی اشاره می کند و بنابراین اجرای تابع با اشکال +مواجه می شود. راه حل این مشکل آن است که برای جداول موقت از دستور EXECUTE +استفاده شود که این کار سبب می شود که درخواست برای هر بار اجرا مجدداً پیمایش و +تفسیر شود.

4.27) -چه گزينه‌هايي براي تكرار (replication) -وجود دارد؟ +چه گزينه‌هايي براي تكرار (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 +

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.

+href="http://gborg.postgresql.org/project/pgreplication/projdisplay.php"> +http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

4.28) -چه گزينه‌هايي براي رمزنگاري وجود دارد؟ +چه گزينه‌هايي براي رمزنگاري وجود دارد؟

  • contrib/pgcrypto - شامل توابع رمزنگاری زیادی است که می توان از آنها در دستورات SQL - استفاده کرد.

  • -

    برای رمز کردن ارتباط بین - client و server  پایگاه داده - حتماً گزینه SSL را بر روی پایگاه داده فعال کنیم.

  • -

    در نسخه 7.3 به بعد کلمات - عبور کاربران به طور اتوماتیک به صورت رمز شده ذخیره می شود ولی در نسخه های - قبلی باید گزینه - PASSWORD_ENCRYPTION را در فایلpostgresql.conf - فعال کنیم. + شامل توابع رمزنگاری زیادی است که می توان از آنها در دستورات SQL + استفاده کرد.

  • +

    برای رمز کردن ارتباط بین + client و server ، پایگاه داده + حتماً گزینه SSL را بر روی پایگاه داده فعال کنیم.

  • +

    در نسخه 7.3 به بعد کلمات + عبور کاربران به طور اتوماتیک به صورت رمز شده ذخیره می شود ولی در نسخه های + قبلی باید گزینه + PASSWORD_ENCRYPTION  در فایلpostgresql.conf + فعال کنیم.

  • -

    می توان پایگاههای داده را - روی یک فایل سیستم رمزشده نگاهداری کرد

+

می توان پایگاههای داده را + روی یک فایل سیستم رمزشده نگاهداری کرد


Extending PostgreSQL

5.1) -من يك تابع نوشته‌ام. چگونه آن را در psql -اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟

-

دلایل مختلفی می تواند باعث بروز -این مشکل شود. اما قبل از همه، تابع خود را به صورت جدا تست کنید.

-

5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي -PostgreSQL‌ همكاري و مشاركت داشته باشم؟

-

کد خود را به گروه پستی +من يك تابع نوشته‌ام. چگونه آن را در psql +اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟ +

دلایل مختلفی می تواند باعث بروز +این مشکل شود. اما قبل از همه تابع خود را به صورت جدا تست کنید.

+

5.2) چگونه +مي‌توانم در توليد نوع‌ها و توابع جديد و جالب براي +PostgreSQL‌ همكاري و مشاركت داشته باشم؟

+

کد خود را به گروه پستی pgsql-hackers  - ارسال کنید.

+ ارسال کنید.

5.3)  -چگونه مي‌توانم يك تابع به زبان C بنويسم -كه خروجي آن يك tuple  (چند -تايي) باشد؟

-

در نسخه های 7.3 به بعد یک تابع -می تواند یک جدول را به عنوان خروجی برگرداند. این ویژگی در توابعی که به زبانهای -C و PL/PgSQL نوشته می‌شوند به طور -کامل وجود دارد. راهنما برنامه نویسان را مطالعه کنید. یک مثال از نحوه برگرداندن -یک جدول به عنوان خروجی در contrib/tablefunc آمده -است.

+چگونه مي‌توانم يك تابع به زبان C بنويسم +كه خروجي آن يك tuple  (چند +تايي) باشد؟ +

در نسخه های 7.3 به بعد یک تابع +می تواند یک جدول را به عنوان خروجی برگرداند. این ویژگی در توابعی که به زبانهای +C و PL/PgSQL نوشته می شوند به طور +کامل وجود دارد. راهنما برنامه نویسان را مطالعه کنید. یک مثال از نحوه برگرداندن +یک جدول به عنوان خروجی در contrib/tablefunc آمده +است.

5.4) -من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن، -تغيير ديده نمي‌شود؟

-

Makefile برای فایلهای -include شده وابستگیها را به درستی نشان نمی دهد. برای اطمینان از -اینکه فایلی که عوض کرده اید حتماً دوباره کامپیل می‌شود دستور make clean -را اجرا کنید. اگر از کامپیلر gcc استفاده می کنید می -توانید از گزینه enable-depend-- در موقع اجرای برنامه -configure استفاده کنید این گزینه باعث می شود که وابستگیها -به طور اتوماتیک تولید شود.

\ No newline at end of file +من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن +تغيير ديده نمي‌شود؟ +

Makefile برای فایلهای +include شده وابستگیها را به درستی نشان نمی دهد. برای اطمینان از +اینکه فایلی که عوض کرده اید حتماً دوباره کامپیل می شود دستور make clean +را اجرا کنید. اگر از کامپیلر gcc استفاده می کنید می +توانید از گزینه enable-depend-- در موقع اجرای برنامه +configure استفاده کنید این گزینه باعث می شود که وابستگیها +به طور اتوماتیک تولید شود.

\ No newline at end of file -- cgit v1.2.3