
{"id":3991,"date":"2023-05-03T06:37:01","date_gmt":"2023-05-03T06:37:01","guid":{"rendered":"https:\/\/test.opensource-db.in\/wp1\/?p=3991"},"modified":"2023-05-03T07:05:47","modified_gmt":"2023-05-03T07:05:47","slug":"postgres-beyond-the-basics-exploring-extensibility","status":"publish","type":"post","link":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/","title":{"rendered":"Postgres Beyond the Basics: Exploring Extensibility"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png\" alt=\"\" class=\"wp-image-3992\" srcset=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png 1024w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-300x158.png 300w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-768x403.png 768w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1536x806.png 1536w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-2048x1075.png 2048w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-189x99.png 189w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-152x80.png 152w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-394x207.png 394w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-915x480.png 915w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1240x651.png 1240w, https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1920x1008.png 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Introduction:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Postgres extensions are modules that can be added to the Postgres database management system to extend its functionality. These extensions can provide additional features, data types, operators, and functions that are not available in the core Postgres system. Examples of popular Postgres extensions include PostGIS for geographic data, pgAdmin for database administration, and PL\/Python for writing database functions in Python. Postgres extensions can be installed and managed using the Postgres package manager, and are typically open-source and community-driven. The use of extensions can help developers and organizations customize Postgres to better suit their needs, and can facilitate the development of complex database applications.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The functionality of PostgreSQL can be enhanced through the use of extensions<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Install &amp; Compile an Extension:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To compile the extension, you can use the pg_config tool to get the necessary compiler flags and include directories:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres@pg15node:~ $ pg_config --libdir\/usr\/pgsql-15\/lib<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres@pg15node:~ $ pg_config --includedir\/usr\/pgsql-15\/include<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres@pg15node:~ $ pg_config --pkglibdir\/usr\/pgsql-15\/lib<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres@pg15node:~ $ pg_config --pgxs\/usr\/pgsql-15\/lib\/pgxs\/src\/makefiles\/pgxs.mk<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres@pg15node:~ $ pg_config --sharedir\/usr\/pgsql-15\/share<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Extensions in PostgreSQL can be written in a variety of programming languages, including C, SQL, and PL\/Python. When an extension is created in PostgreSQL, it consists of a set of SQL files and C source files that are used to build the extension. The C source files are compiled into a shared object file with the .so extension, which is loaded by the PostgreSQL server at runtime.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">W<strong>hy are .so files important in PostgreSQL extensions?<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>.so<\/code> (shared object) file is a crucial component of PostgreSQL extensions that enables the extension code to be loaded and executed by the server at runtime. It provides a level of abstraction between the extension code and the PostgreSQL server, allowing for efficient memory usage and dynamic linking with other system resources. Additionally, it allows for easier maintenance and updates of the extension code and facilitates debugging of the code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here are examples of the error messages you might encounter when a PostgreSQL extension is missing its .so file:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>osdb_ext_test=# CREATE EXTENSION pg_trgm;<br>ERROR: could not load library \"\/usr\/pgsql-15\/lib\/pg_trgm.so\": \/usr\/pgsql-15\/lib\/pg_trgm.so: undefined symbol: my_func<br>ERROR:&nbsp; extension \"pg_trgm\" is not available<br>DETAIL:&nbsp; Could not open extension control file \"\/usr\/pgsql-15\/share\/extension\/pg_trgm.control\": No such file or directory.<br>HINT: The extension must first be installed on the system where PostgreSQL is running.<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this example, we are trying to create the &#8220;bar&#8221; extension, but the server is unable to load the &#8220;bar.so&#8221; file because it contains an undefined symbol called &#8220;my_func&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To resolve this issue, you will need to ensure that the .so file is present in the correct directory and that all required dependencies are installed and available to the server. You may also need to re-compile the extension with the correct dependencies or architecture.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>pg_available_extensions<\/strong> is a view in PostgreSQL that provides information about the extensions that are available to be installed in the current database. This view contains information such as the name of the extension, its default version, whether it is installed by default, and whether it is available in the current version of PostgreSQL.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>osdb_ext_test=# select * from pg_available_extensions;\n       name       | default_version | installed_version |   comment\n------------------+-----------------+-------------------+----------------------------------------\n plpgsql          | 1.0             | 1.0               | PL\/pgSQL procedural language\n pglogical        | 2.4.2           |                   | PostgreSQL Logical Replication\n pg_cron          | 1.5             |                   | Job scheduler for PostgreSQL\n pglogical_origin | 1.0.0           |                   | Dummy extension for compatibility<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres=# SELECT<br>name,<br>default_version,<br>installed_version<br>FROM<br>pg_available_extensions<br>WHERE<br>installed_version IS NULL;<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>       name       | default_version | installed_version\n------------------+-----------------+-------------------\n pglogical        | 2.4.2           \n pg_cron          | 1.5             |\n pglogical_origin | 1.0.0           |<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres=#&nbsp;SELECT<br>name,<br>version,<br>installed,<br>superuser,<br>trusted,<br>schema<br>FROM<br>pg_available_extension_versions<br>WHERE<br>name = 'pg_cron';<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  name   | version | installed | superuser | trusted |   schema\n---------+---------+-----------+-----------+---------+------------\n pg_cron | 1.0     | f         | t         | f       | pg_catalog\n pg_cron | 1.1     | f         | t         | f       | pg_catalog\n pg_cron | 1.2     | f         | t         | f       | pg_catalog\n pg_cron | 1.3     | f         | t         | f       | pg_catalog\n pg_cron | 1.4     | f         | t         | f       | pg_catalog\n pg_cron | 1.4-1   | f         | t         | f       | pg_catalog\n pg_cron | 1.5     | f         | t         | f       | pg_catalog<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This will return a list of all the available extensions that are not installed by default, along with their default version and other information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In addition to pg_available_extensions, there are other views and functions in PostgreSQL that can provide information about extensions, such as pg_extension, pg_extension_config_dump, and pg_extension_update_paths.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>View Installed Extensions:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">To view the extensions that are currently installed on your PostgreSQL Managed Database, run the <em>\\dx<\/em> command at the prompt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres=# \\dx<\/code><\/p>\n\n\n\n<p class=\"has-text-align-center wp-block-paragraph\">List of installed extensions<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> Name    | Version |   Schema   |          Description\n-----------+---------+------------+--------------------------------\n pg_cron   | 1.5     | pg_catalog | Job scheduler for PostgreSQL\n pglogical | 2.4.2   | pglogical  | PostgreSQL Logical Replication\n plpgsql   | 1.0     | pg_catalog | PL\/pgSQL procedural language<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The \\dx+ command is an extension of the <code>\\dx<\/code> command, and provides additional details about the installed extensions, including their object file location, the configuration options used to build them, and their dependencies on other extensions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>postgres=# \\dx+ pg_cron<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Objects in extension &#8220;<code>pg_cron<\/code>&#8220;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Object description<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>----------------------------------------------------------------------\n function cron.alter_job(bigint,text,text,text,text,boolean)\n function cron.job_cache_invalidate()\n function cron.schedule_in_database(text,text,text,text,text,boolean)\n function cron.schedule(text,text)\n function cron.schedule(text,text,text)\n function cron.unschedule(bigint)\n function cron.unschedule(text)\n schema cron\n sequence cron.jobid_seq\n sequence cron.runid_seq\n table cron.job\n table cron.job_run_details<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">As you can see, the \\dx+ command provides additional information about the installed extensions, including the path to their object files ($libdir\/plpgsql and $libdir\/postgis), which can be useful for debugging and troubleshooting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>I have categorized some of my favorite PostgreSQL extensions:<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Some of these extensions may require to be included in the shared_preload_libraries server parameter as a comma-separated list to be preloaded at the server start. Although most of the extensions are included in the contrib module of source code.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Category<\/strong><\/td><td><strong>Extension<\/strong><\/td><td><strong>Description<\/strong><\/td><\/tr><tr><td>Data Analytics<\/td><td>PostGIS<\/td><td>Adds support for geographic objects to PostgreSQL<\/td><\/tr><tr><td><\/td><td>PL\/R<\/td><td>Allows the use of the R programming language within PostgreSQL<\/td><\/tr><tr><td><\/td><td>pg_stat_statements<\/td><td>Provides statistics on SQL statements executed by a server<\/td><\/tr><tr><td><\/td><td>pgcrypto<\/td><td>Provides cryptographic functions for PostgreSQL<\/td><\/tr><tr><td>Connection Pooling<\/td><td>pgpool-II<\/td><td>Provides connection pooling and load balancing for PostgreSQL<\/td><\/tr><tr><td><\/td><td>pgbouncer<\/td><td>A lightweight connection pooler for PostgreSQL<\/td><\/tr><tr><td>Full-Text Search<\/td><td>pg_trgm<\/td><td>Provides fast full-text search capabilities for PostgreSQL<\/td><\/tr><tr><td><\/td><td>tsearch2<\/td><td>An advanced full-text search module for PostgreSQL<\/td><\/tr><tr><td>Monitoring<\/td><td>pgAdmin<\/td><td>A popular GUI administration tool for PostgreSQL<\/td><\/tr><tr><td><\/td><td>pgBadger<\/td><td>A PostgreSQL log analyzer<\/td><\/tr><tr><td><\/td><td>pgDash<\/td><td>Provides real-time monitoring and alerting for PostgreSQL<\/td><\/tr><tr><td>Replication<\/td><td>Slony-I<\/td><td>Provides asynchronous replication for PostgreSQL<\/td><\/tr><tr><td><\/td><td>pglogical<\/td><td>Provides logical replication for PostgreSQL<\/td><\/tr><tr><td><\/td><td>pgEdge<\/td><td>Provides multi-master replication for PostgreSQL<\/td><\/tr><tr><td>Security<\/td><td>pgAudit<\/td><td>Provides auditing capabilities for PostgreSQL<\/td><\/tr><tr><td><\/td><td>pg_cron<\/td><td>Allows scheduled execution of SQL queries and other commands<\/td><\/tr><tr><td><\/td><td>sepgsql<\/td><td>Provides mandatory access control for PostgreSQL<\/td><\/tr><tr><td><\/td><td>sslinfo<\/td><td>Provides information on SSL\/TLS connections to PostgreSQL<\/td><\/tr><tr><td>Text Processing<\/td><td>unaccent<\/td><td>Provides functions for removing accents from text<\/td><\/tr><tr><td><\/td><td>fuzzystrmatch<\/td><td>Provides fuzzy string matching functions for PostgreSQL<\/td><\/tr><tr><td><\/td><td>citext<\/td><td>Provides case-insensitive text types and functions for PostgreSQL<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Stay tuned for this blog series, we will discuss these extensions and their use-cases.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction: Postgres extensions are modules that can be added to the Postgres database management system to extend its functionality. These [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23,42],"tags":[34,45,24,44,26],"class_list":["post-3991","post","type-post","status-publish","format-standard","hentry","category-postgresql-14","category-postgresql-15","tag-dba","tag-open-source-databases","tag-postgres14","tag-postgres15","tag-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB\" \/>\n<meta property=\"og:description\" content=\"Introduction: Postgres extensions are modules that can be added to the Postgres database management system to extend its functionality. These [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\" \/>\n<meta property=\"og:site_name\" content=\"OpenSource DB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-03T06:37:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-05-03T07:05:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png\" \/>\n<meta name=\"author\" content=\"Venkat Akhil\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:site\" content=\"@opensource_db\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Venkat Akhil\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\"},\"author\":{\"name\":\"Venkat Akhil\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/a37b142ecbf953189a4f9209b0b8d328\"},\"headline\":\"Postgres Beyond the Basics: Exploring Extensibility\",\"datePublished\":\"2023-05-03T06:37:01+00:00\",\"dateModified\":\"2023-05-03T07:05:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\"},\"wordCount\":849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png\",\"keywords\":[\"dba\",\"open-source databases\",\"postgres14\",\"postgres15\",\"postgresql\"],\"articleSection\":[\"PostgreSQL 14\",\"PostgreSQL 15\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\",\"name\":\"Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB\",\"isPartOf\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png\",\"datePublished\":\"2023-05-03T06:37:01+00:00\",\"dateModified\":\"2023-05-03T07:05:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image.png\",\"width\":2400,\"height\":1260},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/test.opensource-db.in\/wp1\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Postgres Beyond the Basics: Exploring Extensibility\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#website\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"name\":\"OpenSource DB\",\"description\":\"Your Trusted OpenSource Databases partner\",\"publisher\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#organization\",\"name\":\"OPENSOURCE DB PRIVATE LIMITED\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"contentUrl\":\"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png\",\"width\":368,\"height\":120,\"caption\":\"OPENSOURCE DB PRIVATE LIMITED\"},\"image\":{\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/\",\"https:\/\/x.com\/opensource_db\",\"https:\/\/www.youtube.com\/channel\/UCmTI5h\",\"https:\/\/www.linkedin.com\/company\/opensource-db\",\"https:\/\/www.instagram.com\/opensource_db\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/a37b142ecbf953189a4f9209b0b8d328\",\"name\":\"Venkat Akhil\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/522c0947d21b2c2c89f10698fd9131f9db4110f65c8d02b53d9b4559c7650865?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/522c0947d21b2c2c89f10698fd9131f9db4110f65c8d02b53d9b4559c7650865?s=96&d=mm&r=g\",\"caption\":\"Venkat Akhil\"},\"url\":\"https:\/\/test.opensource-db.in\/wp1\/author\/sudheer-sopensource-db-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB","og_description":"Introduction: Postgres extensions are modules that can be added to the Postgres database management system to extend its functionality. These [&hellip;]","og_url":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/","og_site_name":"OpenSource DB","article_publisher":"https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","article_published_time":"2023-05-03T06:37:01+00:00","article_modified_time":"2023-05-03T07:05:47+00:00","og_image":[{"url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png","type":"","width":"","height":""}],"author":"Venkat Akhil","twitter_card":"summary_large_image","twitter_creator":"@opensource_db","twitter_site":"@opensource_db","twitter_misc":{"Written by":"Venkat Akhil","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#article","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/"},"author":{"name":"Venkat Akhil","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/a37b142ecbf953189a4f9209b0b8d328"},"headline":"Postgres Beyond the Basics: Exploring Extensibility","datePublished":"2023-05-03T06:37:01+00:00","dateModified":"2023-05-03T07:05:47+00:00","mainEntityOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/"},"wordCount":849,"commentCount":0,"publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png","keywords":["dba","open-source databases","postgres14","postgres15","postgresql"],"articleSection":["PostgreSQL 14","PostgreSQL 15"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/","url":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/","name":"Postgres Beyond the Basics: Exploring Extensibility - OpenSource DB","isPartOf":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#website"},"primaryImageOfPage":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage"},"thumbnailUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image-1024x538.png","datePublished":"2023-05-03T06:37:01+00:00","dateModified":"2023-05-03T07:05:47+00:00","breadcrumb":{"@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#primaryimage","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2023\/05\/blog-image.png","width":2400,"height":1260},{"@type":"BreadcrumbList","@id":"https:\/\/test.opensource-db.in\/wp1\/postgres-beyond-the-basics-exploring-extensibility\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/test.opensource-db.in\/wp1\/"},{"@type":"ListItem","position":2,"name":"Postgres Beyond the Basics: Exploring Extensibility"}]},{"@type":"WebSite","@id":"https:\/\/test.opensource-db.in\/wp1\/#website","url":"https:\/\/test.opensource-db.in\/wp1\/","name":"OpenSource DB","description":"Your Trusted OpenSource Databases partner","publisher":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/test.opensource-db.in\/wp1\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/test.opensource-db.in\/wp1\/#organization","name":"OPENSOURCE DB PRIVATE LIMITED","url":"https:\/\/test.opensource-db.in\/wp1\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/","url":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","contentUrl":"https:\/\/test.opensource-db.in\/wp1\/wp-content\/uploads\/2021\/10\/osdb-logo-tm-2.png","width":368,"height":120,"caption":"OPENSOURCE DB PRIVATE LIMITED"},"image":{"@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/people\/OpenSource-DB\/100072970755470\/","https:\/\/x.com\/opensource_db","https:\/\/www.youtube.com\/channel\/UCmTI5h","https:\/\/www.linkedin.com\/company\/opensource-db","https:\/\/www.instagram.com\/opensource_db\/"]},{"@type":"Person","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/a37b142ecbf953189a4f9209b0b8d328","name":"Venkat Akhil","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/test.opensource-db.in\/wp1\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/522c0947d21b2c2c89f10698fd9131f9db4110f65c8d02b53d9b4559c7650865?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/522c0947d21b2c2c89f10698fd9131f9db4110f65c8d02b53d9b4559c7650865?s=96&d=mm&r=g","caption":"Venkat Akhil"},"url":"https:\/\/test.opensource-db.in\/wp1\/author\/sudheer-sopensource-db-com\/"}]}},"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"Venkat Akhil","author_link":"https:\/\/test.opensource-db.in\/wp1\/author\/sudheer-sopensource-db-com\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-14\/\" rel=\"category tag\">PostgreSQL 14<\/a> <a href=\"https:\/\/test.opensource-db.in\/wp1\/category\/postgres\/postgresql-15\/\" rel=\"category tag\">PostgreSQL 15<\/a>","rttpg_excerpt":"Introduction: Postgres extensions are modules that can be added to the Postgres database management system to extend its functionality. These [&hellip;]","_links":{"self":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/3991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/comments?post=3991"}],"version-history":[{"count":6,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/3991\/revisions"}],"predecessor-version":[{"id":4000,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/posts\/3991\/revisions\/4000"}],"wp:attachment":[{"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/media?parent=3991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/categories?post=3991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/test.opensource-db.in\/wp1\/wp-json\/wp\/v2\/tags?post=3991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}