پستگرسکیوال
پُستگْرِسکیواِل (به انگلیسی: PostgreSQL)، یا به طور سادهتر پُستگْرِس، یک سامانه مدیریت پایگاه دادههای شی-رابطهای است که برای سکوهای مختلفی از جمله لینوکس، فری بیاسدی، ویندوز، و مک اواس ده موجود است. پستگرسکیوال توسط گروه توسعه سراسری پستگرسکیوال توسعه داده میشود، که شامل تعداد زیادی از افراد داوطلب است.
توسعهدهنده(ها) | گروه توسعه سراسری پستگرسکیوال |
---|---|
انتشار ابتدایی | ۸ ژوئیه ۱۹۹۶ |
انتشار پایدار | ۱۲٫۳
۱۴ مه ۲۰۲۰ |
انتشار آزمایشی | ۱۳ آزمایشی ۱
|
مخزن | |
نوشتهشده با | سی (زبان برنامهنویسی) |
سیستمعامل | چندسکویی |
گونه | پایگاه داده رابطهای |
پروانه | پروانه پستگرسکیوال |
وبگاه |
منتشرکننده | گروه توسعه سراسری پستگرسکیوال نمایندگان دانشگاه کالیفرنیا |
---|---|
سازگار با رهنمودهای نرمافزار آزاد دبیان | بله |
پذیرفتهشده از سوی بنیاد نرمافزار آزاد | بله |
پذیرفتهشده از سوی پیشگامان متنباز | بله |
سازگار با گنو | بله |
کپیلفت | خیر |
پیوند از کد با مجوز دیگر | بله |
وبگاه | postgresql |
پستگرسکیوال بخش اعظم استاندارد اسکیوال:۲۰۰۸ را پیادهسازی میکند، ACID-موافق است، کاملاً تراکنشی است (این شامل شرحهای تعریف داده نیز میشود)، دارای نوع دادهها، عملگرها، روشهای فهرست، توابع، توابع جمعبندی، زبانهای رویهای قابل توسعه است، و دارای افزونههای بسیاری است که توسط دیگران ایجاد شده است.
تاریخچه
پستگرسکیوال تکامل یافته پروژه پستگرس (POSTGRES) در دانشگاه برکلی است. پستگرس ادامه پایگاه داده رابطهای اینگرس (INGRES) بود.
پروژه پستگرس برکلی
پیادهسازی پستگرس در سال ۱۹۸۶ آغاز شد. مفهومهای اولیه در مقاله «طراحی پستگرس» ارائه شد، و تعریف مدل داده اولیه در مقاله «مدل داده پستگرس» معرفی شد. طراحی سامانه قواعد در «طراحی سامانه قواعد پستگرس» شرح داده شد. معماری و منطق مدیر ذخیرهسازی در «طراحی سامانه ذخیرهسازی پستگرس» توضیح داده شد.
پستگرس ۹۵
در سال ۱۹۹۴، «اندرو یو» و «جولی چن» مفسر زبان اسکیوال (SQL) را به پستگرس اضافه کردند، که این نسخه از محصول با عنوان «پستگرس ۹۵» در وب به عنوان نسخه منبعبازی از کد اصلی پستگرس برکلی ارائه شد.
کد پستگرس ۹۵ کاملاً با زبان سی استاندارد نوشته شده بود و از لحاظ حجم کد ۲۵ درصد کوچکتر بود. نسخه ۱ پستگرس ۹۵ در آزمون وسیکانزین حدود ۳۰ الی ۵۰ درصد سریعتر از پستگرس ۴٫۲ عمل میکرد.
پستگرسکیوال
در سال ۱۹۹۶، واضح بود که نام «پستگرس ۹۵» نامی نیست که بتواند در طول زمان برجا بماند. به همین دلیل نام پستگرسکیوال انتخاب شد، تا هم رابطه با سیستم پستگرس اصلی نشان داده شود و هم امکانات استفاده از اسکیوال برجسته شود. همچنین، تصمیم گرفته شد که نسخهها از ۶. ۰ ادامه پیدا کنند، و نسخهگذاری پستگرس اصلی را ادامه دهند.
تاریخچه انتشار
انتشار | اولین انتشار | Latest minor version | آخرین انتشار | End of life | نقاط عطف |
---|---|---|---|---|---|
۶٫۰ | ۱۳۷۵/۱۱/۱۰ | — | — | — | اولین نسخه رسمی PostgreSQL، فهرستهای منحصر بفرد، ابزار pg_dumpall، احراز هویت |
۶٫۱ | ۱۳۷۶/۰۳/۱۸ | ۶٫۱٫۱ | ۱۳۷۶/۰۴/۳۱ | — | Multicolumn indexes, sequences, money data type, GEQO (GEnetic Query Optimizer) |
۶٫۲ | ۱۳۷۶/۰۷/۱۰ | ۶٫۲٫۱ | ۱۳۷۶/۰۷/۲۵ | — | JDBC interface, triggers, server programming interface, constraints |
۶٫۳ | ۱۳۷۶/۱۲/۱۰ | ۶٫۳٫۲ | ۱۳۷۷/۰۱/۱۸ | ۱۳۸۱/۱۲/۱۰ | SQL-92 subselect ability, PL/pgTCL |
۶٫۴ | ۱۳۷۷/۰۸/۰۸ | ۶٫۴٫۲ | ۱۳۷۷/۰۹/۲۹ | ۱۳۸۲/۰۸/۰۸ | VIEWs (then only read-only) and RULEs, PL/pgSQL |
۶٫۵ | ۱۳۷۸/۰۳/۱۹ | ۶٫۵٫۳ | ۱۳۷۸/۰۷/۲۱ | ۱۳۸۳/۰۳/۲۰ | MVCC, temporary tables, more SQL statement support (CASE, INTERSECT, and EXCEPT) |
۷٫۰ | ۱۳۷۹/۰۲/۱۹ | ۷٫۰٫۳ | ۱۳۷۹/۰۸/۲۱ | ۱۳۸۳/۰۲/۱۹ | Foreign keys, SQL-92 syntax for joins |
۷٫۱ | ۱۳۸۰/۰۱/۲۴ | ۷٫۱٫۳ | ۱۳۸۰/۰۵/۲۴ | ۱۳۸۵/۰۱/۲۴ | Write-ahead log, outer joins |
۷٫۲ | ۱۳۸۰/۱۱/۱۵ | ۷٫۲٫۸ | ۱۳۸۴/۰۲/۱۹ | ۱۳۸۵/۱۱/۱۵ | PL/Python, OIDs no longer required, internationalization of messages |
۷٫۳ | ۱۳۸۱/۰۹/۰۶ | ۷٫۳٫۲۱ | ۱۳۸۶/۱۰/۱۷ | ۱۳۸۶/۰۹/۰۶ | Schema, table function, prepared query |
۷٫۴ | ۱۳۸۲/۰۸/۲۶ | ۷٫۴٫۳۰ | ۱۳۸۹/۰۷/۱۲ | ۱۳۸۹/۰۷/۰۹ | Optimization on JOINs and data warehouse functions |
۸٫۰ | ۱۳۸۳/۱۰/۳۰ | ۸٫۰٫۲۶ | ۱۳۸۹/۰۷/۱۲ | ۱۳۸۹/۰۷/۰۹ | Native server on Microsoft Windows, savepoints, tablespaces, point-in-time recovery |
۸٫۱ | ۱۳۸۴/۰۸/۱۷ | ۸٫۱٫۲۳ | ۱۳۸۹/۰۹/۲۵ | ۱۳۸۹/۰۸/۱۷ | Performance optimization, two-phase commit, table partitioning, index bitmap scan, shared row locking, roles |
۸٫۲ | ۱۳۸۵/۰۹/۱۴ | ۸٫۲٫۲۳ | ۱۳۹۰/۰۹/۱۴ | ۱۳۹۰/۰۹/۱۴ | Performance optimization, online index builds, advisory locks, warm standby |
۸٫۳ | ۱۳۸۶/۱۱/۱۵ | ۸٫۳٫۲۳ | ۱۳۹۱/۱۱/۱۹ | ۱۳۹۱/۱۱/۱۹ | Heap-only tuples, full text search, SQL/XML, ENUM types, UUID types |
۸٫۴ | ۱۳۸۸/۰۴/۱۰ | ۸٫۴٫۲۲ | ۱۳۹۳/۰۵/۰۲ | ۱۳۹۳/۰۵/۰۲ | Windowing functions, column-level permissions, parallel database restore, per-database collation, common table expressions and recursive queries |
۹٫۰ | ۱۳۸۹/۰۶/۲۹ | ۹٫۰٫۲۳ | ۱۳۹۴/۰۷/۱۶ | ۱۳۹۴/۰۷/۱۶ | Built-in binary streaming replication, hot standby, in-place upgrade ability, 64-bit Windows |
۹٫۱ | ۱۳۹۰/۰۶/۲۱ | ۹٫۱٫۲۴ | ۱۳۹۵/۰۸/۰۶ | ۱۳۹۵/۰۸/۰۶ | Synchronous replication, per-column collations, unlogged tables, serializable snapshot isolation, writeable common table expressions, SELinux integration, extensions, foreign tables |
۹٫۲ | ۱۳۹۱/۰۶/۲۰ | ۹٫۲٫۲۴ | ۱۳۹۶/۰۸/۱۸ | ۱۳۹۶/۰۸/۱۸ | Cascading streaming replication, index-only scans, native JSON support, improved lock management, range types, pg_receivexlog tool, space-partitioned GiST indexes |
۹٫۳ | ۱۳۹۲/۰۶/۱۸ | ۹٫۳٫۲۵ | ۱۳۹۷/۰۸/۱۷ | ۱۳۹۷/۰۸/۱۷ | Custom background workers, data checksums, dedicated JSON operators, LATERAL JOIN, faster pg_dump, new pg_isready server monitoring tool, trigger features, view features, writeable foreign tables, materialized views, replication improvements |
۹٫۴ | 2014-12-18 | ۹٫۴٫۲۶ | ۱۳۹۸/۱۱/۲۴ | ۱۳۹۸/۱۱/۲۴ | JSONB data type, ALTER SYSTEM statement for changing config values, ability to refresh materialized views without blocking reads, dynamic registration/start/stop of background worker processes, Logical Decoding API, GiN index improvements, Linux huge page support, database cache reloading via pg_prewarm, reintroducing Hstore as the column type of choice for document-style data. |
۹٫۵ | ۱۳۹۴/۱۰/۱۷ | ۹٫۵٫۲۲ | ۱۳۹۹/۰۲/۲۵ | ۱۳۹۹/۱۱/۲۳ | UPSERT, row level security, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS, and new BRIN index |
۹٫۶ | ۱۳۹۵/۰۷/۰۸ | ۹٫۶٫۱۸ | ۱۳۹۹/۰۲/۲۵ | ۱۴۰۰/۰۸/۲۰ | Parallel query support, PostgreSQL foreign data wrapper (FDW) improvements with sort/join pushdown, multiple synchronous standbys, faster vacuuming of large table |
۱۰ | ۱۳۹۶/۰۷/۱۳ | ۱۰٫۱۳ | ۱۳۹۹/۰۲/۲۵ | ۱۴۰۱/۰۸/۱۹ | Logical replication, declarative table partitioning, improved query parallelism |
۱۱ | ۱۳۹۷/۰۷/۲۶ | ۱۱٫۸ | ۱۳۹۹/۰۲/۲۵ | ۱۴۰۲/۰۸/۱۸ | Increased robustness and performance for partitioning, transactions supported in stored procedures, enhanced abilities for query parallelism, just-in-time (JIT) compiling for expressions |
۱۲ | ۱۳۹۸/۰۷/۱۱ | ۱۲٫۳ | ۱۳۹۹/۰۲/۲۵ | ۱۴۰۳/۰۸/۲۴ | Improvements to query performance and space utilization; SQL/JSON path expression support; generated columns; improvements to internationalization, and authentication; new pluggable table storage interface. |
۱۳ | — | ۱۳ آزمایشی ۱ | ۱۳۹۹/۰۳/۰۱ | — |
سکوها
معماریهای دستور عمل
پُستگرسکیواِل بر روی هر کدام از معماریهای زیر عمل میکند: ایکس۸۶، ایکس۸۶-۶۴، آیای۶۴ ایتانیوم، پاور پیسی، پاور پیسی۶۴، 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_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;
قبل از نسخه ۹٫۳، لفافههای خارجی داده تنها خواندنی بودند. از نسخه ۹٫۳ به بعد امکان نوشتن در لفافههای خارجی داده نیز افزوده شد.
انواع داده
انواع دادههای وسیعی در پستگرسکیوال پشتیبانی میشوند، که شامل موارد زیر است:
فهرستها
از فهرستها میتوان برای بهبود عملکرد پایگاهداده استفاده کرد. فهرستها به سرویسدهنده پایگاهداده اجازه میدهد تا سطرهای خاص را سریعتر از حالت بدون فهرست بیابد.
انواع مختلف فهرست در پستگرسکیوال موجود است، که شامل موارد زیر میشود:
- درختهای بی
- درهمسازی (Hash)
- درخت جستجوی تعمیمیافته (GiST)
- درخت جستجوی تعیمیافته با فضای تقسیمشده (SP-GiST)
- فهرست معکوس تعمیمیافته (GIN)
هر فهرست از الگوریتم متفاوتی استفاده میکند و برای انواع خاصی از پرسوجوها مناسب است.
قابلیت اطمینان
پستگرسکیوال از واقعهنگاری قبل نوشتن (به انگلیسی: Write-Ahead Logging یا WAL) برای اطمینان از جامعیت داده استفاده میکند. به طور خلاصه، مفهوم اصلی WAL این است که تغییرات فایلهای داده (محل ذخیرهسازی جدولها و فهرستها) تنها در صورتی باید انجام شود که این تغییرات واقعهنگاری شدهاند، و رکوردهای واقعهنگاری مرتبط در حافظه دایمی ثبت شده است. در اینصورت، درصورت بروز اشکال در اجرای پایگاهداده، میتوانیم با استفاده از وقایع ثبتشده دادهها را بازیابی کنیم.
کنترل همروندی چندنسخهای
پستگرسکیوال از کنترل همروندی چندنسخهای (به انگلیسی: Multiversion Concurrency Control یا MVCC) برای ثبات داده استفاده میکند. یعنی اینکه هر تراکنش، صرفنظر از وضعیت فعلی پایگاهداده، نسخهای از پایگاهداده که مربوط به زمانی پیش است را میبیند. این ویژگی تراکنشها را از مشاهده داده بیثباتی که در طول اجرای تراکنشهای همزمان بر روی سطرهای یکسان ایجاد میشود محافظت میکند.
مزیت اصلی کنترل همروندی چندنسخهای این است که قفلهای استفاده شده برای خواندن داده با قفلهای استفاده شده برای نوشتن داده متفاوت است، و بنابراین نوشتن هرگز مانع خواندن و خواندن هرگز مانع نوشتن نمیشود.
رابطهای برنامهنویسی
برای پستگرسکیوال چندین نوع رابط وجود دارد، و به صورت وسیعی توسط کتابخانههای زبانهای برنامهنویسی مختلف پشتیبانی شده است. این کتابخانهها شامل موارد زیر است:
کاربران برجسته
کاربران برجسته پستگرسکیوال شامل موارد زیر است:
جستارهای وابسته
پانویس
- ↑ "PostgreSQL 12.3, 11.8, 10.13, 9.6.18, and 9.5.22 Released!". PostgreSQL. The PostgreSQL Global Development Group. 2020-05-14. Retrieved 2020-05-15.
- ↑ "پروانه پستگرسکیوال توسط اواسآی تأیید شد". 2010-02-18. Archived from the original on 8 August 2016. Retrieved 2010-02-18.
- ↑ "پروانه پستگرسکیوالاواسآی". 2010-02-20. Retrieved 2010-02-20.
- ↑ "پروانه". گروه توسعه سراسری پستگرسکیوال. Retrieved 2010-09-20.
- ↑ "PostgreSQL 13 Beta 1 Released!". PostgreSQL. The PostgreSQL Global Development Group. 2020-05-21. Retrieved 2020-05-15.
- ↑ "Debian -- Details of package postgresql in sid". debian.org.
- ↑ "Licensing:Main". FedoraProject.
- ↑ "PostgreSQL". fsf.org.
- ↑ "OSI PostgreSQL Licence". Open Source Initiative. February 20, 2010. Retrieved February 20, 2010.
- ↑ مستندات پستگرسکیوال: پستگرسکیوال چیست؟
- ↑ مستندات پستگرسکیوال: سکوهای پشتیبانی شده
- ↑ مستندات پسترگسکیوال: پیروی از اسکیوال
- ↑ درباره پستگرسکیوال
- ↑ مستندات پستگرسکیوال: تراکنشها
- ↑ مستندات پستگرسکیوال: تاریخچه
- ↑ مقاله طراحی پستگرس
- ↑ "Versioning policy". PostgreSQL Global Development Group. Retrieved October 4, 2018.
- ↑ Vaas, Lisa (December 2, 2002). "Databases Target Enterprises". eWeek. Retrieved October 29, 2016.
- ↑ Krill, Paul (November 20, 2003). "PostgreSQL boosts open source database". InfoWorld. Retrieved October 21, 2016.
- ↑ Krill, Paul (January 19, 2005). "PostgreSQL open source database boasts Windows boost". InfoWorld. Retrieved November 2, 2016.
- ↑ Weiss, Todd R. (December 5, 2006). "Version 8.2 of open-source PostgreSQL DB released". Computerworld. Retrieved October 17, 2016.
- ↑ Gilbertson, Scott (February 5, 2008). "PostgreSQL 8.3: Open Source Database Promises Blazing Speed". Wired. Retrieved October 17, 2016.
- ↑ Huber, Mathias (July 2, 2009). "PostgreSQL 8.4 Proves Feature-Rich". Linux Magazine. Retrieved October 17, 2016.
- ↑ Brockmeier, Joe (September 30, 2010). "Five Enterprise Features in PostgreSQL 9". Linux.com. Linux Foundation. Retrieved February 6, 2017.
- ↑ Timothy Prickett Morgan (September 12, 2011). "PostgreSQL revs to 9.1, aims for enterprise". The Register. Retrieved February 6, 2017.
- ↑ "PostgreSQL: PostgreSQL 9.2 released". www.postgresql.org.
- ↑ "Reintroducing Hstore for PostgreSQL". InfoQ.
- ↑ Richard, Chirgwin (January 7, 2016). "Say oops, UPSERT your head: PostgreSQL version 9.5 has landed". The Register. Retrieved October 17, 2016.
- ↑ "PostgreSQL: Documentation: 10: Chapter 31. Logical Replication". www.postgresql.org.
- ↑ "PostgreSQL 11 Released". Retrieved October 18, 2018.
- ↑ "PostgreSQLRelease Notes". Retrieved October 18, 2018.
- ↑ "PostgreSQL: PostgreSQL 12 Released!". www.postgresql.org.
- ↑ مستندات پستگرسکیوال - توابع زبانهای رویهای
- ↑ پستگرسکیوال ۹٫۱ عرضه شد
- ↑ «جدولهای خارجی قابل نوشتن». بایگانیشده از اصلی در ۲۳ دسامبر ۲۰۱۴. دریافتشده در ۱۴ مارس ۲۰۱۳.
- ↑ مستندات پستگرسکیوال - انواع داده
- ↑ مستندات پستگرسکیوال: انواع فهرست
- ↑ مستندات پستگرسکیوال - واقعهنگاری قبل نوشتن
- ↑ مستندات پستگرسکیوال - کنترل همروندی - معرفی
- ↑ اندازه مهم است: یاهو ادعا میکند که پایگاه داده ۲ پتابایتی بزرگترین و مشغولترین پایگاهداده است
- ↑ یاهو ادعای رکورد با پایگاهداده پتابایتی میکند
- ↑ صفحه گیتهاب ردیت - راهنمای نصب
- ↑ بالا نگه داشتن اینستاگرام با بیش از یک میلیون کاربر جدید در ۱۲ ساعت
- ↑ وبلاگ جنیداتکام - قطعی هفته پیش
- ↑ پستگرس در دیسکاس
- ↑ ویکی اپناستریتمپ - پایگاهداده
- ↑ سونی آنلاین به جای اوراکل از پایگاهداده متنباز استفاده میکند
- ↑ لیست ایمیلی پستگرساسکیوال - ناسا به کمک پستگرس-ناگیون نیاز دارد
- ↑ «پستگرس هروکو». بایگانیشده از اصلی در ۹ مه ۲۰۱۲. دریافتشده در ۲۶ اکتبر ۲۰۱۲.