آشنایی با افزونه های در دسترس PostgreSQL


در حال حاضر، در دیتابیس PostgreSQL لیارا، افزونه‌های زیر، ارائه می‌شوند:

  • PostGIS
  • Pgvector

علاوه بر این دو افزونه، ۵۲ افزونه دیگر نیز در دیتابیس PostgreSQL لیارا در دسترس هستند. بخش عمده‌ای از این افزونه‌ها، جزو ماژول‌های رسمی PostgreSQL (contrib) هستند و تعدادی از آن‌ها نیز، همراه با افزونه PostGIS نصب شده‌اند. در ادامه، به توضیح هر یک از افزونه‌ها پرداخته شده است.

افزونه PostGIS چیست؟

PostGIS قابلیت‌های ذخیره‌سازی (storing)، ایندکس‌گذاری (indexing) و querying داده‌های مکانی یا همان geospatial data را به دیتابیس PostgreSQL اضافه می‌کند. این افزونه، قابلیت‌های زیر را دارد:

  • امکان ذخیره‌سازی انواع مختلف داده‌های مکانی مانند نقاط، خطوط، چندضلعی‌ها و multi-geometryها در هر دو حالت دوبعدی (2D) و سه‌بعدی (3D)
  • امکان جستجو و بازیابی سریع spatial data بر اساس موقعیت مکانی آن‌ها
  • پشتیبانی از مجموعه گسترده‌ای از توابع مکانی که امکان فیلتر و تحلیل داده‌های مکانی، اندازه‌گیری فواصل و مساحت‌ها و سایر عملیات را فراهم می‌کند
  • امکان استفاده از ابزارهایی برای پردازش و دستکاری داده‌های هندسی، مانند ساده‌سازی، تبدیل و تعمیم هندسه‌ها
  • امکان ذخیره‌سازی و پردازش داده‌های raster مانند داده‌های ارتفاعی و داده‌های هواشناسی
  • امکان استفاده از توابع مربوط به geocoding و geocoding معکوس
  • امکان دسترسی و کار با PostGIS از طریق ابزارهای جانبی مانند QGIS , GeoServer , MapServer , ArcGIS و Tableau

افزونه Pgvector چیست؟

Pgvector این امکان را به شما می‌دهد تا بردارهای خود را همراه با سایر داده‌ها، ذخیره کنید. این افزونه، از موارد زیر، پشتیبانی می‌کند:

  • جستجوی نزدیک‌ترین همسایه دقیق و تقریبی
  • بردارهای با دقت Single-precision , Half-precision، باینری و Sparse
  • فاصله‌های مختلف: فاصله L2 , Inner Product , کسینوسی، L1، هامینگ و جاکارد (Jaccard)
  • استفاده از هر زبان برنامه‌نویسی که کلاینت PostgreSQL را دارد

این افزونه، از اصول ACID، بازیابی point-in-time، عملیات JOIN و سایر ویژگی‌های برجسته PostgreSQL نیز، پشتیبانی می‌کند.

نحوه فعال‌سازی افزونه‌ها

افزونه‌ها در PostgreSQL، به ازای هر دیتابیس فعال می‌شوند؛ بنابراین، پس از اتصال به دیتابیس موردنظر، کافیست تا مشابه دستور زیر، نام افزونه را در دستور CREATE EXTENSION وارد کنید:

کپی
CREATE EXTENSION IF NOT EXISTS pg_trgm;

برای مشاهده فهرست افزونه‌های در دسترس و نسخه آن‌ها نیز، می‌توانید از دستور زیر استفاده کنید:

کپی
SELECT name, default_version, installed_version FROM pg_available_extensions ORDER BY name;

افزونه‌های نصب‌شده همراه با PostGIS

افزونه‌های این بخش، جزو ماژول‌های پیش‌فرض PostgreSQL نیستند و به همراه افزونه PostGIS نصب شده‌اند. اکثر این افزونه‌ها، برای کار کردن، به خود افزونه postgis نیاز دارند؛ بنابراین، پیش از فعال‌سازی آن‌ها، افزونه PostGIS را در دیتابیس خود فعال کنید.

افزونه address_standardizer

افزونه address_standardizer برای تجزیه (parse) یک آدرس پستی به اجزای تشکیل‌دهنده آن مانند شماره پلاک، نام خیابان، شهر، ایالت و کد پستی استفاده می‌شود و آن اجزا را به یک قالب استاندارد و یکسان تبدیل می‌کند. این افزونه، بر اساس جداول قواعد (rules)، واژه‌نامه (lexicon) و gazetteer کار می‌کند و معمولاً در فرایند پاک‌سازی داده‌های آدرس و آماده‌سازی آن‌ها برای geocoding، مورد استفاده قرار می‌گیرد.

افزونه address_standardizer_data_us

افزونه address_standardizer_data_us، داده‌های نمونه و آماده‌ای شامل جداول rules، lexicon و gazetteer را برای استانداردسازی آدرس‌های کشور ایالات متحده، در اختیار افزونه address_standardizer قرار می‌دهد. با فعال‌سازی این افزونه، دیگر نیازی به ساخت دستی این جداول نیست و می‌توانید مستقیماً، آدرس‌های آمریکایی را استانداردسازی کنید؛ همچنین، می‌توانید از این جداول، به عنوان الگویی برای ساخت داده‌های مشابه برای سایر کشورها، استفاده کنید.

افزونه postgis_raster

افزونه postgis_raster، پشتیبانی از داده‌های raster (داده‌های شبکه‌ای و پیکسلی مانند تصاویر ماهواره‌ای، مدل‌های ارتفاعی زمین و نقشه‌های دمایی) را به PostGIS اضافه می‌کند. این افزونه، نوع داده raster و مجموعه‌ای از توابع را برای ذخیره‌سازی، تحلیل، برش، محاسبات جبری روی باندها و تبدیل بین داده‌های raster و vector، فراهم می‌کند.

افزونه postgis_sfcgal

افزونه postgis_sfcgal، توابع PostGIS را با استفاده از کتابخانه SFCGAL (مبتنی بر CGAL) گسترش می‌دهد و امکان انجام عملیات هندسی پیشرفته به ویژه روی داده‌های سه‌بعدی را فراهم می‌کند. عملیاتی مانند محاسبه حجم، اکستروژن (extrude) اشکال، اشتراک و تفاضل سه‌بعدی، straight skeleton و محاسبه دقیق‌تر برخی روابط هندسی، از جمله قابلیت‌های این افزونه هستند.

افزونه postgis_tiger_geocoder

افزونه postgis_tiger_geocoder، یک geocoder مبتنی بر داده‌های TIGER (داده‌های رسمی اداره سرشماری آمریکا) است که امکان تبدیل آدرس‌های متنی به مختصات جغرافیایی (geocoding) و برعکس (reverse geocoding) را فراهم می‌کند. این افزونه، به افزونه‌های postgis و fuzzystrmatch وابسته است و تنها برای آدرس‌های ایالات متحده کاربرد دارد؛ همچنین، برای استفاده از آن، باید داده‌های TIGER در دیتابیس بارگذاری شوند.

افزونه postgis_topology

افزونه postgis_topology، امکان مدیریت داده‌های مکانی به صورت توپولوژیک را فراهم می‌کند؛ در این مدل، به جای ذخیره مستقل هر شکل، اجزای مشترک مانند گره‌ها (nodes)، یال‌ها (edges) و وجه‌ها (faces) یک بار ذخیره شده و بین عوارض مختلف، به اشتراک گذاشته می‌شوند. این رویکرد، برای داده‌هایی مانند مرزهای اداری و قطعات زمین که باید بدون هم‌پوشانی و شکاف کنار هم قرار بگیرند، بسیار کاربردی است و ویرایش یکپارچه آن‌ها را ساده‌تر می‌کند.

سایر افزونه‌های در دسترس

افزونه‌های این بخش، جزو ماژول‌های رسمی PostgreSQL هستند که همراه با توزیع PostgreSQL ارائه می‌شوند. برخی از این افزونه‌ها مانند plpgsql، به صورت پیش‌فرض در هر دیتابیس فعال هستند و سایر افزونه‌ها، باید طبق بخش فعال‌سازی افزونه‌ها، به صورت دستی فعال شوند.

افزونه amcheck

افزونه amcheck، توابعی را برای بررسی سلامت و یکپارچگی ساختار منطقی ایندکس‌های B-Tree و جداول (heap) فراهم می‌کند. با استفاده از این افزونه، می‌توانید خرابی‌های احتمالی ناشی از مشکلات سخت‌افزاری، باگ‌های نرم‌افزاری یا تغییر رفتار collationها را پیش از آن‌که منجر به نتایج نادرست در کوئری‌ها شوند، شناسایی کنید.

افزونه autoinc

افزونه autoinc، یک تابع trigger به نام ()autoinc ارائه می‌دهد که در زمان درج یا به‌روزرسانی رکورد، مقدار بعدی یک sequence را در فیلد عددی مشخص‌شده قرار می‌دهد. این افزونه، بیشتر به عنوان نمونه‌ای از نوشتن trigger با رابط SPI ارائه شده است و در اکثر موارد، استفاده از ستون‌های serial یا identity جایگزین مناسب‌تری برای آن است.

افزونه bloom

افزونه bloom، یک نوع ایندکس مبتنی بر Bloom filter را به PostgreSQL اضافه می‌کند. این ایندکس، برای جداولی با ستون‌های زیاد که کوئری‌ها روی ترکیب‌های دلخواهی از این ستون‌ها با شرط برابری اجرا می‌شوند، مناسب است؛ زیرا به جای ساخت چندین ایندکس B-Tree، یک ایندکس کم‌حجم روی همه ستون‌ها ساخته می‌شود؛ البته این ایندکس، احتمال نتایج مثبت کاذب دارد که در مرحله بعد، با بررسی رکوردها، حذف می‌شوند.

افزونه btree_gin

افزونه btree_gin، کلاس‌های عملگری (operator class) را برای ایندکس GIN فراهم می‌کند که رفتاری مشابه B-Tree را برای انواع داده معمولی مانند اعداد، متن و تاریخ شبیه‌سازی می‌کنند. کاربرد اصلی این افزونه، ساخت ایندکس‌های چندستونی GIN است که در آن، یک ستون از نوع داده‌ای مانند jsonb یا آرایه و ستون دیگر، از یک نوع داده ساده است.

افزونه btree_gist

افزونه btree_gist، کلاس‌های عملگری را برای ایندکس GiST فراهم می‌کند که امکان ایندکس‌گذاری انواع داده ساده را با رفتاری مشابه B-Tree می‌دهند. این افزونه، به ویژه برای ساخت exclusion constraintها کاربرد دارد؛ برای مثال، می‌توانید جلوی رزرو هم‌زمان یک اتاق (ستون عددی) در بازه‌های زمانی دارای هم‌پوشانی (ستون range) را بگیرید.

افزونه citext

افزونه citext، نوع داده citext را برای ذخیره رشته‌های متنی غیرحساس به بزرگی و کوچکی حروف (case-insensitive) اضافه می‌کند. مقایسه‌ها در این نوع داده، بدون توجه به بزرگی و کوچکی حروف انجام می‌شوند؛ بنابراین، برای ستون‌هایی مانند ایمیل یا نام کاربری که باید یکتا باشند، دیگر نیازی به استفاده مکرر از تابع ()lower در کوئری‌ها و ایندکس‌ها نیست.

افزونه cube

افزونه cube، نوع داده cube را برای نمایش نقاط و مکعب‌های چندبعدی اضافه می‌کند. این افزونه، عملگرهایی برای بررسی هم‌پوشانی، شمول و محاسبه فاصله (اقلیدسی، منهتن و چبیشف) ارائه می‌دهد و با پشتیبانی از ایندکس GiST، امکان جستجوی سریع نزدیک‌ترین همسایه‌ها را در فضاهای چندبعدی فراهم می‌کند؛ همچنین، این افزونه، پیش‌نیاز افزونه earthdistance است.

افزونه dblink

افزونه dblink، امکان اتصال به یک دیتابیس PostgreSQL دیگر و اجرای کوئری روی آن را از داخل یک session فعلی فراهم می‌کند. با استفاده از توابع این افزونه، می‌توانید نتایج کوئری‌های دیتابیس راه‌دور را مانند یک جدول دریافت کنید یا دستورات را به صورت غیرهم‌زمان (asynchronous) اجرا کنید؛ البته در اکثر موارد جدید، افزونه postgres_fdw رابط استانداردتر و کامل‌تری ارائه می‌دهد.

افزونه dict_int

افزونه dict_int، یک دیکشنری نمونه برای جستجوی تمام‌متن (Full-Text Search) است که نحوه ایندکس‌گذاری اعداد صحیح را کنترل می‌کند. این دیکشنری، با محدود کردن تعداد ارقام اعداد، از ایجاد تعداد بسیار زیادی واژه یکتا در ایندکس جلوگیری کرده و در نتیجه، کارایی جستجو را بهبود می‌بخشد.

افزونه dict_xsyn

افزونه dict_xsyn، یک دیکشنری توسعه‌یافته مترادف (Extended Synonym) برای جستجوی تمام‌متن است که هر کلمه را با گروهی از مترادف‌های آن جایگزین می‌کند. با استفاده از این افزونه، می‌توانید یک فایل مترادف تعریف کنید تا جستجو برای یک کلمه، نتایج مربوط به مترادف‌های آن را نیز، شامل شود.

افزونه earthdistance

افزونه earthdistance، دو روش برای محاسبه فاصله دو نقطه روی سطح کره زمین بر اساس طول و عرض جغرافیایی ارائه می‌دهد؛ روش اول مبتنی بر افزونه cube و روش دوم مبتنی بر نوع داده داخلی point است. این افزونه، زمین را یک کره کامل در نظر می‌گیرد؛ بنابراین، برای محاسبات ساده مانند یافتن مکان‌های نزدیک کافیست، اما برای محاسبات دقیق مکانی، استفاده از PostGIS توصیه می‌شود.

افزونه file_fdw

افزونه file_fdw، یک Foreign Data Wrapper است که امکان دسترسی به فایل‌های موجود در فایل‌سیستم سرور دیتابیس را، به شکل یک جدول خارجی (foreign table) فراهم می‌کند. فایل‌ها باید در قالبی قابل خواندن توسط دستور COPY FROM مانند CSV یا text باشند؛ توجه داشته باشید که ایجاد جداول خارجی با این افزونه، به دسترسی‌های سطح بالا نیاز دارد.

افزونه fuzzystrmatch

افزونه fuzzystrmatch، توابعی را برای سنجش میزان شباهت و فاصله بین رشته‌ها فراهم می‌کند. الگوریتم‌هایی مانند Levenshtein برای محاسبه فاصله ویرایشی و Soundex، Metaphone و Double Metaphone برای مقایسه آوایی کلمات، در این افزونه پیاده‌سازی شده‌اند که برای یافتن کلمات با املای مشابه یا تشخیص غلط‌های تایپی کاربرد دارند.

افزونه hstore

افزونه hstore، نوع داده hstore را برای ذخیره مجموعه‌ای از جفت‌های کلید-مقدار (key-value) در یک ستون اضافه می‌کند. این افزونه، برای داده‌های نیمه‌ساختاریافته یا رکوردهایی با ویژگی‌های متغیر مناسب است و از ایندکس‌های GIN و GiST پشتیبانی می‌کند؛ البته در پروژه‌های جدید، نوع داده jsonb امکانات گسترده‌تری ارائه می‌دهد.

افزونه insert_username

افزونه insert_username، یک تابع trigger ارائه می‌دهد که نام کاربر فعلی دیتابیس را در یک فیلد متنی مشخص، ذخیره می‌کند. با استفاده از این افزونه، می‌توانید به سادگی ثبت کنید که هر رکورد، آخرین بار توسط کدام کاربر دیتابیس درج یا ویرایش شده است.

افزونه intagg

افزونه intagg، یک aggregator و یک enumerator برای اعداد صحیح ارائه می‌دهد که امکان تجمیع مقادیر در یک آرایه و باز کردن آرایه به چند رکورد را فراهم می‌کنند. این افزونه، اکنون منسوخ (obsolete) محسوب می‌شود و صرفاً برای سازگاری با نسخه‌های قدیمی حفظ شده است؛ زیرا توابع داخلی array_agg و unnest همان قابلیت‌ها را ارائه می‌دهند.

افزونه intarray

افزونه intarray، توابع و عملگرهای متعددی را برای کار با آرایه‌های اعداد صحیح (بدون مقدار null) فراهم می‌کند؛ مانند مرتب‌سازی، حذف مقادیر تکراری، اشتراک و اجتماع آرایه‌ها. همچنین، این افزونه، از ایندکس‌های GiST و GIN پشتیبانی می‌کند که جستجوی سریع رکوردهایی که آرایه آن‌ها شامل یا هم‌پوشان با مقادیر خاصی است را ممکن می‌سازد؛ این قابلیت، برای پیاده‌سازی سیستم‌های برچسب‌گذاری (tagging) کاربردی است.

افزونه isn

افزونه isn، انواع داده‌ای را برای استانداردهای شماره‌گذاری بین‌المللی محصولات مانند EAN13 , UPC , ISBN , ISMN و ISSN اضافه می‌کند. مقادیر این انواع داده، در هنگام ورود، بر اساس رقم کنترلی (check digit) اعتبارسنجی می‌شوند و امکان تبدیل بین قالب‌های مختلف مانند ISBN-10 و ISBN-13 نیز، فراهم است.

افزونه lo

افزونه lo، امکاناتی را برای مدیریت Large Objectها (اشیای حجیم باینری) فراهم می‌کند؛ از جمله نوع داده lo و تابع trigger به نام lo_manage. این trigger، هنگام حذف یا تغییر رکوردی که به یک Large Object اشاره دارد، شیء مربوطه را نیز حذف می‌کند تا از باقی ماندن اشیای بی‌استفاده (orphan) در دیتابیس جلوگیری شود.

افزونه ltree

افزونه ltree، نوع داده ltree را برای نمایش برچسب‌های داده‌ای که در یک ساختار درختی و سلسله‌مراتبی ذخیره شده‌اند (مانند Top.Science.Astronomy) اضافه می‌کند. این افزونه، عملگرها و الگوهای جستجوی قدرتمندی برای یافتن والدها، فرزندان و مسیرهای منطبق با یک الگو ارائه می‌دهد و برای پیاده‌سازی دسته‌بندی‌های تودرتو، نمودارهای سازمانی و ساختار منوها مناسب است.

افزونه moddatetime

افزونه moddatetime، یک تابع trigger ارائه می‌دهد که در هنگام به‌روزرسانی هر رکورد، زمان فعلی را در یک فیلد از نوع timestamp ذخیره می‌کند. این افزونه، روشی ساده برای نگه‌داری خودکار ستون‌هایی مانند updated_at است و نیاز به نوشتن تابع trigger اختصاصی را برطرف می‌کند.

افزونه pageinspect

افزونه pageinspect، توابعی را برای بررسی محتوای صفحات (pages) دیتابیس در سطح پایین فراهم می‌کند. با استفاده از این افزونه، می‌توانید ساختار داخلی صفحات جداول و ایندکس‌ها، هدرها و tupleها را مشاهده کنید که برای اشکال‌زدایی و یادگیری عملکرد داخلی PostgreSQL مفید است؛ استفاده از اکثر توابع این افزونه، به دسترسی superuser نیاز دارد.

افزونه pg_buffercache

افزونه pg_buffercache، امکان مشاهده لحظه‌ای وضعیت shared buffer cache در PostgreSQL را فراهم می‌کند. با استفاده از این افزونه، می‌توانید بررسی کنید که کدام جداول و ایندکس‌ها، چه مقدار از حافظه کش را اشغال کرده‌اند و چه تعداد از بافرها dirty هستند؛ این اطلاعات، برای تنظیم مقدار shared_buffers و تحلیل عملکرد، کاربردی است.

افزونه pg_freespacemap

افزونه pg_freespacemap، امکان بررسی Free Space Map (نقشه فضای آزاد) جداول و ایندکس‌ها را فراهم می‌کند. با استفاده از توابع این افزونه، می‌توانید مقدار فضای آزاد ثبت‌شده برای هر صفحه از یک جدول را مشاهده کنید و میزان پراکندگی فضای خالی و اثر عملیات VACUUM را تحلیل کنید.

افزونه pg_logicalinspect

افزونه pg_logicalinspect، توابعی برای بررسی محتوای فایل‌های snapshot مربوط به logical decoding فراهم می‌کند. این افزونه، که از نسخه ۱۸ PostgreSQL ارائه شده است، بیشتر برای اشکال‌زدایی و آموزش در زمینه logical replication کاربرد دارد و به شما کمک می‌کند تا اطلاعات ذخیره‌شده در snapshotهای logical را مشاهده کنید.

افزونه pg_prewarm

افزونه pg_prewarm، امکان بارگذاری داده‌های جداول و ایندکس‌ها در حافظه کش سیستم‌عامل یا shared buffers را فراهم می‌کند. با استفاده از این افزونه، پس از راه‌اندازی مجدد دیتابیس، می‌توانید داده‌های پرکاربرد را از پیش در حافظه بارگذاری کنید تا کوئری‌های اولیه، به دلیل خالی بودن کش، کند اجرا نشوند.

افزونه pg_stat_statements

افزونه pg_stat_statements، آمار اجرای تمام کوئری‌های اجراشده در دیتابیس را جمع‌آوری و نگه‌داری می‌کند؛ اطلاعاتی مانند تعداد دفعات اجرا، مجموع و میانگین زمان اجرا، تعداد رکوردهای بازگشتی و میزان استفاده از بافرها. این افزونه، یکی از مهم‌ترین ابزارها برای شناسایی کوئری‌های کند و پرهزینه و بهینه‌سازی عملکرد دیتابیس است.

افزونه pg_surgery

افزونه pg_surgery، توابعی برای اصلاح مستقیم tupleهای یک جدول در سطح پایین ارائه می‌دهد؛ مانند حذف اجباری یک tuple یا علامت‌گذاری آن به عنوان frozen. این افزونه، صرفاً برای بازیابی جداول آسیب‌دیده در شرایط اضطراری طراحی شده است و استفاده نادرست از آن می‌تواند منجر به ناسازگاری یا از دست رفتن داده شود؛ بنابراین، تنها با آگاهی کامل و پس از تهیه بکاپ، از آن استفاده کنید.

افزونه pg_trgm

افزونه pg_trgm، توابع و عملگرهایی برای تعیین میزان شباهت متن‌ها بر اساس trigramها (دنباله‌های سه‌حرفی) ارائه می‌دهد. این افزونه، با پشتیبانی از ایندکس‌های GIN و GiST، امکان جستجوی سریع شباهت‌محور (fuzzy search) و همچنین تسریع کوئری‌های LIKE، ILIKE و عبارات منظم (regex) را فراهم می‌کند.

افزونه pg_visibility

افزونه pg_visibility، امکان بررسی Visibility Map و بیت‌های visibility در سطح صفحات یک جدول را فراهم می‌کند. با استفاده از این افزونه، می‌توانید تشخیص دهید که چه بخشی از صفحات جدول all-visible یا all-frozen هستند و همچنین، ناسازگاری‌های احتمالی در Visibility Map را شناسایی کنید.

افزونه pg_walinspect

افزونه pg_walinspect، توابعی را برای بررسی محتوای Write-Ahead Log (WAL) از طریق SQL فراهم می‌کند. با استفاده از این افزونه، می‌توانید رکوردهای WAL در یک بازه مشخص را مشاهده کنید و آمارهایی مانند حجم WAL تولیدشده به تفکیک نوع عملیات را به دست آورید که برای تحلیل حجم تغییرات و اشکال‌زدایی replication کاربردی است.

افزونه pgcrypto

افزونه pgcrypto، توابع رمزنگاری متنوعی را به PostgreSQL اضافه می‌کند؛ از جمله توابع هش (مانند SHA-256)، هش امن رمزهای عبور با الگوریتم‌هایی مانند bcrypt، رمزنگاری متقارن و نامتقارن مبتنی بر PGP و تولید داده‌های تصادفی امن. با استفاده از این افزونه، می‌توانید عملیات رمزنگاری را مستقیماً در سطح دیتابیس انجام دهید.

افزونه pgrowlocks

افزونه pgrowlocks، اطلاعات مربوط به قفل‌های سطح رکورد (row-level locks) یک جدول مشخص را نمایش می‌دهد. با استفاده از این افزونه، می‌توانید ببینید کدام رکوردها قفل شده‌اند، نوع قفل چیست و کدام تراکنش یا پروسس آن را نگه داشته است؛ این اطلاعات، برای عیب‌یابی مشکلات هم‌زمانی و انتظارهای طولانی، مفید است.

افزونه pgstattuple

افزونه pgstattuple، توابعی برای دریافت آمار دقیق در سطح tuple از جداول و ایندکس‌ها ارائه می‌دهد؛ مانند تعداد tupleهای زنده و حذف‌شده (dead) و میزان فضای آزاد. این افزونه، برای تشخیص میزان bloat در جداول و ایندکس‌ها و تصمیم‌گیری درباره اجرای عملیاتی مانند VACUUM یا REINDEX، کاربرد دارد.

افزونه plpgsql

افزونه plpgsql، زبان رویه‌ای (procedural language) پیش‌فرض PostgreSQL است که امکان نوشتن توابع، procedureها و triggerها را با استفاده از متغیرها، حلقه‌ها، شرط‌ها و مدیریت خطا فراهم می‌کند. این افزونه، به صورت پیش‌فرض در تمام دیتابیس‌ها فعال است و نیازی به فعال‌سازی دستی ندارد.

افزونه postgres_fdw

افزونه postgres_fdw، یک Foreign Data Wrapper برای دسترسی به داده‌های ذخیره‌شده در یک سرور PostgreSQL خارجی است. با استفاده از این افزونه، می‌توانید جداول دیتابیس راه‌دور را به صورت foreign table تعریف کرده و مانند جداول محلی، روی آن‌ها کوئری SELECT، INSERT، UPDATE و DELETE اجرا کنید؛ این افزونه، در صورت امکان، شرط‌ها و JOINها را برای اجرا به سرور راه‌دور ارسال می‌کند تا کارایی افزایش یابد.

افزونه refint

افزونه refint، توابع trigger به نام‌های ()check_primary_key و ()check_foreign_key را برای پیاده‌سازی یکپارچگی ارجاعی (referential integrity) ارائه می‌دهد. این افزونه، نمونه‌ای قدیمی از نوشتن trigger با رابط SPI است و در کاربردهای امروزی، استفاده از قیود داخلی FOREIGN KEY در PostgreSQL، جایگزین بهتر و مطمئن‌تری برای آن محسوب می‌شود.

افزونه seg

افزونه seg، نوع داده seg را برای نمایش بازه‌های عددی (line segments) یا مقادیر ممیز شناور همراه با عدم قطعیت اضافه می‌کند. این افزونه، به ویژه برای داده‌های آزمایشگاهی و علمی مانند «۶.۵ ± ۰.۲» کاربرد دارد و ارقام معنادار را حفظ می‌کند؛ همچنین، از ایندکس GiST و عملگرهایی برای بررسی هم‌پوشانی و شمول بازه‌ها، پشتیبانی می‌کند.

افزونه sslinfo

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

افزونه tablefunc

افزونه tablefunc، مجموعه‌ای از توابع را ارائه می‌دهد که خروجی آن‌ها به صورت جدول است. مهم‌ترین تابع این افزونه، crosstab است که امکان ساخت جداول pivot (تبدیل سطرها به ستون‌ها) را فراهم می‌کند؛ همچنین، توابعی مانند normal_rand برای تولید اعداد تصادفی با توزیع نرمال و connectby برای پیمایش داده‌های درختی، در این افزونه وجود دارند.

افزونه tcn

افزونه tcn (مخفف Triggered Change Notification)، یک تابع trigger ارائه می‌دهد که هنگام هرگونه تغییر در جدول، یک اعلان (notification) از طریق مکانیزم NOTIFY ارسال می‌کند. این اعلان، شامل نام جدول، نوع عملیات و مقادیر کلید اصلی رکورد تغییریافته است و کلاینت‌هایی که با دستور LISTEN منتظر هستند، می‌توانند به صورت آنی از تغییرات مطلع شوند.

افزونه tsm_system_rows

افزونه tsm_system_rows، یک روش نمونه‌برداری جدید به نام SYSTEM_ROWS را برای استفاده در عبارت TABLESAMPLE اضافه می‌کند. با استفاده از این روش، می‌توانید به جای درصد، تعداد دقیق رکوردهای موردنظر را برای نمونه‌برداری تصادفی از یک جدول مشخص کنید؛ این روش، نمونه‌برداری را در سطح بلاک انجام می‌دهد و بسیار سریع است، اما نمونه‌ها، کاملاً تصادفی نیستند.

افزونه tsm_system_time

افزونه tsm_system_time، روش نمونه‌برداری SYSTEM_TIME را برای عبارت TABLESAMPLE اضافه می‌کند. در این روش، به جای تعداد یا درصد رکوردها، حداکثر زمان صرف‌شده برای خواندن جدول را بر حسب میلی‌ثانیه مشخص می‌کنید و دیتابیس، تا زمانی که این مدت تمام شود، رکورد برمی‌گرداند؛ این ویژگی، برای نمونه‌برداری سریع از جداول بسیار بزرگ، مفید است.

افزونه unaccent

افزونه unaccent، یک دیکشنری جستجوی تمام‌متن و یک تابع با همین نام ارائه می‌دهد که علائم و اعراب (diacritics) را از حروف حذف می‌کند؛ برای مثال، کلمه Hôtel را به Hotel تبدیل می‌کند. این افزونه، برای پیاده‌سازی جستجوهایی که نباید به علائم آوایی حساس باشند، کاربرد دارد و قواعد جایگزینی آن، قابل سفارشی‌سازی است.

افزونه uuid-ossp

افزونه uuid-ossp، توابعی برای تولید شناسه‌های یکتای جهانی (UUID) بر اساس الگوریتم‌های استاندارد مختلف (نسخه‌های ۱، ۳، ۴ و ۵) ارائه می‌دهد. توجه داشته باشید که در صورت نیاز تنها به UUID تصادفی (نسخه ۴)، می‌توانید از تابع داخلی ()gen_random_uuid نیز، بدون نیاز به فعال‌سازی این افزونه، استفاده کنید. نام این افزونه، شامل کاراکتر خط تیره است؛ بنابراین، در هنگام فعال‌سازی، باید آن را داخل دابل کوتیشن قرار دهید (;"CREATE EXTENSION "uuid-ossp).

افزونه xml2

افزونه xml2، توابعی برای اجرای کوئری‌های XPath روی داده‌های XML و اعمال تبدیل‌های XSLT ارائه می‌دهد. این افزونه، قدیمی محسوب می‌شود و بخش زیادی از قابلیت‌های آن، اکنون از طریق نوع داده داخلی xml و توابع استاندارد PostgreSQL مانند ()xpath و XMLTABLE در دسترس است؛ بنابراین، برای پروژه‌های جدید، استفاده از قابلیت‌های داخلی توصیه می‌شود.