پستگرس‌کیوال

تاریخچه

پستگرس‌کیوال تکامل یافته پروژه پستگرس (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)
  RETURNS integer
AS $$
  if a < b:
    return a
  return b
$$ LANGUAGE plpythonu;

لفافه‌های خارجی داده

از نسخه ۹٫۱ به بعد، پستگرس‌کیوال می‌تواند از داده‌های سایر سیستم با استفاده از لفافه‌های خارجی داده (Foreign Data Wrappers) استفاده کند. با استفاده از این امکان، می‌توان جدولی ساخت که منبع اطلاعاتش هر منبع خارجی، مانند فایل موجود در سیستم فایل، یا پایگاه داده دیگر، یا یک وب سرویس باشد. این به این معنی است که پرس‌وجوها می‌توانند این منابع داده را مانند جدوال عادی استفاده کنند، و حتی این جدول‌ها را با جدول‌های عادی پیوند دهد. لیستی از لفافه‌های خارجی داده در ویکی پستگرس‌کیوال موجود است.
به عنوان مثال، فرض کنید یک فایل دارید که هر رکورد آن در یک سطر قرار دارد و مقادیر فیلدها با کاراکتر «|» از هم جدا شده است، و هر رکورد شامل سه فیلد نام، شهر، و سن است. به صورت زیر می‌توان یک جدول ایجاد کرد که منبع داده‌هایش این فایل است:
CREATE FOREIGN TABLE person {
    name text,
    city text,
    age int4} SERVER file_serverOPTIONS (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;
قبل از نسخه ۹٫۳، لفافه‌های خارجی داده تنها خواندنی بودند. از نسخه ۹٫۳ به بعد امکان نوشتن در لفافه‌های خارجی داده نیز افزوده شد.

قابلیت اطمینان

پستگرس‌کیوال از واقعه‌نگاری قبل نوشتن (به انگلیسی: Write-Ahead Logging یا WAL) برای اطمینان از جامعیت داده استفاده می‌کند. به طور خلاصه، مفهوم اصلی WAL این است که تغییرات فایل‌های داده (محل ذخیره‌سازی جدول‌ها و فهرست‌ها) تنها در صورتی باید انجام شود که این تغییرات واقعه‌نگاری شده‌اند، و رکوردهای واقعه‌نگاری مرتبط در حافظه دایمی ثبت شده است. در اینصورت، درصورت بروز اشکال در اجرای پایگاه‌داده، می‌توانیم با استفاده از وقایع ثبت‌شده داده‌ها را بازیابی کنیم.

کنترل همروندی چندنسخه‌ای

پستگرس‌کیوال از کنترل همروندی چندنسخه‌ای (به انگلیسی: Multiversion Concurrency Control یا MVCC) برای ثبات داده استفاده می‌کند. یعنی اینکه هر تراکنش، صرف‌نظر از وضعیت فعلی پایگاه‌داده، نسخه‌ای از پایگاه‌داده که مربوط به زمانی پیش است را می‌بیند. این ویژگی تراکنش‌ها را از مشاهده داده بی‌ثباتی که در طول اجرای تراکنش‌های همزمان بر روی سطرهای یکسان ایجاد می‌شود محافظت می‌کند.
مزیت اصلی کنترل همروندی چندنسخه‌ای این است که قفل‌های استفاده شده برای خواندن داده با قفل‌های استفاده شده برای نوشتن داده متفاوت است، و بنابراین نوشتن هرگز مانع خواندن و خواندن هرگز مانع نوشتن نمی‌شود.