{"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":29,"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 v27.2 (Yoast SEO v27.4) - 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=\"Daniel Westermann\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@westermanndanie\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daniel Westermann\" \/>\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\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"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\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"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\\\/8d08e9bd996a89bd75c0286cbabf3c66\",\"name\":\"Daniel Westermann\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g\",\"caption\":\"Daniel Westermann\"},\"description\":\"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\\\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/westermanndanie\"],\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/daniel-westermann\\\/\"}]}<\/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":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","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":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"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\/8d08e9bd996a89bd75c0286cbabf3c66"},"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\/8d08e9bd996a89bd75c0286cbabf3c66","name":"Daniel Westermann","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/31350ceeecb1dd8986339a29bf040d4cd3cd087d410deccd8f55234466d6c317?s=96&d=mm&r=g","caption":"Daniel Westermann"},"description":"Daniel Westermann is Principal Consultant and Technology Leader Open Infrastructure at dbi services. He has more than 15 years of experience in management, engineering and optimization of databases and infrastructures, especially on Oracle and PostgreSQL. Since the beginning of his career, he has specialized in Oracle Technologies and is Oracle Certified Professional 12c and Oracle Certified Expert RAC\/GridInfra. Over time, Daniel has become increasingly interested in open source technologies, becoming \u201cTechnology Leader Open Infrastructure\u201d and PostgreSQL expert. \u00a0Based on community or EnterpriseDB tools, he develops and installs complex high available solutions with PostgreSQL. He is also a certified PostgreSQL Plus 9.0 Professional and a Postgres Advanced Server 9.4 Professional. He is a regular speaker at PostgreSQL conferences in Switzerland and Europe. Today Daniel is also supporting our customers on AWS services such as AWS RDS, database migrations into the cloud, EC2 and automated infrastructure management with AWS SSM (System Manager). He is a certified AWS Solutions Architect Professional. Prior to dbi services, Daniel was Management System Engineer at LC SYSTEMS-Engineering AG in Basel. Before that, he worked as Oracle Developper &amp;\u00a0Project Manager at Delta Energy Solutions AG in Basel (today Powel AG). Daniel holds a diploma in Business Informatics (DHBW, Germany). His branch-related experience mainly covers the pharma industry, the financial sector, energy, lottery and telecommunications.","sameAs":["https:\/\/x.com\/westermanndanie"],"url":"https:\/\/www.dbi-services.com\/blog\/author\/daniel-westermann\/"}]}},"_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\/29"}],"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}]}}