پستگرس‌کیوال
پُستگْرِس‌کیواِل ، یا به طور ساده‌تر پُستگْرِس، یک سامانه مدیریت پایگاه داده‌های شی-رابطه‌ای است که برای سکوهای مختلفی از جمله لینوکس، فری بی‌اس‌دی، ویندوز، و مک اواس ده موجود است. پستگرس‌کیوال توسط گروه توسعه سراسری پستگرس‌کیوال توسعه داده می‌شود، که شامل تعداد زیادی از افراد داوطلب است.
پستگرس‌کیوال بخش اعظم استاندارد را پیاده‌سازی می‌کند، ACID-موافق است، کاملاً تراکنشی است (این شامل شرح‌های تعریف داده نیز می‌شود)، دارای نوع داده‌ها، عملگرها، روش‌های فهرست، توابع، توابع جمع‌بندی، زبان‌های رویه‌ای قابل توسعه است، و دارای افزونه‌های بسیاری است که توسط دیگران ایجاد شده است.
پستگرس‌کیوال تکامل یافته پروژه پستگرس (POSTGRES) در دانشگاه برکلی است. پستگرس ادامه پایگاه داده رابطه‌ای اینگرس (INGRES) بود.
پیاده‌سازی پستگرس در سال ۱۹۸۶ آغاز شد. مفهوم‌های اولیه در مقاله «طراحی پستگرس» ارائه شد، و تعریف مدل داده اولیه در مقاله «مدل داده پستگرس» معرفی شد. طراحی سامانه قواعد در «طراحی سامانه قواعد پستگرس» شرح داده شد. معماری و منطق مدیر ذخیره‌سازی در «طراحی سامانه ذخیره‌سازی پستگرس» توضیح داده شد.
در سال ۱۹۹۴، «اندرو یو» و «جولی چن» مفسر زبان اس‌کیوال (SQL) را به پستگرس اضافه کردند، که این نسخه از محصول با عنوان «پستگرس ۹۵» در وب به عنوان نسخه منبع‌بازی از کد اصلی پستگرس برکلی ارائه شد.
کد پستگرس ۹۵ کاملاً با زبان سی استاندارد نوشته شده بود و از لحاظ حجم کد ۲۵ درصد کوچکتر بود. نسخه ۱ پستگرس ۹۵ در آزمون وسیکانزین حدود ۳۰ الی ۵۰ درصد سریع‌تر از پستگرس ۴٫۲ عمل می‌کرد.
در سال ۱۹۹۶، واضح بود که نام «پستگرس ۹۵» نامی نیست که بتواند در طول زمان برجا بماند. به همین دلیل نام پستگرس‌کیوال انتخاب شد، تا هم رابطه با سیستم پستگرس اصلی نشان داده شود و هم امکانات استفاده از اس‌کیوال برجسته شود. همچنین، تصمیم گرفته شد که نسخه‌ها از ۶. ۰ ادامه پیدا کنند، و نسخه‌گذاری پستگرس اصلی را ادامه دهند.
پُستگرس‌کیواِل بر روی هر کدام از معماری‌های زیر عمل می‌کند: ایکس۸۶، ایکس۸۶-۶۴، آی‌ای۶۴ ایتانیوم، پاور پی‌سی، پاور پی‌سی۶۴، S/۳۹۰، S/390x، اسپارک، اسپارک ۶۴، آلفا، آرم، میپس، میپسل، ام۶۸کی، و پی‌آ-ریسک.
پستگرس‌کیوال بر روی سیستم عامل‌های زیر موجود است: لینوکس (تمام توزیع‌های اخیر)، ویندوز (ویندوز ۲۰۰۰ SP4 و بعد)، فری بی اس دی، اپن‌بی‌اس‌دی، نت‌بی‌اس‌دی، مک اواس اکس، ای‌آی‌اکس، بی‌اس‌دی/اواس، اچ‌پی-یواکس، آیریکس، اپن ایندیانا، اپن سولاریس، و یونیکس ترو۶۴.
پستگرس‌کیوال از بخش اعظم زبان اس‌کیوال پشتیبانی می‌کند، و بسیاری از امکانات مدرن را نیز در اختیار می‌گذارد:
همچنین، کاربران قادر به توسعه پستگرس‌کیوال به روش‌های مختلف هستند، به عنوان مثال کاربران قادر به افزودن موارد زیر هستند:
پستگرس‌کیوال اجازه می‌دهد که توابع تعریف شده توسط کاربر در زبانی علاوه بر اس‌کیوال و سی نیز نوشته شود. این زبان‌های دیگر معمولاً زبان‌های رویه‌ای نامیده می‌شوند. زبان‌های رویه‌ای از بخش‌های توکار پستگرس‌کیوال نیستند و به صورت ماژول‌های قابل بارگذاری استفاده می‌شوند.
در حال حاضر چهار زبان رویه‌ای همراه توزیع استاندارد پستگرس‌کیوال وجود دارد: پی‌ال/پی‌جی‌اس‌کیوال (PL/pgSQL)، پی‌ال/تی‌سی‌ال (PL/TCL)، پی‌ال/پرل (PL/Perl)، و پی‌ال/پایتون (PL/Python).
به عنوان مثال برای ایجاد تابعی با استفاده از پی‌ال‌پایتون که کمینه دو عدد را محاسبه می‌کند، می‌توانیم به صورت زیر عمل کنیم:
CREATE EXTENSION IF NOT EXISTS plpythonu;
CREATE FUNCTION pymin(a integer, b integer) AS $$ $$ LANGUAGE plpythonu; از نسخه ۹٫۱ به بعد، پستگرس‌کیوال می‌تواند از داده‌های سایر سیستم با استفاده از لفافه‌های خارجی داده (Foreign Data Wrappers) استفاده کند. با استفاده از این امکان، می‌توان جدولی ساخت که منبع اطلاعاتش هر منبع خارجی، مانند فایل موجود در سیستم فایل، یا پایگاه داده دیگر، یا یک وب سرویس باشد. این به این معنی است که پرس‌وجوها می‌توانند این منابع داده را مانند جدوال عادی استفاده کنند، و حتی این جدول‌ها را با جدول‌های عادی پیوند دهد. لیستی از لفافه‌های خارجی داده در ویکی پستگرس‌کیوال موجود است.
به عنوان مثال، فرض کنید یک فایل دارید که هر رکورد آن در یک سطر قرار دارد و مقادیر فیلدها با کاراکتر «|» از هم جدا شده است، و هر رکورد شامل سه فیلد نام، شهر، و سن است. به صورت زیر می‌توان یک جدول ایجاد کرد که منبع داده‌هایش این فایل است: CREATE FOREIGN TABLE person { } SERVER file_server OPTIONS (format 'text', filename '/path/to/file', delimiter '|', null "); برای اینکه بتوان تعریف بالا را انجام داد، ابتدا باید افزونه file_fdw و سرور file_server را ایجاد کرد: CREATE EXTENSION IF NOT EXISTS file_fdw;
CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw; قبل از نسخه ۹٫۳، لفافه‌های خارجی داده تنها خواندنی بودند. از نسخه ۹٫۳ به بعد امکان نوشتن در لفافه‌های خارجی داده نیز افزوده شد.
انواع داده‌های وسیعی در پستگرس‌کیوال پشتیبانی می‌شوند، که شامل موارد زیر است:
از فهرست‌ها می‌توان برای بهبود عملکرد پایگاه‌داده استفاده کرد. فهرست‌ها به سرویس‌دهنده پایگاه‌داده اجازه می‌دهد تا سطرهای خاص را سریع‌تر از حالت بدون فهرست بیابد.
انواع مختلف فهرست در پستگرس‌کیوال موجود است، که شامل موارد زیر می‌شود:
هر فهرست از الگوریتم متفاوتی استفاده می‌کند و برای انواع خاصی از پرس‌وجوها مناسب است.
پستگرس‌کیوال از واقعه‌نگاری قبل نوشتن برای اطمینان از جامعیت داده استفاده می‌کند. به طور خلاصه، مفهوم اصلی WAL این است که تغییرات فایل‌های داده (محل ذخیره‌سازی جدول‌ها و فهرست‌ها) تنها در صورتی باید انجام شود که این تغییرات واقعه‌نگاری شده‌اند، و رکوردهای واقعه‌نگاری مرتبط در حافظه دایمی ثبت شده است. در اینصورت، درصورت بروز اشکال در اجرای پایگاه‌داده، می‌توانیم با استفاده از وقایع ثبت‌شده داده‌ها را بازیابی کنیم.
پستگرس‌کیوال از کنترل همروندی چندنسخه‌ای برای ثبات داده استفاده می‌کند. یعنی اینکه هر تراکنش، صرف‌نظر از وضعیت فعلی پایگاه‌داده، نسخه‌ای از پایگاه‌داده که مربوط به زمانی پیش است را می‌بیند. این ویژگی تراکنش‌ها را از مشاهده داده بی‌ثباتی که در طول اجرای تراکنش‌های همزمان بر روی سطرهای یکسان ایجاد می‌شود محافظت می‌کند.
مزیت اصلی کنترل همروندی چندنسخه‌ای این است که قفل‌های استفاده شده برای خواندن داده با قفل‌های استفاده شده برای نوشتن داده متفاوت است، و بنابراین نوشتن هرگز مانع خواندن و خواندن هرگز مانع نوشتن نمی‌شود.
برای پستگرس‌کیوال چندین نوع رابط وجود دارد، و به صورت وسیعی توسط کتابخانه‌های زبان‌های برنامه‌نویسی مختلف پشتیبانی شده است. این کتابخانه‌ها شامل موارد زیر است: کاربران برجسته پستگرس‌کیوال شامل موارد زیر است: