<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0122) --> <HTML dir="rtl"><HEAD><TITLE>PostgreSQL FAQ</TITLE> <META content="Microsoft FrontPage 6.0" name=GENERATOR> <META http-equiv=Content-Type content="text/html; charset=utf-8"></HEAD> <BODY text=#000000 vLink=#A00000 aLink=#0000FF link=#FF0000 bgColor=#ffffff> <h1 dir="rtl"><font face="Tahoma"><span lang="fa">سوالاتي كه اغلب در مورد </span> </font> <font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> پرسيده مي شوند</font></span></h1> <p dir="rtl"><font face="Tahoma"><span lang="fa">تاريخ آخرين اصلاح اين فايل: 28 شهریور 1383 هجری شمسی</span></font></p> <P dir="rtl"><span lang="fa"><font face="Tahoma">نگهدارنده اصلي فايل (زبان انگليسي)در حال حاضر </font></span><font face="Tahoma">: Bruce Momjian <A href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A></font></P> <P dir="rtl"><span lang="fa"><font face="Tahoma">نگهدارنده فايل به زبان فارسي: </font></span><font face="Tahoma"><a href="mailto:m.taghizadeh@imenafzar.net"> m.taghizadeh@imenafzar.net</a> </font><span lang="fa"><font face="Tahoma"> محمود تقيزاده مهرجردی</font></span><font face="Tahoma"><BR></font></P> <P dir="rtl"><span lang="fa"><font face="Tahoma">آخرين نسخه اين فايل را ميتوانيد از اين آدرس بگيريد </font></span><font face="Tahoma"> <A href="http://www.postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A></font></P> <P dir="rtl"><span lang="fa"><font face="Tahoma">سوالاتي كه در مورد يك سکوی(پلتفرم) خاص است در اين آدرس جواب داده شده اند </font></span><font face="Tahoma"> <A href="http://www.postgresql.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A></font></P> <HR dir="rtl"> <H2 align=center dir="rtl"><font face="Tahoma"><span lang="fa">سوالات عمومي</span></font></H2> <p dir="rtl"><font face="Tahoma"><a href="#1.1">1.1</a>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> چيست و چگونه بايد آن را تلفظ كرد؟</font></span><font face="Tahoma"><BR><A href="#1.2">1.2</A>) <span lang="fa">قانون كپي رايت (حقوق معنوي) در مورد </span>PostgreSQL <span lang="fa"> به چه صورت است؟</span><BR><A href="#1.3">1.3</A>)<span lang="fa"> </span>PostgreSQL</font><span lang="fa"><font face="Tahoma"> روي چه نوع يونيكسهايي اجرا ميشود؟</font></span><font face="Tahoma"><BR><A href="#1.4">1.4</A>) </font><span lang="fa"><font face="Tahoma">روي چه محيطهاي غير يونيكسي ميتوان آن را اجرا كرد؟</font></span><font face="Tahoma"><BR><A href="#1.5">1.5</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> را از كجا ميتوانم بگيرم؟</font></span><font face="Tahoma"><BR><A href="#1.6">1.6</A>) </font><span lang="fa"><font face="Tahoma">از كجا خدمات پشتيباني بگيرم؟</font></span><font face="Tahoma"><BR><A href="#1.7">1.7</A>)</font><span lang="fa"><font face="Tahoma"> آخرين نسخه اعلام شده چيست؟</font></span><font face="Tahoma"><BR><A href="#1.8">1.8</A>) </font><span lang="fa"><font face="Tahoma">چه مستندات و راهنمائيهايي وجود دارند؟</font></span><font face="Tahoma"><BR><A href="#1.9">1.9</A>) <span lang="fa">چگونه ميتوانم ازاشكالات شناخته شده و يا امكاناتي كه در اين پايگاه داده وجود ندارد مطلع شوم؟</span><BR><A href="#1.10">1.10</A>) </font><span lang="fa"><font face="Tahoma">چگونه ميتوانم زبان </font></span> <font face="Tahoma">SQL</font><span lang="fa"><font face="Tahoma"> را ياد بگيرم؟</font></span><font face="Tahoma"><BR><A href="#1.11">1.11</A>)</font><span lang="fa"><font face="Tahoma"> آيا </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> مشكل </font></span><font face="Tahoma">Y2K</font><span lang="fa"><font face="Tahoma"> دارد يا خير؟</font></span><font face="Tahoma"><BR><A href="#1.12">1.12</A>) </font><span lang="fa"><font face="Tahoma">چگونه ميتوانم به تيم برنامه نويس </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> ملحق شوم؟</font></span><font face="Tahoma"><BR><A href="#1.13">1.13</A>) <span lang="fa">چگونه ميتوانم يك اشكال را به گروه برنامه نويس اعلام كنم؟</span><BR><A href="#1.14">1.14</A>) </font><span lang="fa"><font face="Tahoma"> وضعيت </font></span> <font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> در مقايسه با ساير </font></span><font face="Tahoma">DBMS<span lang="fa">ها به چه صورت است؟</span><BR><A href="#1.15">1.15</A>) <span lang="fa">من چگونه ميتوانم از نظر مالي به </span>PostgreSQL<span lang="fa"> كمك كنم؟</span><BR> </font></p> <h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">سوالات مربوط به استفاده از پايگاه داده</span></font></h2> <p dir="rtl"><font face="Tahoma"><A href="#2.1">2.1</A>) <span lang="fa">آيا هيچ درايور </span>ODBC</font><span lang="fa"><font face="Tahoma"> براي </font></span><font face="Tahoma">PostgreSQL</font><font face="Tahoma"><span lang="fa"> وجود دارد؟</span><BR><A href="#2.2">2.2</A>) <span lang="fa">چه ابزارهايي براي استفاده از </span>PostgreSQL<span lang="fa"> با صفحات وب وجود دارد؟</span><BR><A href="#2.3">2.3</A>) <span lang="fa">آيا </span>PostgreSQL<span lang="fa"> يك واسط كاربري گرافيكي دارد؟</span><BR><A href="#2.4">2.4</A>) <span lang="fa">با چه زبانهاي برنامهنويسي ميتوان با </span>PostgreSQL<span lang="fa"> ارتباط برقرار كرد؟</span><BR> </font></p> <h2 align="center" dir="rtl"><span lang="fa"><font face="Tahoma">سوالات مربوط به راهبري</font></span></h2> <p dir="rtl"><font face="Tahoma"><A href="#3.1">3.1</A>) <span lang="fa">چگونه ميتوانم </span>PostgreSQL<span lang="fa"> را در شاخهاي غير از </span>/usr/local/pgsql/<span lang="fa"> نصب كنم؟</span><BR><A href="#3.2">3.2</A>) <span lang="fa">چرا موقعي كه من برنامه </span>postmaster<span lang="fa"> را اجرا مي كنم پيام </span>Bad system call<span lang="fa"> و يا </span>core dump <span lang="fa">ميگيرم؟</span><BR><A href="#3.3">3.3</A>) <span lang="fa">چرا موقعي كه من سعي ميكنم برنامه </span>postmaster<span lang="fa"> را اجرا كنم خطاي</span> <I>IpcMemoryCreate</I> <span lang="fa">ميگيرم؟</span><BR><A href="#3.4">3.4</A>)<I><span lang="fa"> </span></I><span lang="fa">چرا موقعي كه من سعي ميكنم برنامه </span>postmaster<span lang="fa"> را اجرا كنم خطاي</span> <I><span lang="fa"> </span>IpcSemaphoreCreate<span lang="fa"> </span></I><span lang="fa">ميگيرم؟</span><BR><A href="#3.5">3.5</A>) <span lang="fa">چگونه ميتوانم اتصالات ساير ماشينها را كنترل كنم؟</span><BR><A href="#3.6">3.6</A>) <span lang="fa">براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد انجام دهم؟</span><BR><A href="#3.7">3.7</A>) <span lang="fa">چه امكاناتي براي پيدا كردن اشكال وجود دارد؟</span><BR><A href="#3.8">3.8</A>) <span lang="fa">چرا موقعي كه من ميخواهم به پايگاه داده وصل شوم پيام</span> <I> "Sorry, too many clients" <span lang="fa"></span></I><span lang="fa">ميگيرم؟</span><BR><A href="#3.9">3.9</A>)<span lang="fa"> در شاخه </span> <I>pgsql_tmp</I> <span lang="fa"> چه چيزي قرار دارد؟</span><BR><A href="#3.10">3.10</A>) <span lang="fa">چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را </span>dump<span lang="fa"> و مجدداً </span>restore<span lang="fa"> كنم؟</span><BR><A href="#3.11">3.11</A>) <span lang="fa">از چه سخت افزاري بايد استفاده كنم؟</span><BR> </font></p> <H2 align=center dir="rtl"><span lang="fa"><font face="Tahoma">سوالات عملياتي</font></span></H2> <p dir="rtl"><font face="Tahoma"><A href="#4.1">4.1</A>) تفاوت بين <span lang="en-us">binary cursors</span> و <span lang="en-us"> Normal cursors</span> چيست؟<BR><A href="#4.2">4.2</A>) <span lang="fa">من چگونه ميتوانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست </span> SELECT<span lang="fa"> بزنم؟</span><BR><A href="#4.3">4.3</A>) <span lang="fa">من چگونه ميتوانم ليستي از جداول يا ساير چيزهايي كه در </span> psql<span lang="fa"> وجود دارد را ببينم؟</span><BR><A href="#4.4">4.4</A>) <span lang="fa">چگونه يك ستون جدول را حذف ميكنيد؟ چگونه نوع داده آن را عوض كنيم؟</span><BR><A href="#4.5">4.5</A>) <span lang="fa">حداكثر اندازه يك رديف، جدول و خود پايگاه داده چقدر است؟</span><BR><A href="#4.6">4.6</A>) <span lang="fa">چقدر فضاي ديسك سخت براي ذخيره كردن دادههاي يك فايل متني مورد نياز است؟</span><BR><A href="#4.7">4.7</A>) <span lang="fa">چگونه ميتوانم بفهمم كه چه كاربران، پايگاه داده، نمايه و جداولي در سيستم تعريف شده است؟</span><BR><A href="#4.8">4.8</A>) <span lang="fa">چرا درخواستهاي من كند اجرا ميشوند يا چرا از نمايه ها استفاده نميكنند؟</span><BR><A href="#4.9">4.9</A>) <span lang="fa">چگونه ميتوانم نحوه بررسي درخواست را توسط بهينهساز درخواستها مشاهده كنم؟</span><BR><A href="#4.10">4.10</A>) <span lang="fa">نمايه </span>R-tree<span lang="fa"> چيست؟</span><BR><A href="#4.11">4.11</A>) <span lang="fa">بهينه ساز تكويني درخواست چيست؟</span> (Genetic Query Optimizer)<BR><A href="#4.12">4.12</A>) <span lang="fa">چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده كنم؟</span><BR><A href="#4.13">4.13</A>) <span lang="fa">چگونه ميتوانم در يك درخواست تشخيص دهم كه يك فيلد </span>NULL<span lang="fa"> است؟</span><BR><A href="#4.14">4.14</A>) <span lang="fa">تفاوت بين گونههاي مختلف </span>character<span lang="fa"> چيست؟</span><BR><A href="#4.15.1">4.15.1</A>) <span lang="fa">چگونه ميتوانم يك فيلد سريال يا افزايشي ايجاد كنم؟</span><BR><A href="#4.15.2">4.15.2</A>) <span lang="fa">چگونه ميتوانم مقدار يك درج سريالي را بدانم؟</span><BR><A href="#4.15.3">4.15.3</A>) <span lang="fa">آیا توابع ()</span>nextval<span lang="fa"> و ()</span>currval<span lang="fa"> منجر به ایجاد شرایط </span>race<span lang="fa"> برای سایر کاربران می شوند؟</span><BR><A href="#4.15.4">4.15.4</A>) <span lang="fa">چرا اعداد سریالی مربوط به تراکنشهای </span>abort<span lang="fa"> شده مجدداً استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟</span><BR><A href="#4.16">4.16</A>) OID<span lang="fa"> و </span>TID<span lang="fa"> چه هستند؟</span><BR><A href="#4.17">4.17</A>) <span lang="fa">معني بعضي از ترمها و كلماتي كه در </span>PostgreSQL<span lang="fa"> استفاده ميشود چيست؟</span><BR><A href="#4.18">4.18</A>)<span lang="fa"> چرا من خطاي </span><i>"ERROR: Memory exhausted in AllocSetAlloc"</i><span lang="fa"> ميگيرم؟</span><BR><A href="#4.19">4.19</A>) <span lang="fa">از كجا تشخيص دهم كه ويرايش يا نسخه </span>PostgreSQL<span lang="fa">يي كه من استفاده ميكنم چيست؟</span><BR><A href="#4.20">4.20</A>) <span lang="fa">چرا در حین اجرای عملیات روی </span> large-object<span lang="fa">ها خطای </span>"<I>invalid large obj descriptor</I>"<span lang="fa">به وجود می آید؟</span><BR><A href="#4.21">4.21</A>) <span lang="fa">چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار پيشفرض داشته باشد؟</span><BR><A href="#4.22">4.22</A>) <span lang="fa">چرا زير درخواستهايي كه از </span>IN<span lang="fa"> استفاده ميكنند كند هستند؟</span><BR><A href="#4.23">4.23</A>) <span lang="fa">چگونه ميتوانم يك الحاق خارجي (</span>outer join<span lang="fa">) انجام دهم؟</span><BR><A href="#4.24">4.24</A>) <span lang="fa">چگونه ميتوان درخواستهايي از چند پايگاه داده توليد كرد؟</span><BR><A href="#4.25">4.25</A>) <span lang="fa">چگونه خروجي يك تابع ميتواند چند رديف يا ستون باشد؟</span><BR><A href="#4.26">4.26</A>) <span lang="fa">در توابع </span>PL/PgSQL<span lang="fa"> چرا نميتوان با اطمينان جداول موقت را ايجاد يا حذف كرد؟</span><BR><A href="#4.27">4.27</A>) <span lang="fa">چه گزينههايي براي تكرار (</span>replication<span lang="fa">)</span> <span lang="fa">وجود دارد؟</span><BR><A href="#4.28">4.28</A>) <span lang="fa">چه گزينههايي براي رمزنگاري وجود دارد؟</span><BR> </font></p> <h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">توسعه </span> PostgreSQL</font></h2> <p dir="rtl"><font face="Tahoma"><A href="#5.1">5.1</A>) <span lang="fa">من يك تابع نوشتهام. چگونه آن را در </span>psql<span lang="fa"> اجرا كنم؟ چرا با اجراي آن </span>core dump<span lang="fa"> ميگيرم؟</span><BR><A href="#5.2">5.2</A>) <span lang="fa">چگونه ميتوانم در توليد نوعها و توابع جديد و جالب براي </span> PostgreSQL<span lang="fa"> همكاري و مشاركت داشته باشم.</span><BR><A href="#5.3">5.3</A>) <span lang="fa">چگونه ميتوانم يك تابع به زبان </span>C<span lang="fa"> بنويسم كه خروجي آن يك</span> <span lang="fa"></span>tuple<span lang="fa"> </span> <span lang="fa">(چند تايي) باشد؟</span><BR><A href="#5.4">5.4</A>) <span lang="fa">من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن تغيير ديده نميشود؟</span><BR> </font></p> <HR dir="rtl"> <H2 align=center dir="rtl"><font face="Tahoma"><span lang="fa">سوالات عمومي</span></font></H2> <H4 dir="rtl"><font face="Tahoma"><A name=1.1>1.1</A>) <span lang="en-us"> PostgreSQL</span> چيست و چگونه آن را بايد تلفظ كرد؟</font></H4> <p dir="rtl"><span lang="en-us">PostgreSQL</span> به صورت <span lang="en-us"> Post-Gres-Q-L</span> تلفظ ميشود. يك فايل صوتي در آدرس <a href="http://www.postfresql.org/postgresql.mp3‌"><span lang="en-us"> http://www.postfresql.org/postgresql.mp3</span></a> براي كساني كه مايلند تلفظ صحيح را بشنوند وجود دارد.</p> <P dir="rtl"><span lang="en-us">PostgreSQL</span> از روي سيستم مديريت پايگاه داده <span lang="en-us">POSTGRES</span> توسعه داده شده است (هنوز هم بعضي مواقع براي سادگي به آن <span lang="en-us">Postgres</span> گفته ميشود) كه يك نمونه تحقيقاتي از پايگاه دادههاي نسل بعد است. <span lang="en-us">PostgreSQL</span> همان الگوي داده قوي و انواع داده را حفظ كرده است ولي زبان <span lang="en-us">PostQuel</span> را با يك زيرمجموعه پيشرفته از <span lang="en-us">SQL</span> جايگزين كرده است. <span lang="en-us">PostgreSQL</span> متن باز بوده و متن كامل آن در دسترس است.</P> <P dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL </span> توسط يك تيم برنامهنويس كه همگي در گروه پست الكترونيك برنامهنويسان <span lang="en-us">PostgreSQL</span> عضو هستند، انجام ميشود. هماهنگ كننده اصلي در حال حاضر <span lang="en-us">Marc G. Fournier</span> به آدرس <span lang="en-us"><a href="mailto:scrappy@PostgreSQL.org"> scrappy@PostgreSQL.org</a></span> ميباشد. (براي ديدن نحوه ملحق شدن به اين تيم قسمت <A href="#1.6">1.6</A> را ببينيد). اين تيم در حاضر مسئوليت تمام مسائل مربوط به برنامهنويسي <span lang="en-us">PostgreSQL</span> را بر عهده دارد. اين يك پروژه گروهي است و تحت كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در مورد اين تيم به آدرس <A href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html"> http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A> مراجعه كنيد.</font></P> <P dir="rtl"><font face="Tahoma">اولين نسخه <span lang="en-us">PostgreSQL</span> توسط Andrew Yu and Jolly Chen به وجود آمد. افراد بسياري در توسعه و رفع اشكال و انتقال آن شركت كردهاند. متن اصلي <span lang="en-us">Postgres</span> كه <span lang="en-us">PostgreSQL</span> از روي آن نوشته شده است، توسط تعداد زيادي دانشجوي كارشناسي ارشدو دانشجوي كارشناسي و تيم برنامهنويسي كه تحت نظر پروفسور Michael Stonebrake در دانشگاه بركلي،كاليفرنيا كار ميكردهاند نوشته شده است.</font></P> <P dir="rtl"><font face="Tahoma">نام اصلي نرم افزار در دانشگاه بركلي <span lang="en-us">Postgres</span> بود. در سال 1995 بعد از اضافه شدن <span lang="en-us">SQL</span> نام آن به<span lang="en-us"> Postgres95</span> تغيير داده شد.<span lang="en-us"> </span>در سال 1996 نام آن به <span lang="en-us">PostgreSQL</span> تغيير داده شد.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=1.2>1.2</A>) قوانين كپي رايت در مورد <span lang="en-us">PostgreSQL</span> به چه صورت است؟</font></H4> <p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span> تحت قانون كپي رايت زير قرار دارد:</font></p> <P dir="ltr"><font face="Tahoma">PostgreSQL Data Base Management System</font></P> <P dir="ltr"><font face="Tahoma">Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California</font></P> <P dir="ltr"><font face="Tahoma">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.</font></P> <P dir="ltr"><font face="Tahoma">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.</font></P> <P dir="ltr"><font face="Tahoma">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.</font></P> <P dir="rtl"><font face="Tahoma">قانون بالا ليسانس <span lang="en-us">BSD</span> كه يك ليسانس كلاسيك براي متنهاي باز است ميباشد. هيچ محدوديتي در مورد نحوه استفاده از متن در آن ديده نميشود. ما آن را دوست داريم و هيچ قصدي براي تغيير آن نداريم.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=1.3>1.3</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> روي چه نوع يونيكسهايي اجرا ميشود؟</font></span></H4> <p dir="rtl"><font face="Tahoma">در حالت كلي <span lang="en-us">PostgreSQL</span> روي هر پلتفرم (سكوي) سازگار با يونيكس اجرا ميشود. ليست پلتفرمهايي كه تاكنون <span lang="en-us">PostgreSQL</span> روي آنها نصب و تست شده است درقسمت دستورالعملهاي نصب آمده است.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.4>1.4</A>) </font><span lang="fa"><font face="Tahoma"> روي چه محيطهاي غير يونيكسي ميتوان آن را اجرا كرد؟</font></span></H4> <P dir="rtl"><font face="Tahoma"><STRONG>Client</STRONG></font></P> <P dir="rtl"><font face="Tahoma">ميتوان <span lang="en-us">psql, </span> كتابخانه <span lang="en-us">libpq</span> و ساير واسطها و برنامههاي كاربردي را طوري كامپيل كرد كه روي محيطهاي ويندوز نيز اجرا شوند. در اين حالت <span lang="en-us">Client</span> روي ويندوز اجرا ميشود و از طربق شبكه و پروتكل <span lang="en-us">TCP/IP</span> با يك سرور كه روي يك پلتفرم لينوكس در حال اجراست ارتباط برقرار ميكند.يك فايل <span lang="en-us">win32.mak</span> همراه با كدهاي <span lang="en-us">PostgreSQL</span> وجود دارد كه براي كامپيل كردن كتابخانه <span lang="en-us">libpq</span> و برنامه <span lang="en-us">psql</span> ميباشد. <span lang="en-us">P</span><span lang="en-us">ostgreSQL</span> همچنين امكان ارتباط به صورت <span lang="en-us">ODBC</span> را نيز دارد.</font></P> <P dir="rtl"><font face="Tahoma"><STRONG>Server</STRONG></font></P> <P dir="rtl"><strong style="font-weight: 400"><font face="Tahoma">با استفاده از <span lang="en-us">Cygwin</span> و كتابخانه <span lang="en-us">Cygnus</span> ميتوان پايگاه داده را روي ويندوز <span lang="en-us">NT</span> و يا <span lang="en-us">Win2K</span> اجرا كرد.براي ديدن اطلاعات بيشتر فايل<span lang="en-us"> </span></font></strong><font face="Tahoma"> <I>pgsql/doc/FAQ_MSWIN<span lang="en-us"> </span></I>را كه بهمراه توزبعهاي <span lang="en-us">PostgreSQL</span> آمده است ببينيد و يا اينكه به اين صفحه <A href="http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN"> http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> مراجعه كنيد.</font></P> <P dir="rtl"><font face="Tahoma">در حال حاضر يك عمليات انتقال <span lang="en-us"> PostgreSQL</span> به روي سكوهاي <span lang="en-us">Win NT/2000/XP</span> در جريان است. براي ديدن وضعيت اين پروژه به سايتهاي <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html"> http://momjian.postgresql.org/main/writings/pgsql/win32.htm</A> و <A href="http://techdocs.postgresql.org/guides/Windows"> http://techdocs.postgresql.org/guides/Windows</A> مراجعه كنيد. </font></P> <P dir="rtl"><font face="Tahoma">همچنين يك عمليات انتقال بر روي <span lang="en-us">Novell Netware 6</span> نيز در حال انجام است كه در سايت <A href="http://forge.novell.com/">http://forge.novell.com</A> ميتوانيد اطلاعات بيشتر را ببينيد.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=1.5>1.5</A>) PostgreSQL</font><span lang="fa"><font face="Tahoma"> را از كجا ميتوانم بگيرم؟</font></span></H4> <p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span> را از سايت اصلي آن <A href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</A> ميتوانيد بگيريد. در صفحه اصلي سايت ليست ساير آدرسهايي كه ميتوانيد <span lang="en-us"> PostgreSQL</span> را از آنها بگيريد آمده است.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.6>1.6</A>) </font><span lang="fa"><font face="Tahoma"> از كجا خدمات پشتيباني بگيرم؟</font></span></H4> <p dir="rtl"><font face="Tahoma">گروه پستي اصلي <A href="mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A> ميباشد. اين گروه براي بحث در مورد موضوعات مختلف در زمينه <span lang="en-us"> PostgreSQL</span> است. براي عضو شدن در اين گروه پستي يك نامه الكترونيكي به آدرس گروه با محتوياتی كه در ادامه آمده است ارسال كنيد. در قسمت <span lang="en-us"> Subject</span> چيزي ننويسيد.</font></p> <div dir="rtl"> <PRE><font face="Tahoma"> subscribe end </font></PRE> </div> <P dir="rtl"><font face="Tahoma">آدرس گروه: <A href="mailto:pgsql-general-request@PostgreSQL.org"> pgsql-general-request@PostgreSQL.org</A></font></P> <P dir="rtl"><font face="Tahoma">همچنين يك گروه پستي هم به صورت ارسال چكيده پيامها وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به این آدرس ارسال كنيد. <A href="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> </font></P> <div dir="rtl"> <PRE><font face="Tahoma"> subscribe end </font></PRE></div> <p dir="rtl"><font face="Tahoma">در اين گروه هر موقع حجم نامهها به 30 كيلوبايت رسيد براي تمام اعضاء ارسال ميشود.</font></p> <p dir="rtl"><font face="Tahoma">گروه پستي بررسي اِشكالات هم وجود دارد. براي عضو شدن در اين گروه يك نامه با محتويات زير به <A href="mailto:pgsql-bugs-request@PostgreSQL.org"> pgsql-bugs-request@PostgreSQL.org</A> ارسال كنيد.</font></p> <div dir="rtl"> <PRE><font face="Tahoma"> subscribe end </font></PRE></div> <P dir="rtl"><font face="Tahoma" size="3">گروه پستي مخصوص توسعه دهندگان (برنامهنويسان) نيز وجوددارد. براي عضويت در اين گروه يك نامه به آدرس زير با محتويات مشخص شده ارسال كنيد. </font><font face="Tahoma"> <A href="mailto:pgsql-hackers-request@PostgreSQL.org"><font size="3">pgsql-hackers-request@PostgreSQL.org</font></A><span lang="en-us"> </span> </font></p> <div dir="rtl"> <PRE><font face="Tahoma"> subscribe end </font></PRE> </div> <p dir="rtl"><font face="Tahoma">گروههاي پستي ديگري نيز در زمينه <span lang="en-us">PostgreSQL</span> وجود دارد كه ميتوانيد در سايت <A href="http://www.postgresql.org/">http://www.postgresql.org</A> ببينيد.</font></p> <p dir="rtl"><font face="Tahoma">همچنين يك كانال <span lang="en-us">IRC</span> روي <span lang="en-us">Freenode</span> و <span lang="en-us">EFNet</span> بنام <I> PostgreSQL<span lang="en-us">#</span> </I> وجود دارد. شما ميتوانيد از فرمان يونيكسي </font> <CODE> <font face="Tahoma">irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</font></CODE><font face="Tahoma"> يا </font> <CODE> <font face="Tahoma">irc -c '#PostgreSQL' "$USER" irc.freenode.net<span lang="en-us"> </span>استفاده كنيد.</font></CODE></p> <p dir="rtl"><font face="Tahoma">ليست شركتهايي كه از طريق آنها ميتوانيد خدمات پشتيباني تجاري در زمينه <span lang="en-us">PostgreSQL</span> دريافت كنيد در اين آدرس <A href="http://techdocs.postgresql.org/companies.php"> http://techdocs.postgresql.org/companies.php</A></font><code><font face="Tahoma"> موجود است.</font></code></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.7>1.7</A>) </font><span lang="fa"><font face="Tahoma"> آخرين نسخه اعلام شده چيست؟</font></span></H4> <p dir="rtl"><font face="Tahoma">آخرين نسخه <span lang="en-us">PostgreSQL</span><span lang="en-us"> </span> كه وجود دارد 7.4.3 است.</font></p> <p dir="rtl"><font face="Tahoma">هدف ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد ارائه شود.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.8>1.8</A>) </font><span lang="fa"><font face="Tahoma"> چه مستندات و راهنمائيهايي وجود دارند؟</font></span></H4> <p dir="rtl"><font face="Tahoma">چندين كتابچه و صفحات راهنما و مثالهاي كوچك همراه با متن اصلي <span lang="en-us">PostgreSQL</span> در شاخه <span lang="en-us">doc </span>وجود دارد. براي ديدن صفحات راهنما ميتوانيد به سايت <A href="http://www.postgresql.org/docs">http://www.PostgreSQL.org/docs</A><span lang="en-us"> </span> نيز مراجعه نماييد.</font></p> <p dir="rtl"><font face="Tahoma">دو كتاب در زمينه <span lang="en-us">PostgreSQL</span><span lang="en-us"> </span> در آدرسهاي <A href="http://www.postgresql.org/docs/awbook.html"> http://www.PostgreSQL.org/docs/awbook.htm</A> و <A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook</A> وجود دارد. ليستي از كتابهايي كه قابل خريد است در آدرس <A href="http://techdocs.postgresql.org/techdocs/bookreviews.php"> http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A><span lang="en-us"> </span>وجود دارد. همچنين ليستي از مقالات فني در مورد <span lang="en-us"> PostgreSQL</span> در آدرس <A href="http://techdocs.postgresql.org/">http://techdocs.PostgreSQL.org</A><span lang="en-us"> </span>وجود دارد.</font></p> <p dir="rtl"><font face="Tahoma">برنامه <span lang="en-us">psql</span> يك دستور <span lang="en-us">d\</span> دارد كه اطلاعاتي در مورد انواع دادههاي قابل تعريف و عملگرها و توابع و ... به ما نشان ميدهد. در سايت اصلي ما اطلاعات بيشتري را ميتوانيد پيدا كنيد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.9>1.9</A>) <span lang="fa">چگونه ميتوانم ازاشكالات شناخته شده و يا امكاناتي كه در اين پايگاه داده وجود ندارد مطلع شوم؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL</span> يك زير مجموعه پيشرفته از <span lang="en-us">SQL-92</span> را پشتيباني ميكند. در ليست <span lang="en-us"> </span><A href="http://developer.postgresql.org/todo.php">TODO</A> اِشكالات شناخته شده يا امكاناتي كه وجود ندارد و يا برنامههاي آينده آمده است.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.10>1.10</A>) </font><span lang="fa"><font face="Tahoma"> چگونه ميتوانم زبان </font></span> <font face="Tahoma">SQL</font><span lang="fa"><font face="Tahoma"> را ياد بگيرم؟</font></span></H4> <p dir="rtl"><font face="Tahoma">كتاب <span lang="en-us">PostgreSQL</span> در آدرس <span lang="en-us">SQL</span> <A href="http://www.postgresql.org/docs/awbook.html"> http://www.PostgreSQL.org/docs/awbook.html</A><span lang="en-us"> </span>را آموزش ميدهد. همچنين يك كتاب در آدرس <A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook </A> وجود دارد. يك راهنماي خيلي خوب هم در سايتهاي <A href="http://www.intermedia.net/support/sql/sqltut.shtm"> http://www.intermedia.net/support/sql/sqltut.shtm</A> و <A href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM</A> و <A href="http://sqlcourse.com/">http://sqlcourse.com</A> در مورد <span lang="en-us">SQL</span> وجود دارد.</font></p> <p dir="rtl"><font face="Tahoma">كتاب ديگري كه ميتوان براي يادگيري <span lang="en-us">SQL</span> از آن استفاده كرد كتاب <span lang="en-us">"SQL</span> را در 21 روز ياد بگيريد، ويرايش دوم<span lang="en-us">" </span>در سايت <A href="http://members.tripod.com/er4ebus/sql/index.htm"> http://members.tripod.com/er4ebus/sql/index.htm</A><span lang="en-us"> </span>ميباشد.</font></p> <p dir="rtl"><font face="Tahoma">تعداد زيادي از كاربران كتاب <span lang="en-us"> The Practical SQL</span> را ترجيح ميدهند. كتاب ديگر <span lang="en-us">The Complete Refrence SQL</span> انتشارات <span lang="en-us">McGraw-Hill</span> ميباشد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.11>1.11</A>) </font><span lang="fa"><font face="Tahoma"> آيا </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> مشكل </font></span><font face="Tahoma">Y2K</font><span lang="fa"><font face="Tahoma"> دارد يا خير؟</font></span></H4> <p dir="rtl"><font face="Tahoma">خير،<span lang="en-us">PostgreSQL</span> با تاريخهاي قبل و بعد از 2000 مشكلي ندارد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.12>1.12</A>) </font><span lang="fa"><font face="Tahoma"> چگونه ميتوانم به تيم برنامه نويس </font></span><font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> ملحق شوم؟</font></span></H4> <p dir="rtl"><font face="Tahoma">ابتدا،آخرين سورس را دونلود كرده و مستندات مربوط به برنامهنويسي <span lang="en-us">PostgreSQL</span> را در سايت مطالعه كنيد. سپس به گروههاي پستي <I>pgsql-patches </I> و <i><span lang="en-us">pgsql-hackers </span> </i>عضو شويد. در مرحله آخر وصلههاي با كيفيت بالا را به <span lang="en-us">pgsql-patches</span> ارسال كنيد.</font></p> <p dir="rtl"><font face="Tahoma">تعداد زيادي از برنامهنويسان وجود دارند كه امتياز انجام تغييرات در <span lang="en-us">cvs</span> را دارند. هر كدام از آنها تعداد زيادي وصله با كيفيت بالا به گروه ارسال كردهاند كه اعتماد گردانندگان <span lang="en-us">PostgreSQL</span> را به دست آوردهاند.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.13>1.13</A>) <span lang="fa">چگونه ميتوانم يك اِشكال را به گروه برنامه نويس اعلام كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">لطفاً صفحه مربوط به اِشكالات <span lang="en-us"> PostgreSQL</span> را در سايت <A href="http://www.postgresql.org/bugs/bugs.php"> http://www.PostgreSQL.org/bugs/bugs.php</A><span lang="en-us"> </span>مشاهده<span lang="en-us"> </span>كنيد. در اين سايت نحوه گزارش و ارسال يك اشكال توضيح داده شده است.</font></p> <p dir="rtl"><font face="Tahoma"><span lang="en-us"> </span>همچنين براي ديدن نسخههاي جديدتر <span lang="en-us">PostgreSQL</span> و يا وجود يك وصله جديد از سايت <A href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</A> بازديد كنيد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=1.14>1.14</A>) </font><span lang="fa"><font face="Tahoma"> وضعيت </font></span> <font face="Tahoma">PostgreSQL</font><span lang="fa"><font face="Tahoma"> در مقايسه با ساير </font></span><font face="Tahoma">DBMS<span lang="fa">ها به چه صورت است؟</span></font></H4> <p dir="rtl"><font face="Tahoma">راههاي مختلفي براي اندازهگيري و مقايسه نرمافزارها وجود دارد كه عبارتند از امكانات، كارايي، قابليت اعتماد، پشتيباني و قيمت</font></p> <DL> <div dir="rtl"> <dl> <dt><b><font face="Tahoma">امكانات</font></b></dt> <dd><font face="Tahoma"><span lang="en-us">PostgreSQL</span> بيشتر امكانات موجود در سيستمهاي پايگاه داده تجاري بزرگ نظير <span lang="en-us"> transactions, subselets, triggers, views, foreign key referential integrity </span>و <span lang="en-us">sophisticated locking</span> را دارد. در <span lang="en-us">PostgreSQL</span> امكاناتي وجود دارد كه پايگاههاي داده ديگر آن را ندارند نظير <span lang="en-us">user-defined types</span>و <span lang="en-us">Inheritance</span>و <span lang="en-us">rules</span>و <span lang="en-us">multi-version concurrency control</span></font></dd> </dl> </div> <DD> <p dir="rtl"> <div dir="rtl"> <b><font face="Tahoma">كارايي</font></b><p><font face="Tahoma"><b> </b>كارايي <span lang="en-us">PostgreSQL</span> در حد بقيه سيستمهاي تجاري و متن باز است. در بعضي موارد سريعتر و در بعضي موارد از آنها كندتر است. در مقايسه با <span lang="en-us">MySQL</span> براي كاربران بيشتر و درخواستهاي پيچيده و بار زياد خواندن/نوشتن سريعتر است. در درخواستهاي ساده<span lang="en-us"> SELECT</span> از <span lang="en-us">MySQL</span> كندتر است. البته <span lang="en-us">MySQL</span> خيلي از امكانات <span lang="en-us"> PostgreSQL</span> كه در بالا به آن اشاره شد را ندارد. هدف اصلي ما امكانات و قابليت اعتماد بالاست در ضمن آنكه تلاش ميكنيم تا كارايي آن نيز بهبود يابد. در آدرس <A href="http://openacs.org/philosophy/why-not-mysql.html"> http://openacs.org/philosophy/why-not-mysql.html</A> يك مقايسه جالب بين <span lang="en-us">MySQL</span> و <span lang="en-us"> PostgreSQL</span> وجود دارد. از طرف ديگر <span lang="en-us">MySQL</span> يك شركت است كه محصول خود را به صورت متن باز ارائه ميكند ولي براي نرمافزار غير متن باز خود احتياج به ليسانس تجاري دارد بر خلاف <span lang="en-us"> PostgreSQL</span> كه يك گروه كاملاً متن باز هستند.</font></div> <DD> <p dir="rtl"> <div dir="rtl"> <dl> <dt><b><font face="Tahoma">قابليت اطمينان</font></b></dt> <dd><font face="Tahoma">ما فكر ميكنيم كه يك سيستم پايگاه دادهاي كه مطمئن نباشد ارزشي ندارد. ما تمام تلاشمان را براي ارائه كدهاي پايداري كه به خوبي تست شده باشند و كمترين اِشكالات را داشته باشند ميكنيم. هر نسخه جديدي كه ارائه ميشود حداقل يك ماه را در مرحله تست بتا ميگذراند. ما بر اين باور هستيم كه قابليت اطمينان <span lang="en-us">PostgreSQL</span> در مقايسه با ساير سيستمهاي پايگاه داده قابل توجه است و نسخههايي كه تاكنون ارائه شده است نشان ميدهد كه ما توانايي ارائه يك سيستم قوي و محكم و مطمئن را كه آماده بهرهبرداري است داريم.</font></dd> </dl> </div> <DD> <div dir="rtl"> <dl> <dt><b><font face="Tahoma">پشتيباني</font></b></dt> <dd><font face="Tahoma">گروههاي پستي ما امكان ارتباط و تماس به گروه بزرگي از برنامه نويسان و كاربران را ميدهد كه ميتوانند در حل مشكلات به ديگران كمك كنند. دسترسي مستقيم به برنامهنويسان و گروههاي كاربران و راهنماها و كداصلي باعث ميشود كه پشتيباني <span lang="en-us">PostgreSQL</span> نسبت به ساير پايگاههاي داده به نحو بهتري انجام شود. همچنين امكان ارائه خدمات پشتيباني به صورت تجاري نيز وجود دارد. براي ديدن اطلاعات بيشتر به <A href="#1.6">FAQ section 1.6</A> مراجعه كنيد.</font></dd> </dl> </div> <DD> <div dir="rtl"> <dl> <dt><b><font face="Tahoma">قيمت</font></b></dt> <dd><font face="Tahoma">هم براي استفاده تجاري و هم غير تجاري هيچ هزينهاي نبايد پرداخت شود. هيچ محدوديتي براي انجام تغييرات در <span lang="en-us"> PostgreSQL</span> توسط استفاده كنندگان وجود ندارد به جز مواردي كه در ليسانس <span lang="en-us">BSD</span> به آن اشاره شده است.</font></dd> </dl> </div> </DL> <H4 dir="rtl"><font face="Tahoma"><A name=1.15>1.15</A>) <span lang="fa">من چگونه ميتوانم از نظر مالي به </span>PostgreSQL<span lang="fa"> كمك كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgreSQL </span> داراي يك ساختار تشكيلاتي درجه اول است كه آن را مديون <span lang="en-us">Marc Fournier</span> است كه اين ساختار را ايجاد كرده است.</font></p> <p dir="rtl"><font face="Tahoma">كيفيت يك ساختار براي يك پروژه متن باز بسيار اهميت دارد. يك ساختار خوب ميتواند مانع از حوادثي شود كه در حركت روبهجلوي پروژه خللي وارد ميكنند.</font></p> <p dir="rtl"><font face="Tahoma">البته اين ساختار تشكيلاتي ارزان نيست. هزينههاي ثابت ماهانه و روزمره براي نگهداري و حفظ اين ساختار مورد نياز است. اگر شما يا شركت شما مايل است كه از نظر مالي به اين حركت كمك كند لطفاً به سايت <A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping</A> مراجعه كرده و كمك خود را اهدا كنيد.</font></p> <p dir="rtl"><font face="Tahoma">هر چند در صفحه اصلي عبارت <span lang="en-us"> PostgreSQL,Inc</span> ذكر شده است ولي مشاركت عمدتاً براي پشتيباني از پروژه <span lang="en-us">PostgreSQL</span> مي باشد و نه براي يك شركت مشخص. اگر ترجيح ميدهيد ميتوانيد يك چك به آدرس مشخص شده ارسال كنيد.</font></p> <p dir="rtl"><font face="Tahoma">اگر يك استفاده موفق از <span lang="en-us"> PostgreSQL</span> سراغ داريد لطفاً آن را به سايت <A href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</A> گزارش دهيد.</font></p> <HR dir="rtl"> <h2 align="center" dir="rtl"><font face="Tahoma"><span lang="fa">سوالات مربوط به استفاده از پايگاه داده</span></font></h2> <H4 dir="rtl"><font face="Tahoma"><A name=2.1>2.1</A>) <span lang="fa">آيا هيچ درايور </span>ODBC</font><span lang="fa"><font face="Tahoma"> براي </font></span><font face="Tahoma">PostgreSQL<span lang="fa"> وجود دارد؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">دو درايور </span>ODBC<span lang="fa"> بنامهاي </span>psqlODBC<span lang="fa"> و </span>OpenLink<span lang="fa"> براي </span>PostgreSQL<span lang="fa"> وجود دارد.</span></font></p> <p dir="rtl"><font face="Tahoma"><span lang="fa">براي گرفتن </span>psqlODBC<span lang="fa"> به سايت </span> <A href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A><span lang="fa"> مراجعه كنيد.</span></font></p> <p dir="rtl"><font face="Tahoma"><span lang="en-us">OpenLlink</span> را از اين سايت <A href="http://www.openlinksw.com/">http://www.openlinksw.com</A> ميتوانيد بگيريد. اين درايور با نرمافزارهاي مختلف <span lang="en-us">ODBC</span> كار ميكند بنابراين شما قادر خواهيد بود با استفاده از <span lang="en-us">OpenLink</span> روي اكثر سكوهايي كه نرمافزار<span lang="en-us">ODBC</span>دارند بدون مشكل به <span lang="en-us">PostgreSQL</span> نيز متصل شويد.</font></p> <p dir="rtl"><font face="Tahoma">اين محصول به كساني كه احتياج به خدمات پشتيباني تجاري دارند فروخته ميشود. ولي نسخه آزاد اين نرمافزار هميشه در درسترس ميباشد. براي كسب اطلاعات بيشتر سوالات خود را به آدرس <A href="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A><span lang="en-us"> </span>ارسال نماييد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=2.2>2.2</A>) <span lang="fa">چه ابزارهايي براي استفاده از </span>PostgreSQL<span lang="fa"> با صفحات وب وجود دارد؟</span></font></H4> <p dir="rtl"><font face="Tahoma">در سايت <A href="http://www.webreview.com/">http://www.webreview.com</A> براي استفاده از <span lang="en-us">PostgreSQL</span> در صفحات وب راهنماييهاي خوبي وجود دارد.</font></p> <P dir="rtl"><font face="Tahoma">براي تركيب و استفاده در صفحات وب زبان <span lang="en-us">PHP</span> يك واسط بسيار مناسب است. اطلاعات بيشتر راجع به <span lang="en-us">PHP</span>در سايت <A href="http://www.php.net/">http://www.php.net</A><span lang="en-us"> </span>وجود دارد.</font></P> <P dir="rtl"><font face="Tahoma">مثالهايي نيز با استفاده از <span lang="en-us"> Perl</span> و<span lang="en-us"> CGI.pm</span> و <span lang="en-us">mod_perl</span> وجود دارد.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=2.3>2.3</A>) <span lang="fa">آيا </span>PostgreSQL<span lang="fa"> يك واسط كاربري گرافيكي دارد؟</span></font></H4> <p dir="rtl"><font face="Tahoma">چند نرم افزار گرافيكي براي <span lang="en-us"> PostgreSQL</span> وجود دارد كه شامل <span lang="en-us">pgAccess</span> درسايت <A href="http://www.pgaccess.org/">http://www.pgaccess.org</A><span lang="en-us"> </span>و <span lang="en-us">pgAdmin III</span> در سايت <A href="http://www.pgadmin.org/">http://www.pgadmin.org</A><span lang="en-us"> </span>و <span lang="en-us">RHDB Admin</span> در سايت <A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb</A><span lang="en-us"> </span>و <span lang="en-us">Rekall</span> در سايت <A href="http://www.thekompany.com/products/rekall/"> http://www.thekompany.com/products/rekall<span lang="en-us"> </span></A> ميباشد. همچنين يك <span lang="en-us">phpPgAdmin</span> هم در سايت <A href="http://phppgadmin.sourceforge.net/"> http://phppgadmin.sourceforge.net</A><span lang="en-us"> </span>وجود دارد كه يك واسط وبي براي مديريت <span lang="en-us">PostgreSQL</span> ميباشد.</font></p> <P dir="rtl"><font face="Tahoma">براي ديدن اطلاعات بيشتر راجع به نرمافزارهاي گرافيكي براي <span lang="en-us">PostgreSQL</span> به آدرس <A href="http://techdocs.postgresql.org/guides/GUITools"> http://techdocs.postgresql.org/guides/GUITools</A><span lang="en-us"> </span>مراجعه كنيد.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=2.4>2.4</A>) <span lang="fa">با چه زبانهاي برنامهنويسي ميتوان با </span>PostgreSQL<span lang="fa"> ارتباط برقرار كرد؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">بيشتر زبانهاي برنامهنويسي ميتوانند با </span>PostgreSQL<span lang="fa"> ارتباط برقرار كنند. به همراه سورس </span>PostgreSQL<span lang="fa"> تعدادي از واسطهاي مورد نياز براي ارتباط با پايگاه داده از طريق زبانهاي مختلف آمده است كه در زير ليست آنها را مشاهده ميكنيد.</span></font></p> <ul dir="rtl"> <li dir="ltr"> <p dir="ltr" align="left"><font face="Tahoma">C (libpq) </font></li> <li dir="ltr"> <p dir="ltr" align="left"><font face="Tahoma">Embedded C (ecpg) </font> </li> <li dir="ltr"> <p dir="ltr" align="left"><font face="Tahoma">Java (jdbc) </font></li> <li dir="ltr"> <p dir="ltr" align="left"><font face="Tahoma">Python (PyGreSQL) </font> </li> <li dir="ltr"> <p dir="ltr" align="left"><font face="Tahoma">TCL (libpgtcl) </font></li> </ul> <p dir="rtl" align="right"><span lang="fa"><font face="Tahoma">واسطهاي ديگر در سايت </font></span><font face="Tahoma"> <A href="http://gborg.postgresql.org/">http://gborg.postgresql.org</A> <span lang="fa">در قسمت </span><i>Drivers/Interfaces</i><span lang="fa"> وجود دارد.</span></font></p> <HR dir="rtl"> <h2 align="center" dir="rtl"><span lang="fa"><font face="Tahoma">سوالات مديريتي</font></span></h2> <H4 dir="rtl"><font face="Tahoma"><A name=3.1>3.1</A>) <span lang="fa">چگونه ميتوانم </span>PostgreSQL<span lang="fa"> را در شاخهاي غير از </span>/usr/local/pgsql/<span lang="fa"> نصب كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">موقع اجراي دستور <i><span lang="en-us"> configure</span> </i>از گزينه <span lang="en-us">prefix--</span> استفاده كنيد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.2>3.2</A>) <span lang="fa">چرا موقعي كه من برنامه </span>postmaster<span lang="fa"> را اجرا مي كنم پيام </span>Bad system call<span lang="fa"> و يا </span>core dump <span lang="fa">ميگيرم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">به دلايل مختلف ممكن است اين اتفاق بيفتد. اما در قدم اول شما مطمئن شويد كه كه امكانات اضافه <span lang="en-us">System V</span> در كرنل شما نصب شده باشد. <span lang="en-us">PostgreSQL</span> براي اجرا شدن نياز به استفاده از امكانات حافظه مشترك و سمافورها دارد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.3>3.3</A>) <span lang="fa">چرا موقعي كه من سعي ميكنم برنامه </span>postmaster<span lang="fa"> را اجرا كنم خطاي</span> <I>IpcMemoryCreate</I> <span lang="fa">ميگيرم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">احتمالاً قسمت ايجاد حافظه مشترك در كرنل به درستي تنظيم نشده است و يا اينكه بايد فضاي حافظه اشتراكي در كرنل را زياد كرد. ميزان دقيق حافظه مشترك مورد نياز بسته به معماري و نحوه استفاده از بافرها توسط برنامه <span lang="en-us"><i>postmaster </i></span>دارد. براي بيشتر سيستمها كه با تنظيمات پيشفرض كار ميكنند مقدار اين حافظه حدود <span lang="en-us">1</span> مگابايت است. براي ديدن اطلاعات بيشتر راجع به حافظه مشترك و سمافور به <A href="http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html"> PostgreSQL Administrator's Guide</A><span lang="en-us"> </span>مراجعه كنيد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.4>3.4</A>) <span lang="fa">چرا موقعي كه من سعي ميكنم برنامه </span>postmaster<span lang="fa"> را اجرا كنم خطاي</span> <I><span lang="fa"> </span>IpcSemaphoreCreate<span lang="fa"> </span></I><span lang="fa">ميگيرم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">اگر پيغام خطا<span lang="en-us"> </span><i> (pcSemaphoreCreate: semget failed (No space left on devi<span lang="en-us">ce </span> </i>باشد به اين معني است كه تعداد سمافورهاي تنظيم شده در كرنل كافي نيست. <span lang="en-us"> PostgreSQL</span> براي هر فرايندي كه در <span lang="en-us">backend</span> اجرا ميشود به يك سمافور نياز دارد. يك راه حل موقت براي اين مسئله آن است كه <i><span lang="en-us">postmaster</span> </i>را با اعمال محدوديت روي تعداد فرايندهايي كه ميتواند ايجاد كند اجرا كنيم. براي اينكار از گزينه <span lang="en-us">N-</span> و يك عدد كمتر از 32 استفاده كنيد. راه حل دائمي اين مشكل آن است كه پارامترهاي <span lang="en-us">SEMMNS, SEMMNI</span> كرنل را افزايش دهيم.</font></p> <P dir="rtl"><font face="Tahoma">در زمان دسترسي خيلي زياد به پايگاه داده، سمافورهاي نامعتبر ميتوانند باعث <span lang="en-us">crash</span> كردن سيستم شوند.</font></P> <P dir="rtl"><font face="Tahoma">اگر پيغام خطا چيز ديگري باشد احتمالاً به دليل آن است كه كرنل از سمافورها پشتيباني نميكند. براي ديدن اطلاعات بيشتر راهنماي مديريتي <span lang="en-us">PostgreSQL</span> را مطالعه كنيد.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=3.5>3.5</A>) <span lang="fa">چگونه ميتوانم اتصالات ساير ماشينها را كنترل كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">به صورت پيش فرض فقط از ماشيني كه <span lang="en-us">PostgreSQL </span>روي آن در حال اجراست ميتوان با استفاده از سوكتهاي يونيكسي به آن متصل شد. ساير ماشينها قادر نيستند به <span lang="en-us"> PostgreSQL</span> متصل شوند مگر آنكه گزينه <span lang="en-us">tcp_sockets</span> در فايل <span lang="en-us">postgresql.conf</span> فعال شده و همچنين با اصلاح فايل <span lang="en-us">PGDATA/ph_hba.conf</span> هويتشناسي مبتني بر ميزبان نيز فعال شود. با اين كار ميتوان اتصالات <span lang="en-us">TCP/IP</span> به <span lang="en-us">PostgreSQL</span> ايجاد كرد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.6>3.6</A>) <span lang="fa">براي كارايي بالاتر و بهتر پايگاه داده من چه تنظيماتي را بايد انجام دهم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">به طور حتم استفاده از انديسها باعث بالا رفتن سرعت پاسخگويي به درخواستها خواهد شد. دستور <span lang="en-us">EXPLAIN ANALYZE</span> به شما امكان ديدن نحوه پردازش يك دستور توسط <span lang="en-us">PostgreSQL</span> را ميدهد.</font></p> <p dir="rtl"><font face="Tahoma">اگر شما تعداد زيادي<span lang="en-us"> INSERT</span> داريد سعي كنيد آنها را با قرار دادن در يك فايل با دستور <span lang="en-us">COPY</span> اجرا كنيد. اين دستور به مراتب از <span lang="en-us">INSERT</span> سريعتر است. حتيالامكان سعي كنيد از تراكنشها استفاده نكنيد. تراكنشها مجموعه دستوراتي هستند كه بيند <span lang="en-us">BEGIN</span> و <span lang="en-us">COMMIT</span> ميآيند. اگر يك دستور به صورت عادي اجرا شود <span lang="en-us">PostgreSQL</span> خود آن دستور را به صورت يك تراكنش مستقل نگاه كرده و اجرا ميكند. موقعی كه تغييرات زيادي در پايگاه داده انجام ميشود انديسهاي قبلي را حذف و مجدداً ايجاد كنيد.</font></p> <p dir="rtl"><font face="Tahoma">استفاده از گزينه <span lang="en-us">o -F-</span> در فرمان <i><span lang="en-us">postmaster</span></i> باعث غير فعال كردن <span lang="en-us">()fsync</span> ميشود. اين دستور بعد از هر تراكنش اطلاعات را روي هاردديسك منتقل ميكند.</font></p> <p dir="rtl"><font face="Tahoma">براي افزايش تعداد بافرهاي حافظه اشتراكي از گزينه <span lang="en-us">B-</span> به همراه فرمان <i><span lang="en-us"> postmaster</span></i> استفاده كنيد. توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن است <i><span lang="en-us">postmaster</span></i> اصلاً اجرا نشود. هر بافر 8 كيلو بايت حافظه نياز دارد و تعداد بافرها به طور پيش فرض 64 است.</font></p> <p dir="rtl"><font face="Tahoma">همچنين ميتوان با گزينه <span lang="en-us">S-</span> ميزان حافظهاي كه براي مرتبسازيهاي موقت توسط <span lang="en-us">PostgreSQL</span> استفاده ميشود را افزايش داد. مقدار پيش فرض 512 كيلو بايت است.</font></p> <p dir="rtl"><font face="Tahoma">استفاده از دستور <span lang="en-us">CLUSTER</span> نيز براي بالا بردن كارايي موثر ا ست. دستور راهنماي <span lang="en-us">CLUSTER</span> اطلاعات بيشتري در اين زمينه به شما ميدهد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.7>3.7</A>) <span lang="fa">چه امكاناتي براي پيدا كردن اشكال وجود دارد؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="en-us">PostgerSQL</span> امكانات مختلفي براي گزارش دادن وضعيت خود دارد كه براي اشكال زدايي ميتوان از آنها استفاده كرد.</font></p> <P dir="rtl"><font face="Tahoma">با استفاده از گزينه <span lang="en-us"> enable-assert--</span> تعداد زيادي <span lang="en-us">()assert</span> براي مونيتور كردن و توقف برنامه در صورت بروز خطاهاي ناخواسته فعال ميشود.</font></P> <P dir="rtl"><font face="Tahoma">هم <i><span lang="en-us">Postmaster</span></i> و هم <i><span lang="en-us">postgres</span></i> گزينههاي زيادي براي اشكال زدايي دارند. موقعي كه <i><span lang="en-us">postmaster</span></i> را اجرا ميكنيد خروجي استاندارد و خطا را سمت فايل <span lang="en-us">log</span> ارسال كنيد.</font></P> <div dir="ltr"> <PRE><font face="Tahoma"> cd /usr/local/pgsql ./bin/postmaster >server.log 2>&1 & </font></PRE> </div> <P dir="rtl"><font face="Tahoma">اين كار يك فايل<span lang="en-us"> log</span> در بالاترين شاخه <span lang="en-us">PostgreSQL</span> ايجاد ميكند. اين فايل حاوي اطلاعات مفيدي در مورد مسائل و خطاهايي است كه براي سرور اتفاق افتاده است. براي ديدن جزئيات بيشتر ميتوان از <span lang="en-us">d-</span> به همراه فرمان <i><span lang="en-us">postmaster</span></i> استفاده كرد. گزينه <span lang="en-us">d-</span> همچنين يك عدد ميگيرد كه نشان دهنده سطح جزئياتي است كه در <span lang="en-us">Log</span>فايل نوشته ميشود. با بالابردن اين عدد حجم اطلاعات توليد شده در <span lang="en-us">Log</span>فايل نيز افزايش مييابد.</font></P> <P dir="rtl"><font face="Tahoma">اگر <i><span lang="en-us">postmaster</span></i> در حال اجرا نباشد، ميتوانيم <span lang="en-us">postgres</span> را به طور مستقيم از خط فرمان اجرا كرده و دستورات <span lang="en-us">SQL</span> را به آن بدهيم. اين كار فقط براي اشكاليابي توصيه ميشود. توجه كنيد كه در اين حالت يك دستور با كاراكتر <span lang="en-us">newline</span> خاتمه پيدا ميكند و نه با <span lang="en-us">;. </span>اگر <span lang="en-us">postmaster</span> را با امكانات اشكاليابي كامپيل كرده باشيد ميتوانيد با استفاده از يك برنامه اشكالياب اجراي برنامه را مونيتور كنيد. </font></P> <P dir="rtl"><font face="Tahoma">اگر <i><span lang="en-us">postmaster</span></i> در حال اجرا باشد با دستور <span lang="en-us">psql</span> ميتوان به <span lang="en-us">postgres</span> متصل شد. با پيدا كردن <span lang="en-us">PID</span> فرايند <span lang="en-us">postgres</span> كه <span lang="en-us">psql</span> به آن متصل شده است ميتوان آن را مونيتور كرد. براي اينكار بايد يك برنامه اشكالياب را به آن <span lang="en-us">pid</span> متصل كرد. اگر بخواهيم بالا آمدن <span lang="en-us">postgres</span> را مونيتور كنيم كافي است<span lang="en-us"> "PGOPTIONS="-W</span> <span lang="en-us">n</span> و <span lang="en-us">psql</span> را اجرا كنيم. اين كار باعث ميشود كه <span lang="en-us">postgres</span> با <span lang="en-us">n</span> ثانيه تاخير اجرا شود و در اين فاصله شما ميتوانيد برنامه اشكالياب را به آن متصل كرده و با قرار دادن يك نقطه توقف روند اجراي آن را مونيتور كنيد.</font></P> <P dir="rtl"><font face="Tahoma"><i><span lang="en-us">postgres</span></i> گزينههاي <span lang="en-us">s-</span> و <span lang="en-us">A-</span> و <span lang="en-us">t-</span> دارد كه براي پيدا كردن اشكالات بسيار مناسب هستند.</font></P> <p dir="rtl"><font face="Tahoma">شما ميتوانيد <span lang="en-us">postgreSQL</span> را با امكانات <span lang="en-us">profiling</span> كامپيل كنيد. اين كار باعث ميشود كه زمان اجراي دقيق هر تابع در برنامه مشخص شود. خروجيهاي توليد شده در اين حالت در فايل <span lang="en-us">DLINUX_PROFILE.</span> ريخته ميشود.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.8>3.8</A>) <span lang="fa">چرا موقعي كه من ميخواهم به پايگاه داده وصل شوم پيام</span> <I> "Sorry, too many clients" <span lang="fa"></span></I><span lang="fa">ميگيرم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">شما بايد حداكثر تعداد فرايندهاي همزمان <i> <span lang="en-us">postmaster</span></i> را افزايش دهيد. مقدار پيش فرض 32 است. براي افزايش آن ميتوان از گزينه <span lang="en-us">N-</span> استفاده كرد و يا فايل <i><span lang="en-us">postgresql.conf</span></i> را اصلاح نمود</font></p> <p dir="rtl"><font face="Tahoma">توجه كنيد كه اگر <span lang="en-us">N-</span> مقداري بيشتر از 32 داشته باشد بايد مقدار <span lang="en-us">B-</span> را نيز افزايش دهيم. اين مقدار بايد حداقل دو برابر مقدار <span lang="en-us">N-</span> باشد. براي اعداد خيلي بالا بايد بعضي از پارامترهاي كرنل را نيز اصلاح كرد. پارامترهايي نظير حداكثر اندازه حافظه اشتراكي <span lang="en-us">SHMMAX</span> ، حداكثر تعداد سمافورها<span lang="en-us"> SEMMNI</span> و <span lang="en-us"> SEMMNS </span>، حداكثر تعداد فرايندها <span lang="en-us">NPROC</span>، حداكثر فرايندهاي يك كاربر <span lang="en-us">MAXUPRC</span> و حداكثر فايلهاي باز <span lang="en-us">NFILE</span> و <span lang="en-us">NINODE. </span>يكي از دلايلي كه تعداد اتصالات همزمان <span lang="en-us">postgreSQL</span> محدود است آن است كه نيازهاي <span lang="en-us">PostgreSQL</span> بيش از منابع موجود سيستم نباشد.</font></p> <H4 dir="rtl"><font face="Tahoma"><A name=3.9>3.9</A>) <span lang="fa"> در شاخه </span> <I>pgsql_tmp</I> <span lang="fa"> چه چيزي قرار دارد؟</span></font></H4> <p dir="rtl"><font face="Tahoma">دراين شاخه فايلهاي موقتي قرار دارد كه با اجراي درخواستها به وجود آمده است. به عنوان مثال اگر براي اجراي دستور <span lang="en-us">order by</span> نياز به انجام مرتب سازي باشد و در صورتي كه حافظه مشخص شده با گزينه <span lang="en-us">S-</span> براي اينكار كافي نباشد سيستم يك فايل موقت در اين شاخه ايجاد ميكند تا عمل مرتب سازي را انجام دهد.</font></p> <P dir="rtl"><font face="Tahoma">فايلهاي موقت معمولاً به صورت اتوماتيك پاك ميشود اما اگر <span lang="en-us">postgreSQL</span> در حين مرتب سازي <span lang="en-us">crash</span> كند آن فايلها باقي ميمانند. با <span lang="en-us">stop</span> و <span lang="en-us">start</span> كردن برنامه <i> <span lang="en-us">postmaster</span></i> اين فايلها پاك ميشوند.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=3.10>3.10</A>) <span lang="fa">چرا براي به روز كردن نسخه پايگاه داده من بايد كل داده ها را </span>dump<span lang="fa"> و مجدداً </span>restore<span lang="fa"> كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">تيم برنامه نويس <span lang="en-us">postgreSQL</span> در نسخههاي ارائه شده كه فقط <span lang="en-us">minor</span> آنها متفاوت است فقط تغييرات كوچكي اعمال ميكنند؛ بنابراين براي به روز كردن از نسخه <span lang="en-us">7.2</span>به 7.2.1<span lang="en-us"> </span>نيازي به <span lang="en-us">dump</span> و <span lang="en-us">restore</span> نيست. اما در نسخههايي كه <span lang="en-us">major</span> آنها تغيير ميكند غالباً ساختار داخلي جداول و فايلهاي داده تغيير ميكند. اين تغييرات معمولاً پيچيده هستند. براي انتقال دادههاي موجود در پايگاه داده در اين حالت بايد از <span lang="en-us"> dump</span> و <span lang="en-us">restore</span> استفاده كرد.</font></p> <P dir="rtl"><font face="Tahoma">در نسخههايي كه ساختار روي ديسك تغييري نميكند مي توان از برنامه <span lang="en-us">pg_upgrade</span> براي به روز كردن پايگاه داده استفاده كرد بدون اينكه نيازي به استفاده از <span lang="en-us">dump</span> و <span lang="en-us">restore </span> باشد. در يادداشتي كه به همراه هر توزيع ميآيد ذكر شده است كه آيا برنامه <span lang="en-us">pg_upgrade</span> براي اين توزيع وجود دارد يا خير.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=3.11>3.11</A>) <span lang="fa">از چه سخت افزاري بايد استفاده كنم؟</span><BR> </font></H4> <P dir="rtl"><font face="Tahoma">چون اكثر سختافزارهاي <span lang="en-us">PC </span> سازگار هستند مردم فكر ميكنند كه كيفيت آنها نيز يكسان است. در حاليكه اينطور نيست. استفاده از هاردهاي <span lang="en-us">SCSI</span> و حافظههاي <span lang="en-us"> ECC</span> و مادربردهاي با كيفيت بالا نسبت به سخت افزارهاي ارزانتر نتايج بهتري از نظر كارايي و پايداري سيستم بهمراه خواهد داشت.<span lang="en-us"> PostgreSQL</span> روي بيشتر سخت افزارها اجرا ميشود اما اگر كارايي و اطمينان فاكتورهاي مهمي هستند بايد سخت افزار مناسب استفاده شود. در گروههاي پستي در مورد سخت افزار مناسب و انتخاب آن بحث شده است. </font></P> <HR dir="rtl"> <H2 align=center dir="rtl"><span lang="fa"><font face="Tahoma">سوالات عملياتي</font></span></H2> <H4 dir="rtl"><font face="Tahoma"><A name=4.1>4.1</A>) تفاوت بين <span lang="en-us">binary cursors</span> و <span lang="en-us">Normal cursors</span> چيست؟</font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>DECLARE<span lang="fa"> را مطالعه كنيد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.2>4.2</A>) <span lang="fa">من چگونه ميتوانم فقط روي چند رديف اول يا يك رديف تصادفي درخواست </span> SELECT<span lang="fa"> بزنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>FETCH <span lang="fa"> يا </span>SELECT...LIMIT<span lang="fa"> را ببينيد.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">در واقع كل درخواست بايد بررسي و ارزيابي شود حتي اگر شما فقط چند رديف اول را بخواهيد. براي مثال درخواست </span> ORDER BY<span lang="fa"> را در نظر بگيريد. اگر انديس يا نمايهاي براي </span> ORDER BY<span lang="fa"> وجود داشته باشد،</span>postgreSQL<span lang="fa"> ممكن است بتواند فقط چند سطر اول درخواستي را ارزيابي كند و يا اينكه كل درخواست پردازش شود تا تعداد رديفهاي درخواستي توليد شود.</span></font></P> <P dir="rtl"><span lang="fa"><font face="Tahoma">براي انتخاب يك سطر تصادفي به روش زير عمل ميكنيم:</font></span><div dir="ltr"> <PRE><font face="Tahoma"> SELECT col FROM tab ORDER BY random() LIMIT 1; </font></PRE> </div> <H4 dir="rtl"><font face="Tahoma"><A name=4.3>4.3</A>) <span lang="fa">من چگونه ميتوانم ليستي از جداول يا ساير چيزهايي كه در </span> psql<span lang="fa"> وجود دارد را ببينم؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن ليست جداول دستور </span>dt\<span lang="fa"> را در برنامه </span><i>psql</i><span lang="fa"><i></i> استفاده كنيد. براي ديدن ليست كامل فرمانها </span>?\<span lang="fa"> را اجرا كنيد. راه ديگر خواندن متن برنامه </span>psql<span lang="fa"> است كه در شاخه </span> <I>pgsql/src/bin/psql/describe.c <span lang="fa"></span></I><span lang="fa">قرار دارد.<I> </I>اين فايل حاوي فرامين </span>SQL<span lang="fa">يي است كه خروجي را براي دستوراتي كه با </span>\<span lang="fa">در </span>psql<span lang="fa"> شروع ميشوند توليد ميكنند. راه ديگر اجراي </span>psql<span lang="fa"> با گزينه </span>E-<span lang="fa">است. اينكار باعث ميشود كه </span>psql<span lang="fa"> قبل از اجرا هر دستور </span>SQL<span lang="fa">متناظر آن را نشان دهد. </span> PostgreSQL<span lang="fa">همچنين يك برنامه </span>SQLi<span lang="fa"> دارد كه ميتوان با استفاده از آن اطلاعات داخلي پايگاه داده را استخراج كرد.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.4>4.4</A>) <span lang="fa">چگونه يك ستون جدول را حذف ميكنيد؟ چگونه نوع داده آن را عوض كنيم؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">حذف يك ستون در توزيع </span>7.3 <span lang="fa">با استفاده از دستور </span>ALTER TABLE DROP COLUMN<span lang="fa"> اضافه شده است. در نسخههاي قبلي به روش زير عمل كنيد:</span></font></P> <div dir="ltr"> <PRE><font face="Tahoma"> BEGIN; LOCK TABLE old_table; SELECT ... -- <span lang="fa">تمام ستونها غير از ستوني كه ميخواهيد آن را حذف كنيد را در اينجا بياوريد</span> INTO TABLE new_table FROM old_table; DROP TABLE old_table; ALTER TABLE new_table RENAME TO old_table; COMMIT; </font></PRE> </div> <P dir="rtl"><span lang="fa"><font face="Tahoma">براي عوض كردن نوع داده يك ستون به روش زير عمل كنيد:</font></span></P> <div dir="ltr"> <PRE><font face="Tahoma"> BEGIN; ALTER TABLE tab ADD COLUMN new_col <I>new_data_type</I>; UPDATE tab SET new_col = CAST(old_col AS <I>new_data_type</I>); ALTER TABLE tab DROP COLUMN old_col; COMMIT; </font></PRE> </div> <H4 dir="rtl"><font face="Tahoma"><A name=4.5>4.5</A>) <span lang="fa">حداكثر اندازه يك رديف، جدول و خود پايگاه داده چقدر است؟</span></font></H4> <p dir="rtl"><span lang="fa"><font face="Tahoma">محدوديتها عبارتند از:</font></span></p> <div dir="rtl"> <PRE><font face="Tahoma"> <span lang="fa">حداكثر اندازه پايگاه داده </span> <span lang="fa">نامحدود (تا 32 ترابايت وجود دارد)</span> <span lang="fa">حداكثر اندازه يك جدول</span> <span lang="fa">32 ترابايت</span> <span lang="fa">حداكثر ا ندازه يك رديف</span> <span lang="fa">1.6 ترابايت</span> <span lang="fa">حداكثر اندازه يك فيلد</span> <span lang="fa">1 گيگا بايت</span> <span lang="fa">حداكثر اندازه رديفهاي يك جدول</span> <span lang="fa"> نا محدود</span> <span lang="fa">حداكثر ستونهاي يك جدول</span> <span lang="fa"> بسته به نوع جدول بين 250 تا 6000 </span> <span lang="fa">حداكثر انديسهاي يك جدول نا محدود</span> </font></PRE></div> <p dir="rtl"><span lang="fa"><font face="Tahoma">البته در حالت نامحدود نيز ما محدود به حجم هاردديسك و فضاي حافظه خواهيم بود. در صورتي که مقادير مشخص شده به عنوان نامحدود به صورت غير معمولي بزرك شوند كارايي سيستم كاهش خواهد يافت.</font></span></p> <P dir="rtl"><span lang="fa"><font face="Tahoma">براي ذخيره كردن جداول با اندازه خيلي بزرگ نيازي نيست كه سيستم عامل امكان ايجاد فايلهاي بزرگ را داشته باشد. بلكه جداول خيلي بزرگ به صورت فايلهايي به حجم يك گيگا بايت نگاهداري ميشوند.</font></span></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت قرار دهيم حداكثر اندازه جدول و حداكثر تعداد ستونها 4 برابر خواهد شد.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.6>4.6</A>) <span lang="fa">چقدر فضاي ديسك سخت براي ذخيره كردن دادههاي يك فايل متني مورد نياز است؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">يك پايگاه داده </span> PostgreSQL<span lang="fa"> تا 5 برابر فضايي روي هاردديسك براي نگاهداري يك فايل متني نياز دارد.</span></font></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">به عنوان مثال يك فايل با 100000 خط را در نظر بگيريد كه در هر خط يك عدد صحيح و يك توضيح متني آمده است. فرض كنيد كه رشته متني به طور متوسط 20 بايت باشد. اندازه فايل برابر 2.8 مگا بايت خواهد بود ولي </span>PostgreSQL<span lang="fa"> براي نگاهداري اين فايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.</span></font></P> <div dir="rtl"> <PRE><font face="Tahoma"> 32 bytes: <span lang="fa">اندازه سرايند هر خط به طور تقريبي</span> 24 bytes: <span lang="fa">يك عدد صحيح و يك رشته 24 بايتي</span> + 4 bytes: <span lang="fa">اشاره گر روي صفحه به يك چندتايي</span> ---------------------------------------- 60 bytes <span lang="fa">در هر رديف</span> <span lang="fa">اندازه صفحات داده در </span>PostgreSQL<span lang="fa"> برابر با 8 كيلو بايت است</span> 8192 <span lang="fa">تعداد بايتها در هر صفحه</span> ------------------- = 136 <span lang="fa">تعداد رديفها در يك صفحه پايگاه داده</span> 60 <span lang="fa"> تعداد بايتهاي هر رديف</span> 100000 <span lang="fa"> تعداد رديفها</span> -------------------- = <span lang="fa">تعدادصفحات پايگاه داده</span> 128 <span lang="fa">تعداد رديفها در هر صفحه</span> 735 <span lang="fa">تعداد صفحات</span> * 8192 <span lang="fa">تعداد بايتهاي هر صفحه</span> = 6,021,120 <span lang="fa">مگا بايت</span> </font></PRE> </div> <P dir="rtl"><span lang="fa"><font face="Tahoma">سربار انديسها يا نمايهها از اين مقدار كمتر است ولي چون شامل خود دادهها هم هست </font></span> <font face="Tahoma">م<span lang="fa">مکن است اندازه آنها هم بزرگ شود</span>.</font></P> <p dir="rtl"><font face="Tahoma">NULL<span lang="fa">ها به صورت </span>bitmap<span lang="fa"> ذخيره ميشوند و از اينرو فضاي بسيار كمي را اشغال ميكنند.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.7>4.7</A>) <span lang="fa">چگونه ميتوانم بفهمم كه چه كاربران، پايگاه داده، نمايه و جداولي در سيستم تعريف شده است؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><i>psql<span lang="fa"> </span></i> <span lang="fa">تعداد زيادي دستور دارد كه با </span>\<span lang="fa"> شروع ميشوند و اين اطلاعات را در اختيار ما قرار ميدهند. براي ديدن آنها دستور </span> ?\ <span lang="fa"> را اجرا كنيد. همچنين جداول سيستمي كه با نام آنها </span>pg<span lang="fa">_</span> <span lang="fa">شروع ميشود نيز اين اطلاعات را در خود دارند. اجراي برنامه </span>psql<span lang="fa"> با گزينه </span>l- <span lang="fa"> نيز باعث نشان دادن ليست تمام پايگاههاي داده ميشود.</span></font></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">همچنين فايل </span> <I> pgsql/src/tutorial/syscat.source<span lang="fa"> </span></I><span lang="fa">نيز فرمانهاي </span>SELECT<span lang="fa"> كه با استفاده از آن ميتوان اطلاعات پايگاه داده را استخراج كرد شرح داده است.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.8>4.8</A>) <span lang="fa">چرا درخواستهاي من كند اجرا ميشوند يا چرا از نمايه ها استفاده نميكنند؟</span></font></H4> <p dir="rtl"><span lang="fa"><font face="Tahoma">به طور معمول </font></span> <font face="Tahoma"><span lang="fa">براي درخواستها از نمايهها استفاده نميشود. تنها در صورتي از نمايهها استفاده ميشود كه اندازه جدول از يك اندازه حداقل بزرگتر باشد و درخواست هم فقط قسمتي از رديفهاي جدول را انتخاب كرده باشد. دليل اين كار آن است كه دسترسيهاي تصادفي به هاردديسك كه به خاطر نمايهها ايجاد ميشود ممكن است از خواندن مستقيم جدول يا خواندن ترتيبي ركوردها كندتر باشد.</span></font></p> <p dir="rtl"><font face="Tahoma"><span lang="fa">براي تعيين اينكه از نمايه استفاده شود يا خير، </span>PostgreSQL<span lang="fa"> بايد اطلاعات آماري را در مورد يك جدول بداند. اين اطلاعات توسط دستور </span>ANALYZE<span lang="fa"> و </span>VACUUM ANALYZE<span lang="fa"> به دست ميآيد. با استفاده از اين اطلاعات، بهينه ساز از تعداد رديفهاي يك جدول اطلاع پيدا ميكند و بهتر ميتواند تعيين كند كه آيا از نمايه استفاده شود يا خير. اطلاعات آماري همچنين براي تعيين ترتيب الحاق و روشهاي الحاق به صورت بهينه نيز كاربر دارد. جمع آوري اطلاعات آماري بايد به صورت دورهاي همزمان با تغيير دادههاي جدول انجام شود.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">نمايهها به طور معمول همراه با دستور </span>ORDER BY<span lang="fa"> به كار برده نميشوند. براي يك جدول بزرگ يك پيمايش ترتيبي همراه با دستور مرتب سازي از به كار بردن نمايهها سريعتر خواهد بود.</span></font></P> <p dir="rtl"><font face="Tahoma"><span lang="fa">اما اگر همراه با </span>ORDER BY<span lang="fa"> از </span>LIMIT<span lang="fa"> استفاده شود اغلب از نمايهها استفاده ميشود چون فقط قسمتي از جدول استفاده ميشود. در حقيقت هر چند</span> <span lang="fa">توابع ()</span>MIN<span lang="fa"> و </span>()MAX <span lang="fa">از نمايهها استفاده نميكنند ولي ميتوانيم با استفاده از دستور زير با استفاده از نمايهها و دستور </span>ORDER BY<span lang="fa"> و </span> LIMIT<span lang="fa"> آنها را به دست آوريم.</span></font></p> <div dir="ltr"> <PRE><font face="Tahoma"> SELECT col FROM tab ORDER BY col [ DESC ] LIMIT 1; </font></PRE> </div> <P dir="rtl"><font face="Tahoma"><span lang="fa">اگر شما فكر ميكنيد كه بهينه ساز سيستم در انتخاب پيمايش ترتيبي اشتباه كرده است با دستور </span>'</font><CODE><font face="Tahoma">SET enable_seqscan TO 'off'</font></CODE><font face="Tahoma"><span lang="fa"> ميتوانيد ببينيد آيا استفاده از نمايهها باعث افزايش سرعت درخواستها خواهد شد.</span></font></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">استفاده از نمايهها هنگامي كه از علائم ويژه نظير </span>LIKE<span lang="fa"> و </span>~<span lang="fa"> استفاده ميكنيد فقط در بعضي شرايط خاصي كه در اينجا ذكر شده است ممكن است:</span></font></P> <ul dir="rtl"> <li dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">ابتداي رشته جستجو بايد به طور صريح مشخص باشد براي مثال:</span></font></li> <li dir="rtl"> <p dir="rtl"><span dir="rtl"><font face="Tahoma"><span lang="fa">دستورات </span>LIKE<span lang="fa"> نبايد با علامت </span>%<span lang="fa"> شروع شوند</span></font></span></li> <li dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">الگوهاي منظمي كه با </span> ~<span lang="fa"> ميايد حتماً بايد با علامت </span>^<span lang="fa"> شروع شود</span></font></li> <li dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">رشته جستجو نبايد با يك مجموعه از كاراكترها مثل </span>[a-e]<span lang="fa"> شروع شود</span></font></li> <li dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">جستجوهاي غيرحساس به متن مثل </span>ILIKE<span lang="fa"> و </span>*~<span lang="fa"> از نمايهها استفاده نميكنند. در عوض از توابع نمايهاي كه در قسمت </span> <A href="#4.12">4.12</A><span lang="fa"> توضيح داده شد استفاده ميكنند.</span></font></li> <li dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">مقدار پيش فرض </span>locale<span lang="fa"> بايد در </span>initdb<span lang="fa"> استفاده شود.</span></font></li> </ul> <H4 dir="rtl"><font face="Tahoma"><A name=4.9>4.9</A>) <span lang="fa">چگونه ميتوانم نحوه بررسي درخواست را توسط بهينهساز درخواستها مشاهده كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">راهنماي دستور </span>EXPLAIN<span lang="fa"> را نگاه كنيد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.10>4.10</A>) <span lang="fa">نمايه </span>R-tree<span lang="fa"> چيست؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">از نمايه </span>R-Tree <span lang="fa"> براي انديس كردن دادههاي فاصلهاي استفاده ميشود. يك نمايه </span>hash<span lang="fa"> نميتوانند جستجوهاي محدودهاي را انجام دهد. نمايه</span> "B-tree"<span lang="fa"> نيز براي انجام جستجوي محدودهاي در يك جهت قابل استفاده است. اما </span>R-Tree<span lang="fa"> ميتواند دادههاي چند بعدي را نيز پشتيباني كند. براي مثال استفاده اگر از نمايه </span>R-tree<span lang="fa"> براي گونه </span>Point<span lang="fa"> استفاده شود سرعت درخواستهايي نظير "</span>select all points within a bounding rectangle<span lang="fa">" به مراتب افزايش مييابد.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">مقالهاي كه طراحي </span>R-tree<span lang="fa"> را توضيح داده است </span></font></P> <P><font face="Tahoma">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.</font></P> <P dir="rtl"><font face="Tahoma">R-tree<span lang="fa"> ميتواند چندضلعيها و چند وجهي را پشتيباني كند. در تئوري </span>R-tree<span lang="fa"> ميتواند تعداد بعدهاي بالاتر ري نيز پشتيباني كند. در عمل توسعه </span>R-tree<span lang="fa"> نياز به كار بيشتري دارد.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.11>4.11</A>) <span lang="fa">بهينه ساز تكويني درخواست چيست؟</span> (Genetic Query Optimizer)</font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">استفاده از </span>GEQO<span lang="fa"> سرعت بهينه سازي درخواست را هنگاميكه تعداد زيادي جدول را با استفاده از الگوريتم ژنتيك الحاق ميكنيم افزايش ميدهد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.12>4.12</A>) <span lang="fa">چگونه از عبارات منظم براي جستجو استفاده كنم؟ چگونه جستجويي انجام دهم كه حساس به متن نباشد؟ چگونه براي يك جستجوي غير حساس به متن از نمايه استفاده كنم؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">براي جستجوي عبارت منظم از عملگر </span>~<span lang="fa"> استفاده ميكنيم. براي جستجوي غير حساس به متن از عملگر </span>*~ <span lang="fa">و يا </span>ILIKE<span lang="fa"> استفاده ميكنيم.</span></font></P> <p dir="rtl"><span lang="fa"><font face="Tahoma">روش ديگر انجام جستجوي غير حساس به متن در زير نشان داده شده است.</font></span></p> <PRE><font face="Tahoma"> SELECT * FROM tab WHERE lower(col) = 'abc'; </font></PRE> <p dir="rtl"><span lang="fa"><font face="Tahoma">اين از نمايههاي استاندارد استفاده نميكند. ولي شما مي توانيد با دستور زير يك نمايه ايجاد كنيد و از آن استفاده كنيد.</font></span></p> <PRE><font face="Tahoma"> CREATE INDEX tabindex ON tab (lower(col)); </font></PRE> <H4 dir="rtl"><font face="Tahoma"><A name=4.13>4.13</A>) I<span lang="fa">چگونه ميتوانم در يك درخواست تشخيص دهم كه يك فيلد </span>NULL<span lang="fa"> است؟</span></font></H4> <p dir="rtl"><font face="Tahoma"><span lang="fa">با استفاده از توابع </span>IS NULL<span lang="fa"> و </span>IS NOT NULL<span lang="fa"> ميتوانيم </span>NULL<span lang="fa"> بودن يك فيلد را تست كنيم.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.14>4.14</A>) <span lang="fa">تفاوت بين گونههاي مختلف </span>character<span lang="fa"> چيست؟</span></font></H4> <PRE><font face="Tahoma">Type Internal Name Notes -------------------------------------------------- VARCHAR(n) varchar <span lang="fa">اندازه، حداكثر طول را نشان مي دهد بدون اضافه شدن كاراكتر اضافه</span> CHAR(n) <span lang="fa"> </span> bpchar <span lang="fa">كاراكترهاي بلانك براي پر شدن طول مشخص شده استفاده ميشود</span> TEXT <span lang="fa"> </span>text <span lang="fa"> </span>ح<span lang="fa">داكثر طول را مشخص نميكند</span> BYTEA <span lang="fa"> </span> bytea <span lang="fa">آرايهاي از بايت با طول متغير</span> "char" <span lang="fa"> </span>char <span lang="fa">يك كاراكتر</span> </font></PRE> <p dir="rtl"><font face="Tahoma"><span lang="fa">نام داخلي گونهها را در </span> system catalogue <span lang="fa">و بعضي از پيغامهاي خطا ميتوان ديد.</span></font></p> <p dir="rtl"><font face="Tahoma"><span lang="fa">چهار گونه اول همگي از نوع </span>varlena <span lang="fa">هستند (4 بايت اول روي ديسك طول را مشخص ميكند كه به دنبال آن دادهها قرار دارند.)بنابراين فضاي واقعي استفاده شده روي ديسك از اندازه تعريف شده بيشتر است. اما اين گونهها را ميتوان فشرده كرد كه اينكار باعث ميشود فضاي كمتري روي ديسك اشغال كنند.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">براي ذخيره رشتههاي با طول متغير</span><font size="2">(</font><SMALL>VARCHAR(n<span lang="fa"> <font size="3">بهترين انتخاب است. در اين گونه حداكثر طول رشته محدود است بر خلاف </font></span><font size="3">text<span lang="fa"> كه هيچ محدوديتي روي حداكثر اندازه رشته نميگذارد.(در اين گونه حداكثر طول يك رشته يك گيگا بايت خواهد بود)</span></font></SMALL></font></P> <p dir="rtl"><span lang="fa"><font face="Tahoma">گونه <font size="2">(</font></font></span><font face="Tahoma">CHAR(n<span lang="fa"> <font size="3"> براي ذخيره دادههاي با طول يكسان است.يك گونه</font>ي</span><font size="3"> </font> <font size="2"><span lang="fa">(</span></font>CHAR(n <span lang="fa"> <font size="3">با كاراكترهاي بلانك (خالي) پر ميشود تا به طول مشخص شده برسد در حاليكه گونه </font></span><font size="3">VARCHAR</font><font size="3"><span lang="fa"> كاراكترها را به همان صورت كه هستند ذخيره ميكند. گونه </span>BYTEA<span lang="fa"> براي ذخيره دادههاي باينري است به خصوص دادههاي باينتري كه شامل بايتهاي </span> NULL<span lang="fa"> هستند. از نظر كارايي تمام اين گونهها يكسان هستند.</span></font></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.15.1>4.15.1</A>) <span lang="fa">چگونه ميتوانم يك فيلد سريال يا افزايشي ايجاد كنم؟</span></font></H4> <p dir="rtl"><font face="Tahoma">PostgreSQL<span lang="fa"> از دادههاي سريال پشتيباني ميكند. براي ايجاد يك فيلد سريال (براي داشتن يك فيلد منحصر به فرد براي هر رديف )به روش زير عمل كنيد:</span></font></p> <PRE><font face="Tahoma"> CREATE TABLE person ( id SERIAL, name TEXT ); </font></PRE> <p dir="rtl"><span lang="fa"><font face="Tahoma">دستور بالا به طور اتوماتيک به دستور زير تبديل ميشود:</font></span></p> <PRE><font face="Tahoma"> CREATE SEQUENCE person_id_seq; CREATE TABLE person ( id INT4 NOT NULL DEFAULT nextval('person_id_seq'), name TEXT ); </font></PRE> <p dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن اطلاعات بيشتر به راهنماي دستور </span> <I>create_sequence</I> <span lang="fa"> مراجعه كنيد. همچنين ميتوان از </span>OID<span lang="fa">هر رديف به عنوان يك مقدار منحصر به فرد استفاده كرد. اما در اين حالت براي </span>dump<span lang="fa"> كردن و </span> reload<span lang="fa">كردن پايگاه داده بايد دستور </span><i>pg_dumps</i><span lang="fa"><i></i> را با گزينه </span>o-<span lang="fa"> اجرا كنيد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.15.2>4.15.2</A>) <span lang="fa"> چگونه ميتوانم مقدار يك درج سريالي را بدانم؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">يك روش براي گرفتن مقدار بعدي يك فيلد سريال استفاده از تابع </span><i>()nextval</i><span lang="fa"> است.</span> <span lang="fa">در شبه كُدي كه در ادامه آمده است روش انجام اين كار نشان داده شده است:</span></font></P> <PRE><font face="Tahoma"> new_id = execute("SELECT nextval('person_id_seq')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); </font></PRE> <p dir="rtl"><font face="Tahoma"><span lang="fa">با اجرا دستور فوق مقدار جديد را در متغير </span>new_id<span lang="fa"> نيز خواهيدداشت كه ميتوانيد آن را در بقيه درخواستهاي نيز استفاده كنيد. توجه داشته باشيد كه نام </span>SEQUENCE<span lang="fa">يي كه به طور اتوماتيك ايجاد شده است به صورت </span><i>table</i>_<I>serialcolumn</I>_<I>seq<span lang="fa"> </span></I><span lang="fa">خواهد بود</span>. <span lang="fa">كه در آن </span> table<span lang="fa"> نام جدول و </span>serialcolumn<span lang="fa"> نام فيلد سريال جدول ميباشد.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">براي ديدن مقدار نسبت داده شده به فيلد سريال نيز ميتوان از تابع <i>()</i></span> <I>currval </I> <span lang="fa">به صورت زير استفاده كرد. </span></font></P> <PRE><font face="Tahoma"> execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); new_id = execute("SELECT currval('person_id_seq')"); </font></PRE> <p dir="rtl"><font face="Tahoma"><span lang="fa">و سرانجام شما ميتوانيد از مقدار </span>OID<span lang="fa"> كه خروجي دستور </span>INSERT <span lang="fa"> است براي ديدن مقدار پيش فرض استفاده كنيد. هر چند اين روش در همه پلتفرمها قابل استفاده نيست و ضمن اينكه فيلد </span>oid<span lang="fa"> بعد از عدد 4 ميليارد دوباره صفر ميشود. در زبان </span>perl<span lang="fa"> با استفاده از </span>DBI<span lang="fa"> و </span>DBD::Pg<span lang="fa"> مقدار </span>oid<span lang="fa">را ميتوانيد به شكل زير استخراج كنيد:</span> <span lang="fa">بعد از اجراي ()</span>st->execute<span lang="fa">$ مقدار </span>oid<span lang="fa"> در متغير </span> <I>sth->pg_oid_status<span lang="fa">$</span></I><span lang="fa"> ذخيره خواهد شد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.15.3>4.15.3</A>) <span lang="fa">آیا توابع ()</span>nextval<span lang="fa"> و ()</span>currval<span lang="fa"> منجر به ایجاد شرایط </span>race<span lang="fa"> برای سایر کاربران می شوند؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">خیر، استفاده از این توابع شرایط </span>race<span lang="fa"> را به وجود نمی آورد.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.15.4>4.15.4</A>)</font><font face="Tahoma"><span lang="fa"> چرا اعداد سریالی مربوط به تراکنشهای </span>abort<span lang="fa"> شده مجدداً استفاده نمی شود؟ چرا بین اعداد سریالی یک فاصله خالی ایجاد می شود؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">برای بالا بردن امکان اجرای همزمان تراکنشها، اعداد سریالی به محض اجرای تراکنش به آنها تخصیص می یابد در این حالت اگر بعضی از تراکنشها </span>abort<span lang="fa"> شوند بین اعداد سریالی استفاده شده یک فاصله خالی به وجود می آید.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.16>4.16</A>) OID<span lang="fa"> و </span> TID<span lang="fa"> چه هستند؟</span></font></H4> <P dir="rtl"><font face="Tahoma">OID<span lang="fa"> راه حل </span>PostgreSQL<span lang="fa"> برای داشتن یک شناسه منحصر به فرد برای هر ردیف است. هر ردیف جدیدی که ایجاد می شود یک </span>OID<span lang="fa"> منحصر به فرد به آن اختصاص می یابد. تمام </span>OID<span lang="fa">هایی که در حین </span>initdb<span lang="fa"> ایجاد می شوند از 16384 کمتر هستند و </span>OID<span lang="fa">هایی بعداً تولید می شود از این عدد بزرگتر خواهد بود. نکته مهم آن است که </span>OID<span lang="fa">ها نه تنها در یک جدول شبیه نیستند بلکه در کل پایگاه داده هیچ دو ردیفی دارای </span>OID<span lang="fa"> یکسان نخواهد بود.</span></font></P> <P dir="rtl"><font face="Tahoma">PostgreSQL<span lang="fa"> از </span>OID<span lang="fa"> در سیستم داخلی خود برای ایجاد ارتباط بین ردیفهای جداول مختلف استفاده می کند. توصیه می شود که یک ستون از نوع </span>OID<span lang="fa"> برای ذخیره این فیلد در جدول ایجاد کنید. ساختن یک نمایه برای این فیلد باعث دسترسی سریعتر به آن خواهد شد.</span></font></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">تمام پایگاههای داده در </span> PostgreSQL<span lang="fa"> برای گرفتن </span>OID<span lang="fa"> جدید از یک ناحیه مرکزی استفاده می کند. ولی اگر بخواهیم </span>OID<span lang="fa"> را به روش دیگری بگیریم و یا اینکه در حین کپی کردن یک جدول بخواهیم </span>OID<span lang="fa">های اصلی آن تغییر نکند به روش زیر می توانیم عمل کنیم:</span></font></P> <P dir="rtl"> </P> <div dir="ltr"> <PRE><font face="Tahoma"> 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; </font></PRE> </div> <P dir="rtl"><font face="Tahoma">OID<span lang="fa"> یک عدد صحیح 4 بایتی است و بنابراین حداکثر مقدار آن 4 میلیارد خواهد بود و بعد از آن مقدار آن سرریز خواهد شد. البته تا کنون برای کسی این اتفاق نیفتاده است و تصمیم گرداندگان </span>PostgreSQL<span lang="fa"> آن است که قبل از آنکه این اتفاق رخ دهد این مشکل را برطرف کنند.</span></font></P> <P dir="rtl"><font face="Tahoma">TID<span lang="fa">ها برای شناسایی محل فیزیکی یک ردیف بر اساس بلوک و آفست می باشد. </span>TID<span lang="fa">ها بعد از تغییر پیدا کردن یک ردیف و یا بازخوانی آن عوض می شوند. </span>TID<span lang="fa">ها توسط نمایه ها استفاده می شوند.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.17>4.17</A>) <span lang="fa">معني بعضي از ترمها و كلماتي كه در </span>PostgreSQL<span lang="fa"> استفاده ميشود چيست؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">لیست برخی از ترمها و کلماتی که استفاده می شوند:</span></font></P> <UL> <LI dir="ltr"> <p dir="ltr"><font face="Tahoma">table, relation, class <span lang="fa"> :کلاس، رابطه، جدول</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma">row, record, tuple <span lang="fa">چندتایی، رکورد، ردیف</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma">column, field, attribute <span lang="fa"> صفت، فیلد، ستون</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma">retrieve, select <span lang="fa">انتخاب، خواندن</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma">replace, update<span lang="fa">به روز کردن، جایگزینی</span> </font> <LI dir="ltr"> <p dir="ltr"><font face="Tahoma">append, insert <span lang="fa">درج، اضافه کردن</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma"><SMALL>OID</SMALL>, serial value <span lang="fa">مقدار سریال</span></font><LI dir="ltr"> <p dir="ltr"><font face="Tahoma">portal, cursor </font> <LI dir="ltr"> <p dir="ltr"><font face="Tahoma">range variable, table name, table alias </font> </LI></UL> <P dir="rtl"><font face="Tahoma"><span lang="fa">یک لیست عمومی از ترمهای مورد استفاده در پایگاه داده در آدرس </span> <A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html"> http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm</A> <span lang="fa">وجود دارد.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.18>4.18</A>) <span lang="fa"> چرا من خطاي </span><i>"ERROR: Memory exhausted in AllocSetAlloc"</i><span lang="fa"> ميگيرم؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">این خطا احتمالاً یا به خاطر تمام شدن حافظه مجازی سیستم شماست و یا اینکه کرنل برای برنامه ها در مورد میزان استفاده از حافظه مجازی محدودیت اعمال کرده است. قبل از اجرای برنامه اصلی یکی از دستورات زیر را اجرا کنید.</span></font></P> <div dir="ltr"> <PRE><font face="Tahoma"> ulimit -d 262144 limit datasize 256m </font></PRE></div> <p dir="rtl"><font face="Tahoma"><span lang="fa">بسته به نوع شل یکی از این دستورات ممکن است با موفقیت اجرا شود. با اجرای آن دستور محدودیت حافظه مجازی برای برنامه ها برداشته شده و با این کار احتمالاً درخواستی که قبلاً خطا می داده است اجرا خواهد شد.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.19>4.19</A>) <span lang="fa">از كجا تشخيص دهم كه ويرايش يا نسخه </span>PostgreSQL<span lang="fa">يي كه من استفاده ميكنم چيست؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">با اجرای دستور</span> <span lang="fa">()</span>SELECT version</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.20>4.20</A>) <span lang="fa">چرا در حین اجرای عملیات روی </span>large-object<span lang="fa">ها خطای </span>"<I>invalid large obj descriptor</I>"<span lang="fa">به وجود می آید؟</span></font></H4> <p align="right" dir="rtl"><font face="Tahoma"><span lang="fa">شما باید قبل از شروع دستوراتی که با </span>large-object<span lang="fa">ها کار می کنند از </span> BEGIN<span lang="fa"> و بعد از آنها هم یک </span>END<span lang="fa"> بگذارید. در حال حاضر </span>PostgreSQL<span lang="fa"> هندل </span>large-object<span lang="fa">ها را در زمان نهایی شدن تراکنش (</span>commit<span lang="fa">شدن)</span> <span lang="fa">می بندد. به همین دلیل اولین تلاش برای انجام هر کاری با هندل منجر به خطای </span><i>invalid large obj descriptor</i><span lang="fa"> خواهد شد.</span> <span lang="fa">برای جلوگیری از این خطا حتماً باید از یک تراکنش استفاده کنید. این کار همانطور که قبلاً گفته شد با استفاده از قرار دادن </span>BEGIN<span lang="fa"> و </span>END<span lang="fa"> در ابتدا و انتهای دستورات انجام می شود.</span></font></p> <p dir="rtl"><font face="Tahoma"><span lang="fa">اگر این خطا را در حین استفاده از یک درایور </span>ODBC<span lang="fa"> دریافت کردید احتمالاً باید این دستور را اجرا کنید: </span>set </font> <CODE><font face="Tahoma">auto-commit off</font></CODE></p> <H4 dir="rtl"><font face="Tahoma"><A name=4.21>4.21</A>) <span lang="fa">چگونه يك ستون ايجاد كنم كه مقدار زمان جاري را به عنوان مقدار پيشفرض داشته باشد؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">از</span> <I>CURRENT_TIMESTAMP <span lang="fa"> </span></I><span lang="fa">استفاده کنید در مثال زیر نحوه انجام این کار نشان داده شده است:</span></font></P> <div dir="ltr"> <PRE><CODE><font face="Tahoma">CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); </font></CODE><font face="Tahoma"> </font></PRE> </div> <H4 dir="rtl"><font face="Tahoma"><A name=4.22>4.22</A>) <span lang="fa">چرا "زير درخواستهايي" كه از </span>IN<span lang="fa"> استفاده ميكنند كند هستند؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های قبل از 7.4 عمل الحاق زیر درخواست و درخواست اصلی به این صورت انجام می شود که نتایج به دست آمده از زیر درخواست به صورت ترتیبی برای هر ردیف اعمال می شود. اگر زیردرخواست ردیف های کمی را به عنوان خروجی برگرداند و درخواست بیرونی ردیف های زیادی را شامل شود استفاده از </span>IN<span lang="fa"> بهترین روش است در غیر اینصورت بهتر است از </span>EXISTS<span lang="fa"> استفاده شود</span></font></P> <div dir="ltr"> <PRE><font face="Tahoma"> SELECT * FROM tab WHERE col IN (SELECT subcol FROM subtab); </font></PRE></div> <p dir="rtl"><span lang="fa"><font face="Tahoma">به:</font></span></p> <div dir="ltr"> <PRE><font face="Tahoma"> SELECT * FROM tab WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); </font></PRE></div> <p dir="rtl"><font face="Tahoma"><span lang="fa">برای اجرای سریع این درخواست باید برای ستون </span>subcol<span lang="fa"> نمایه ایجاد شده باشد.</span></font></p> <P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های بعد از 7.4 </span> IN<span lang="fa"> برای الحاق از همان تکنیک پیچیده مورد استفاده در دستورات معمولی استفاده می کند و بنابراین استفاده از آن نسبت به </span>EXISTS<span lang="fa"> ارجحیت دارد.</span></font><H4 dir="rtl"><font face="Tahoma"><A name=4.23>4.23</A>) <span lang="fa"> چگونه ميتوانم يك الحاق خارجي (</span>outer join<span lang="fa">) انجام دهم؟</span></font></H4> <p dir="rtl"><span lang="fa"><font face="Tahoma">برای انجام الحاق خارجی به روش زیر عمل کنید:</font></span></p> <div dir="ltr"> <PRE><font face="Tahoma"> SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); </font></PRE></div> <p dir="rtl"><span lang="fa"><font face="Tahoma">یا</font></span></p> <div dir="ltr"> <PRE><font face="Tahoma"> SELECT * FROM t1 LEFT OUTER JOIN t2 USING (col); </font></PRE> </div> <P dir="rtl"><font face="Tahoma"><span lang="fa">درخواستهای بالا </span>t1.col , t2.col<span lang="fa"> را به هم الحاق می کند و همچنین ردیفهای </span>t1<span lang="fa"> که نظیر آنها در </span>t2<span lang="fa"> نبوده است را نیز برمی گرداند. اگر از </span>RIGHT<span lang="fa"> استفاده شود نتیجه بر عکس است. یعنی ردیفهای </span> t2<span lang="fa"> که نظیر آنها در </span>t1 <span lang="fa">نباشد را نشان می دهد و اگر از </span>FULL<span lang="fa"> استفاده شود نتیجه هم شامل ردیفهای </span>t1<span lang="fa"> است و هم شامل ردیفهای </span>t2<span lang="fa">. استفاده از کلمه </span>OUTER<span lang="fa"> اختیاری است چرا که این کلمه به طور ضمنی دستورهای </span>LEFT, RIGHT, FULL<span lang="fa"> وجود دارد.</span></font></P> <P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های قبلی پایگاه داده می توانیم الحاق خارجی را به کمک دستورهای </span>UNION, NOT IN<span lang="fa"> شبیه سازی کنیم. این کار در مثال زیر نشان داده شده است:</span><BR></font></P> <div dir="ltr"> <PRE><font face="Tahoma"> 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 </font></PRE> </div> <H4 dir="rtl"><font face="Tahoma"><A name=4.24>4.24</A>) <span lang="fa">چگونه ميتوان درخواستهايي از چند پايگاه داده توليد كرد؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">در حال حاضر این کار امکان پذیر نیست. </span>PostgreSQL<span lang="fa"> فقط امکان درخواست از پایگاه داده ای را می دهد که در حال حاضر به آن متصل باشید و نمی توان به طور همزمان از دو پایگاه داده استفاده کرد. البته یک برنامه کاربردی خود می تواند به طور همزمان دو پایگاه داده را مورد استفاده قرار داده و نتایج را با هم ترکیب کند ولی نمی تواند در یک درخواست به هر دو پایگاه داده رجوع کند.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.25>4.25</A>) <span lang="fa">چگونه خروجي يك تابع ميتواند چند رديف يا ستون باشد؟</span></font></H4> <P dir="rtl"><span lang="fa"><font face="Tahoma">در نسخه 7.3 خروجی یک تابع می تواند چند ردیف یا چند ستون باشد. برای دیدن اطلاعات بیشتر به سایت زیر مراجعه کنید:</font></span><font face="Tahoma"><A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A><span lang="fa"> </span> </font><H4 dir="rtl"><font face="Tahoma"><A name=4.26>4.26</A>) <span lang="fa">در توابع </span>PL/PgSQL<span lang="fa"> چرا نميتوان با اطمينان جداول موقت را ايجاد يا حذف كرد؟</span></font></H4> <P dir="rtl"><font face="Tahoma">PL/PgSQL<span lang="fa"> محتوای توابع را ذخیره (</span>cache<span lang="fa">) می کند.</span> <span lang="fa">یک اثر بد جانبی این کار آن است که اگر در تابع از یک جدول موقت استفاده شود و بعداً آن جدول حذف و یک جدول جدید به جای آن ایجاد شود، در فراخوانی مجدد آن تابع، محتوای ذخیره شده تابع هنوز به جدول قدیمی اشاره می کند و بنابراین اجرای تابع با اشکال مواجه می شود. راه حل این مشکل آن است که برای جداول موقت از دستور </span>EXECUTE<span lang="fa"> استفاده شود که این کار سبب می شود که درخواست برای هر بار اجرا مجدداً پیمایش و تفسیر شود.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.27>4.27</A>) <span lang="fa">چه گزينههايي براي تكرار (</span>replication<span lang="fa">)</span> <span lang="fa">وجود دارد؟</span> </font> </H4> <P dir="rtl"><font face="Tahoma">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 <A href="http://gborg.postgresql.org/genpage?replication_research"> http://gborg.PostgreSQL.org/genpage?replication_research</A> lists them. A multi-master replication solution is being worked on at <A href="http://gborg.postgresql.org/project/pgreplication/projdisplay.php"> http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</font></P> <H4 dir="rtl"><font face="Tahoma"><A name=4.28>4.28</A>) <span lang="fa">چه گزينههايي براي رمزنگاري وجود دارد؟</span> </font> </H4> <UL> <LI dir="rtl"> <p dir="rtl"><font face="Tahoma">contrib<I>/pgcrypto </I><span lang="fa"> شامل توابع رمزنگاری زیادی است که می توان از آنها در دستورات </span>SQL<span lang="fa"> استفاده کرد.</span></font><LI dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">برای رمز کردن ارتباط بین </span>client<span lang="fa"> و </span>server<span lang="fa"> ، پایگاه داده حتماً گزینه </span>SSL<span lang="fa"> را بر روی پایگاه داده فعال کنیم.</span></font><LI dir="rtl"> <p dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه 7.3 به بعد کلمات عبور کاربران به طور اتوماتیک به صورت رمز شده ذخیره می شود ولی در نسخه های قبلی باید گزینه </span> <I>PASSWORD_ENCRYPTION</I> <span lang="fa"> در فایل</span><I>postgresql.conf </I> <span lang="fa">فعال کنیم. </span> </font> <LI dir="rtl"> <p dir="rtl"><span lang="fa"><font face="Tahoma">می توان پایگاههای داده را روی یک فایل سیستم رمزشده نگاهداری کرد</font></span></LI></UL> <HR dir="rtl"> <H2 align=center dir="rtl"><font face="Tahoma">Extending PostgreSQL</font></H2> <H4 dir="rtl"><font face="Tahoma"><A name=5.1>5.1</A>) <span lang="fa">من يك تابع نوشتهام. چگونه آن را در </span>psql<span lang="fa"> اجرا كنم؟ چرا با اجراي آن </span>core dump<span lang="fa"> ميگيرم؟</span></font></H4> <p dir="rtl"><span lang="fa"><font face="Tahoma">دلایل مختلفی می تواند باعث بروز این مشکل شود. اما قبل از همه تابع خود را به صورت جدا تست کنید.</font></span></p> <H4 dir="rtl"><font face="Tahoma"><A name=5.2>5.2</A>) <span lang="fa">چگونه ميتوانم در توليد نوعها و توابع جديد و جالب براي </span>PostgreSQL<span lang="fa"> همكاري و مشاركت داشته باشم</span></font><span lang="fa"><font face="Tahoma">؟</font></span></H4> <p dir="rtl"><span lang="fa"><font face="Tahoma">کد خود را به گروه پستی </font> </span><font face="Tahoma"> <I>pgsql-hackers<span lang="fa"> </span></I> <span lang="fa"> ارسال کنید.</span></font></p> <H4 dir="rtl"><font face="Tahoma"><A name=5.3>5.3</A>) <span lang="fa">چگونه ميتوانم يك تابع به زبان </span>C<span lang="fa"> بنويسم كه خروجي آن يك</span> <span lang="fa"></span>tuple<span lang="fa"> </span> <span lang="fa">(چند تايي) باشد؟</span></font></H4> <P dir="rtl"><font face="Tahoma"><span lang="fa">در نسخه های 7.3 به بعد یک تابع می تواند یک جدول را به عنوان خروجی برگرداند. این ویژگی در توابعی که به زبانهای </span>C<span lang="fa"> و </span>PL/PgSQL<span lang="fa"> نوشته می شوند به طور کامل وجود دارد. راهنما برنامه نویسان را مطالعه کنید. یک مثال از نحوه برگرداندن یک جدول به عنوان خروجی در </span><i>contrib/tablefunc</i><span lang="fa"> آمده است.</span></font></P> <H4 dir="rtl"><font face="Tahoma"><A name=5.4>5.4</A>) <span lang="fa">من يك فايل منبع را عوض كرده ام چرا در عمليات كامپيل مجدد آن تغيير ديده نميشود؟</span></font></H4> <P dir="rtl"><font face="Tahoma">Makefile<span lang="fa"> برای فایلهای </span> include<span lang="fa"> شده وابستگیها را به درستی نشان نمی دهد. برای اطمینان از اینکه فایلی که عوض کرده اید حتماً دوباره کامپیل می شود دستور </span>make clean<span lang="fa"> را اجرا کنید. اگر از کامپیلر </span>gcc<span lang="fa"> استفاده می کنید می توانید از گزینه </span>enable-depend--<span lang="fa"> در موقع اجرای برنامه </span>configure<span lang="fa"> استفاده کنید این گزینه باعث می شود که وابستگیها به طور اتوماتیک تولید شود.</span></font></P></BODY></HTML>