{"id":15323,"date":"2020-11-29T19:02:26","date_gmt":"2020-11-29T18:02:26","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/"},"modified":"2020-11-29T19:02:26","modified_gmt":"2020-11-29T18:02:26","slug":"the-postgresql-shared-global-catalog","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/","title":{"rendered":"The PostgreSQL shared\/global catalog"},"content":{"rendered":"<p>A PostgreSQL instance (or cluster) can contain many databases, <a href=\"https:\/\/www.dbi-services.com\/blog\/what-the-hell-are-these-template0-and-template1-databases-in-postgresql\/\" target=\"_blank\" rel=\"noopener noreferrer\">three of them (template0, template1 and postgres)<\/a> are there by default. Over the last years we trained many people on <a href=\"https:\/\/www.dbi-services.com\/trainings\/postgresql-dba-essentials-workshop\/\" target=\"_blank\" rel=\"noopener noreferrer\">PostgreSQL Essentials<\/a> and there have been mainly two points that needed more clarification when it comes to catalogs and the postgres default database:<\/p>\n<ol>\n<li>Does the postgres default database define the catalog and somehow is the master database?<\/li>\n<li>What exactly is in the global catalog?<\/li>\n<\/ol>\n<p>In this post we&#8217;ll look into both points and I hope to make it more clear what the shared\/global catalog contains, and that the postgres default database is not a master database and it does not define the postgres catalog.<\/p>\n<p><!--more--><\/p>\n<p>For the first point (is the default postgres database a master database and does it define the catalog?) the answer can quite easily be given. The default postgres database is there for only one reason: Because most client utilities assume it is there, and by default connect into that database. But this does not mean, that the default postgres is any special, you can go well ahead and drop it:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# l\n                                  List of databases\n   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   \n-----------+----------+----------+-------------+-------------+-----------------------\n postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | \n template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n(3 rows)\n\npostgres=# c template1\nYou are now connected to database \"template1\" as user \"postgres\".\ntemplate1=# drop database postgres;\nDROP DATABASE\ntemplate1=# l\n                                  List of databases\n   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   \n-----------+----------+----------+-------------+-------------+-----------------------\n template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n(2 rows)\n\ntemplate1=# \n<\/pre>\n<p>We even have customers which do that by default. The default postgres database is nothing special and initially it is exactly the same as template1. You can easily re-create, it if you want:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\ntemplate1=# create database postgres;\nCREATE DATABASE\ntemplate1=# l\n                                  List of databases\n   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   \n-----------+----------+----------+-------------+-------------+-----------------------\n postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | \n template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c\/postgres          +\n           |          |          |             |             | postgres=CTc\/postgres\n(3 rows)\n<\/pre>\n<p>This answers the first question: The default postgres database is not a master database and it does not define the PostgreSQL catalog. Again, <a href=\"https:\/\/www.dbi-services.com\/blog\/what-the-hell-are-these-template0-and-template1-databases-in-postgresql\/\" target=\"_blank\" rel=\"noopener noreferrer\">check here if you want to have more details about the three default databases<\/a>.<\/p>\n<p>The second question can be answered easily as well: What exactly is in the global\/shared catalog? Most of the PostgreSQL catalog tables are per database, such as <a href=\"https:\/\/www.postgresql.org\/docs\/current\/view-pg-tables.html\" target=\"_blank\" rel=\"noopener noreferrer\">pg_tables<\/a>:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# d pg_tables\n              View \"pg_catalog.pg_tables\"\n   Column    |  Type   | Collation | Nullable | Default \n-------------+---------+-----------+----------+---------\n schemaname  | name    |           |          | \n tablename   | name    |           |          | \n tableowner  | name    |           |          | \n tablespace  | name    |           |          | \n hasindexes  | boolean |           |          | \n hasrules    | boolean |           |          | \n hastriggers | boolean |           |          | \n rowsecurity | boolean |           |          | \n<\/pre>\n<p>All these catalog tables and views are in a system schema called <a href=\"https:\/\/www.postgresql.org\/docs\/current\/ddl-schemas.html#DDL-SCHEMAS-CATALOG\" target=\"_blank\" rel=\"noopener noreferrer\">&#8220;pg_catalog&#8221;<\/a>. This schema is not listed by default when you use the &#8220;dn&#8221; shortcut in psql:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# dn\n  List of schemas\n  Name  |  Owner   \n--------+----------\n public | postgres\n(1 row)\n<\/pre>\n<p>You need to add &#8220;S&#8221; for system, to list the system schemas:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# dnS\n        List of schemas\n        Name        |  Owner   \n--------------------+----------\n information_schema | postgres\n pg_catalog         | postgres\n pg_toast           | postgres\n public             | postgres\n(4 rows)\n<\/pre>\n<p>Some catalog tables\/views are global to the cluster\/instance and are not per database. The obvious ones are users\/roles and tablespaces. None of them are per database as users\/roles can have access to various databases and various databases can store relations in the same tablespace. The question now is: How can I know if a catalog table\/view is global or per database? Even global catalog tables\/views are listed in the local catalog schema:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# d pg_catalog.pg_roles\n                         View \"pg_catalog.pg_roles\"\n     Column     |           Type           | Collation | Nullable | Default \n----------------+--------------------------+-----------+----------+---------\n rolname        | name                     |           |          | \n rolsuper       | boolean                  |           |          | \n rolinherit     | boolean                  |           |          | \n rolcreaterole  | boolean                  |           |          | \n rolcreatedb    | boolean                  |           |          | \n rolcanlogin    | boolean                  |           |          | \n rolreplication | boolean                  |           |          | \n rolconnlimit   | integer                  |           |          | \n rolpassword    | text                     |           |          | \n rolvaliduntil  | timestamp with time zone |           |          | \n rolbypassrls   | boolean                  |           |          | \n rolconfig      | text[]                   | C         |          | \n oid            | oid                      |           |          | \n<\/pre>\n<p>By only looking in the catalog schema we can not answer that question. What we can do, however, is to look at the <a href=\"https:\/\/www.postgresql.org\/docs\/current\/creating-cluster.html\" target=\"_blank\" rel=\"noopener noreferrer\">data directory ($PGDATA)<\/a>. The databases are in &#8220;base&#8221; and the global\/shared catalog is in &#8220;global&#8221;:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/home\/postgres\/ [pgdev] cd $PGDATA\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] ls -l | egrep \"base|global\"\ndrwx------. 6 postgres postgres    58 Nov 21 09:50 base\ndrwx------. 2 postgres postgres  4096 Nov 21 09:48 global\n<\/pre>\n<p>When we look into the &#8220;global&#8221; directory we&#8217;ll see a number of OIDs (object identifiers), this is how PostgreSQL internally is referencing the relations:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] ls -l global\/\ntotal 564\n-rw-------. 1 postgres postgres  8192 Nov 21 03:52 1213\n-rw-------. 1 postgres postgres 24576 Nov 20 22:52 1213_fsm\n-rw-------. 1 postgres postgres  8192 Nov 21 03:53 1213_vm\n-rw-------. 1 postgres postgres  8192 Nov 20 22:52 1214\n-rw-------. 1 postgres postgres 24576 Nov 20 22:52 1214_fsm\n-rw-------. 1 postgres postgres  8192 Nov 20 22:52 1214_vm\n-rw-------. 1 postgres postgres 16384 Nov 20 22:52 1232\n-rw-------. 1 postgres postgres 16384 Nov 20 22:52 1233\n-rw-------. 1 postgres postgres  8192 Nov 20 22:57 1260\n-rw-------. 1 postgres postgres 24576 Nov 20 22:52 1260_fsm\n-rw-------. 1 postgres postgres  8192 Nov 20 22:52 1260_vm\n...\n<\/pre>\n<p>Each of these OIDs is one relation of the global\/shared catalog. As we are not interested in the <a href=\"https:\/\/www.postgresql.org\/docs\/current\/storage-vm.html\" target=\"_blank\" rel=\"noopener noreferrer\">visibility maps<\/a> and <a href=\"https:\/\/www.postgresql.org\/docs\/13\/storage-fsm.html\" target=\"_blank\" rel=\"noopener noreferrer\">free space maps<\/a> let&#8217;s exclude them, and only list the unique OIDs:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] ls -l global\/ | awk -F \" \" '{print $9}' | egrep \"^[0-9]\" | egrep -v \"fsm|vm\"\n1213\n1214\n1232\n1233\n1260\n1261\n1262\n2396\n2397\n2671\n2672\n2676\n2677\n2694\n2695\n2697\n2698\n2846\n2847\n2964\n2965\n2966\n2967\n3592\n3593\n4060\n4061\n4175\n4176\n4177\n4178\n4181\n4182\n4183\n4184\n4185\n4186\n6000\n6001\n6002\n6100\n6114\n6115\n<\/pre>\n<p>These are the relations in the global\/shared catalog. For translating these OIDs into human readable names there is <a href=\"https:\/\/www.postgresql.org\/docs\/current\/oid2name.html\" target=\"_blank\" rel=\"noopener noreferrer\">oid2name<\/a>. Without any additional parameters oid2name will give you the name of the databases listed in the &#8220;base&#8221; directory:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] oid2name \nAll databases:\n    Oid  Database Name  Tablespace\n----------------------------------\n  24616       postgres  pg_default\n  12905      template0  pg_default\n      1      template1  pg_default\n<\/pre>\n<p>We can also pass the OIDs of the shared\/global catalog to oid2name and the result will answer the second question: What, exactly, is in the global\/shared catalog?<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] for i in `ls -l global\/ | awk -F \" \" '{print $9}' | egrep \"^[0-9]\" | egrep -v \"fsm|vm\"`; do oid2name -x -S -q -o $i; done | grep -v \"index\"\n      1213  pg_tablespace  1213  pg_catalog   pg_global\n      1214  pg_shdepend  1214  pg_catalog   pg_global\n      1260   pg_authid  1260  pg_catalog   pg_global\n      1261  pg_auth_members  1261  pg_catalog   pg_global\n      1262  pg_database  1262  pg_catalog   pg_global\n      2396  pg_shdescription  2396  pg_catalog   pg_global\n      2846  pg_toast_2396  2846  pg_toast   pg_global\n      2964  pg_db_role_setting  2964  pg_catalog   pg_global\n      2966  pg_toast_2964  2966  pg_toast   pg_global\n      3592  pg_shseclabel  3592  pg_catalog   pg_global\n      4060  pg_toast_3592  4060  pg_toast   pg_global\n      4175  pg_toast_1260  4175  pg_toast   pg_global\n      4177  pg_toast_1262  4177  pg_toast   pg_global\n      4181  pg_toast_6000  4181  pg_toast   pg_global\n      4183  pg_toast_6100  4183  pg_toast   pg_global\n      4185  pg_toast_1213  4185  pg_toast   pg_global\n      6000  pg_replication_origin  6000  pg_catalog   pg_global\n      6100  pg_subscription  6100  pg_catalog   pg_global\n<\/pre>\n<p>Here is the answer (excluding the indexes). If we exclude the <a href=\"https:\/\/www.postgresql.org\/docs\/current\/storage-toast.html\" target=\"_blank\" rel=\"noopener noreferrer\">toast tables<\/a> as well, you&#8217;ll notice that not many catalog tables\/views are in the global\/shared catalog:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\npostgres@centos8pg:\/u02\/pgdata\/DEV\/ [pgdev] for i in `ls -l global\/ | awk -F \" \" '{print $9}' | egrep \"^[0-9]\" | egrep -v \"fsm|vm\"`; do oid2name -x -S -q -o $i; done | egrep -v \"index|toast\"\n      1213  pg_tablespace  1213  pg_catalog   pg_global\n      1214  pg_shdepend  1214  pg_catalog   pg_global\n      1260   pg_authid  1260  pg_catalog   pg_global\n      1261  pg_auth_members  1261  pg_catalog   pg_global\n      1262  pg_database  1262  pg_catalog   pg_global\n      2396  pg_shdescription  2396  pg_catalog   pg_global\n      2964  pg_db_role_setting  2964  pg_catalog   pg_global\n      3592  pg_shseclabel  3592  pg_catalog   pg_global\n      6000  pg_replication_origin  6000  pg_catalog   pg_global\n      6100  pg_subscription  6100  pg_catalog   pg_global\n<\/pre>\n<p>That&#8217;s it, hope it helps.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A PostgreSQL instance (or cluster) can contain many databases, three of them (template0, template1 and postgres) are there by default. Over the last years we trained many people on PostgreSQL Essentials and there have been mainly two points that needed more clarification when it comes to catalogs and the postgres default database: Does the postgres [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[77],"type_dbi":[],"class_list":["post-15323","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","tag-postgresql"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.8 (Yoast SEO v28.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The PostgreSQL shared\/global catalog - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The PostgreSQL shared\/global catalog\" \/>\n<meta property=\"og:description\" content=\"A PostgreSQL instance (or cluster) can contain many databases, three of them (template0, template1 and postgres) are there by default. Over the last years we trained many people on PostgreSQL Essentials and there have been mainly two points that needed more clarification when it comes to catalogs and the postgres default database: Does the postgres [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-29T18:02:26+00:00\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\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:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4bae5e5dd8c7d48edbd948772b49b202\"},\"headline\":\"The PostgreSQL shared\\\/global catalog\",\"datePublished\":\"2020-11-29T18:02:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/\"},\"wordCount\":614,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/\",\"name\":\"The PostgreSQL shared\\\/global catalog - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2020-11-29T18:02:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4bae5e5dd8c7d48edbd948772b49b202\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-postgresql-shared-global-catalog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The PostgreSQL shared\\\/global catalog\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/4bae5e5dd8c7d48edbd948772b49b202\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g\",\"caption\":\"Open source Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The PostgreSQL shared\/global catalog - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/","og_locale":"en_US","og_type":"article","og_title":"The PostgreSQL shared\/global catalog","og_description":"A PostgreSQL instance (or cluster) can contain many databases, three of them (template0, template1 and postgres) are there by default. Over the last years we trained many people on PostgreSQL Essentials and there have been mainly two points that needed more clarification when it comes to catalogs and the postgres default database: Does the postgres [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/","og_site_name":"dbi Blog","article_published_time":"2020-11-29T18:02:26+00:00","author":"Open source Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Open source Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4bae5e5dd8c7d48edbd948772b49b202"},"headline":"The PostgreSQL shared\/global catalog","datePublished":"2020-11-29T18:02:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/"},"wordCount":614,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/","url":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/","name":"The PostgreSQL shared\/global catalog - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2020-11-29T18:02:26+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4bae5e5dd8c7d48edbd948772b49b202"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/the-postgresql-shared-global-catalog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The PostgreSQL shared\/global catalog"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4bae5e5dd8c7d48edbd948772b49b202","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/eb4fb12e386e8c41fdef0733e8114594cf2653e4f55e9fa2161442b8eaf3f657?s=96&d=mm&r=g","caption":"Open source Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=15323"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15323\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=15323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=15323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=15323"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=15323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}