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

**پُستگْرِس‌کیواِل** ، یا به طور ساده‌تر پُستگْرِس، یک سامانه مدیریت پایگاه داده‌های شی-رابطه‌ای است که برای سکوهای مختلفی از جمله لینوکس، فری بی‌اس‌دی، ویندوز، و مک اواس ده موجود است. پستگرس‌کیوال توسط گروه توسعه سراسری پستگرس‌کیوال توسعه داده می‌شود، که شامل تعداد زیادی از افراد داوطلب است.

پستگرس‌کیوال بخش اعظم استاندارد اس‌کیوال:۲۰۰۸ را پیاده‌سازی می‌کند، ACID-موافق است، کاملاً تراکنشی است (این شامل شرح‌های تعریف داده نیز می‌شود)، دارای نوع داده‌ها، عملگرها، روش‌های فهرست، توابع، توابع جمع‌بندی، زبان‌های رویه‌ای قابل توسعه است، و دارای افزونه‌های بسیاری است که توسط دیگران ایجاد شده است.

## تاریخچه
پستگرس‌کیوال تکامل یافته پروژه پستگرس (POSTGRES) در دانشگاه برکلی است. پستگرس ادامه پایگاه داده رابطه‌ای اینگرس (INGRES) بود.

### پروژه پستگرس برکلی
پیاده‌سازی پستگرس در سال ۱۹۸۶ آغاز شد. مفهوم‌های اولیه در مقاله «طراحی پستگرس» ارائه شد، و تعریف مدل داده اولیه در مقاله «مدل داده پستگرس» معرفی شد. طراحی سامانه قواعد در «طراحی سامانه قواعد پستگرس» شرح داده شد. معماری و منطق مدیر ذخیره‌سازی در «طراحی سامانه ذخیره‌سازی پستگرس» توضیح داده شد.

### پستگرس ۹۵
در سال ۱۹۹۴، «اندرو یو» و «جولی چن» مفسر زبان اس‌کیوال (SQL) را به پستگرس اضافه کردند، که این نسخه از محصول با عنوان «پستگرس ۹۵» در وب به عنوان نسخه منبع‌بازی از کد اصلی پستگرس برکلی ارائه شد.

کد پستگرس ۹۵ کاملاً با زبان سی استاندارد نوشته شده بود و از لحاظ حجم کد ۲۵ درصد کوچکتر بود. نسخه ۱ پستگرس ۹۵ در آزمون وسیکانزین حدود ۳۰ الی ۵۰ درصد سریع‌تر از پستگرس ۴٫۲ عمل می‌کرد.

### پستگرس‌کیوال
در سال ۱۹۹۶، واضح بود که نام «پستگرس ۹۵» نامی نیست که بتواند در طول زمان برجا بماند. به همین دلیل نام پستگرس‌کیوال انتخاب شد، تا هم رابطه با سیستم پستگرس اصلی نشان داده شود و هم امکانات استفاده از اس‌کیوال برجسته شود. همچنین، تصمیم گرفته شد که نسخه‌ها از ۶. ۰ ادامه پیدا کنند، و نسخه‌گذاری پستگرس اصلی را ادامه دهند.

## تاریخچه انتشار

## سکوها
### معماری‌های دستور عمل
پُستگرس‌کیواِل بر روی هر کدام از معماری‌های زیر عمل می‌کند: ایکس۸۶، ایکس۸۶-۶۴، آی‌ای۶۴ ایتانیوم، پاور پی‌سی، پاور پی‌سی۶۴، S/۳۹۰، S/390x، اسپارک، اسپارک ۶۴، آلفا، آرم، میپس، میپسل، ام۶۸کی، و پی‌آ-ریسک.

### سیستم عامل‌ها
پستگرس‌کیوال بر روی سیستم عامل‌های زیر موجود است: لینوکس (تمام توزیع‌های اخیر)، ویندوز (ویندوز ۲۰۰۰ SP4 و بعد)، فری بی اس دی، اپن‌بی‌اس‌دی، نت‌بی‌اس‌دی، مک اواس اکس، ای‌آی‌اکس، بی‌اس‌دی/اواس، اچ‌پی-یواکس، آیریکس، اپن ایندیانا، اپن سولاریس، و یونیکس ترو۶۴.

## قابلیت‌ها
پستگرس‌کیوال از بخش اعظم زبان اس‌کیوال پشتیبانی می‌کند، و بسیاری از امکانات مدرن را نیز در اختیار می‌گذارد:
* پرس‌وجوهای پیچیده
* کلیدهای خارجی
* تریگرها
* دیدها
* تمامیت تراکنشی
* کنترل همروندی چندنسخه‌ای

همچنین، کاربران قادر به توسعه پستگرس‌کیوال به روش‌های مختلف هستند، به عنوان مثال کاربران قادر به افزودن موارد زیر هستند:
* انواع داده،
* توابع،
* عملگرها،
* توابع تجمیعی،
* روش‌های فهرست،
* زبان‌های رویه‌ای،
* لفافه‌های خارجی داده.

### زبان‌های رویه‌ای
پستگرس‌کیوال اجازه می‌دهد که توابع تعریف شده توسط کاربر در زبانی علاوه بر اس‌کیوال و سی نیز نوشته شود. این زبان‌های دیگر معمولاً **زبان‌های رویه‌ای** نامیده می‌شوند. زبان‌های رویه‌ای از بخش‌های توکار پستگرس‌کیوال نیستند و به صورت ماژول‌های قابل بارگذاری استفاده می‌شوند.

در حال حاضر چهار زبان رویه‌ای همراه توزیع استاندارد پستگرس‌کیوال وجود دارد: پی‌ال/پی‌جی‌اس‌کیوال (PL/pgSQL)، پی‌ال/تی‌سی‌ال (PL/TCL)، پی‌ال/پرل (PL/Perl)، و پی‌ال/پایتون (PL/Python).

به عنوان مثال برای ایجاد تابعی با استفاده از پی‌ال‌پایتون که کمینه دو عدد را محاسبه می‌کند، می‌توانیم به صورت زیر عمل کنیم:

```text
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) استفاده کند. با استفاده از این امکان، می‌توان جدولی ساخت که منبع اطلاعاتش هر منبع خارجی، مانند فایل موجود در سیستم فایل، یا پایگاه داده دیگر، یا یک وب سرویس باشد. این به این معنی است که پرس‌وجوها می‌توانند این منابع داده را مانند جدول عادی استفاده کنند، و حتی این جدول‌ها را با جدول‌های عادی پیوند دهد. لیستی از لفافه‌های خارجی داده در ویکی پستگرس‌کیوال موجود است.

به عنوان مثال، فرض کنید یک فایل دارید که هر رکورد آن در یک سطر قرار دارد و مقادیر فیلدها با کاراکتر «|» از هم جدا شده است، و هر رکورد شامل سه فیلد نام، شهر، و سن است. به صورت زیر می‌توان یک جدول ایجاد کرد که منبع داده‌هایش این فایل است:


```sql
CREATE FOREIGN TABLE person {
    name text,
    city text,
    age int4
} SERVER file_server
OPTIONS (format 'text', filename '/path/to/file', delimiter '|', null '');
```


برای اینکه بتوان تعریف بالا را انجام داد، ابتدا باید افزونه file_fdw و سرور file_server را ایجاد کرد:


```sql
CREATE EXTENSION IF NOT EXISTS file_fdw;

CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw;
```


قبل از نسخه ۹٫۳، لفافه‌های خارجی داده تنها خواندنی بودند. از نسخه ۹٫۳ به بعد امکان نوشتن در لفافه‌های خارجی داده نیز افزوده شد.

### انواع داده
انواع داده‌های وسیعی در پستگرس‌کیوال پشتیبانی می‌شوند، که شامل موارد زیر است:

* بولی
* اعداد با دقت دلخواه
* کاراکتری
* دودویی
* JSON

* تاریخ/زمان
* پول
* شمارشی (Enum)
* رشته بیتی
* هندسی

* نوع جستجوی رشته
* ترکیبی
* آرایه‌ها
* انواع اولیه هندسی
* بازه

* آدرس‌های IPv4 و IPv6
* بلوک‌های CIDR و آدرس‌های MAC
* XML
* UUID

### فهرست‌ها
از فهرست‌ها می‌توان برای بهبود عملکرد پایگاه‌داده استفاده کرد. فهرست‌ها به سرویس‌دهنده پایگاه‌داده اجازه می‌دهد تا سطرهای خاص را سریع‌تر از حالت بدون فهرست بیابد.

انواع مختلف فهرست در پستگرس‌کیوال موجود است، که شامل موارد زیر می‌شود:
* درخت‌های بی
* درهم‌سازی (Hash)
* درخت جستجوی تعمیم‌یافته (GiST)
* درخت جستجوی تعیم‌یافته با فضای تقسیم‌شده (SP-GiST)
* فهرست معکوس تعمیم‌یافته (GIN)

هر فهرست از الگوریتم متفاوتی استفاده می‌کند و برای انواع خاصی از پرس‌وجوها مناسب است.

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

### کنترل همروندی چندنسخه‌ای
پستگرس‌کیوال از کنترل همروندی چندنسخه‌ای  برای ثبات داده استفاده می‌کند. یعنی اینکه هر تراکنش، صرف‌نظر از وضعیت فعلی پایگاه‌داده، نسخه‌ای از پایگاه‌داده که مربوط به زمانی پیش است را می‌بیند. این ویژگی تراکنش‌ها را از مشاهده داده بی‌ثباتی که در طول اجرای تراکنش‌های همزمان بر روی سطرهای یکسان ایجاد می‌شود محافظت می‌کند.

مزیت اصلی کنترل همروندی چندنسخه‌ای این است که قفل‌های استفاده شده برای خواندن داده با قفل‌های استفاده شده برای نوشتن داده متفاوت است، و بنابراین نوشتن هرگز مانع خواندن و خواندن هرگز مانع نوشتن نمی‌شود.

## رابط‌های برنامه‌نویسی
برای پستگرس‌کیوال چندین نوع رابط وجود دارد، و به صورت وسیعی توسط کتابخانه‌های زبان‌های برنامه‌نویسی مختلف پشتیبانی شده است. این کتابخانه‌ها شامل موارد زیر است:

* سی (libpq)
* پرل
* تی‌سی‌ال

* جاوا
* لوا

* دات‌نت
* جاوااسکریپت

* درایور ODBC
* پایتون

## کاربران برجسته
کاربران برجسته پستگرس‌کیوال شامل موارد زیر است:

* یاهو! برای تحلیل رفتار کاربران وب
* ردیت، پایگاه اخبار اجتماعی
* اینستاگرم، سرویس اشتراک گزاری تصاویر
* جنی‌دات‌کام
* دیسکاس، سرویس بحث و نظردهی آنلاین

* اپن‌استریت‌مپ
* سونی آنلاین انترتینمنت
* ایستگاه فضایی بین‌المللی برای جمع‌آوری داده‌های مسافت‌سنجی در مدار
* هروکو

## جستارهای وابسته
* مای‌اس‌کیوال
* اس‌کیوال
* اس‌کیولایت

## پانویس

## پیوند به بیرون
* 
* 
* 

رده:پست‌گر اس‌کیوال
رده:سامانه‌های مدیریت پایگاه داده آزاد
رده:سامانه‌های مدیریت پایگاه داده‌ها
رده:نرم‌افزارهای آزاد نوشته‌شده با سی
رده:نرم‌افزارهای چندسکویی
رده:نرم‌افزارهایی که از wxWidgets استفاده می‌کنند
رده:نرم‌افزارهای ۱۹۹۶ (میلادی)
رده:پایگاه داده‌های برداری