Re: FAQ in farsi (txt version) - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: FAQ in farsi (txt version)
Date
Msg-id 200410020819.i928Jpr02218@candle.pha.pa.us
Whole thread Raw
In response to FAQ in farsi (txt version)  (Mahmoud Taghizadeh <m_taghi@yahoo.com>)
List pgsql-patches
Patch applied.  Thanks.

---------------------------------------------------------------------------


Mahmoud Taghizadeh wrote:
> this is txt version of farsi translation I had submitted before.
>
>
> With Regards,
> --taghi
>
> ---------------------------------
> Do you Yahoo!?
> Take Yahoo! Mail with you! Get it on your mobile phone.

Content-Description: PostgreSQL FAQ.txt

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

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

pgsql-patches by date:

Previous
From: Mahmoud Taghizadeh
Date:
Subject: FAQ in farsi (txt version)
Next
From: Reini Urban
Date:
Subject: Re: LDFLAGS overriding