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