{"id":6723,"date":"2019-10-07T10:54:59","date_gmt":"2019-10-07T08:54:59","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/postgresql-12-released\/"},"modified":"2022-03-29T10:56:23","modified_gmt":"2022-03-29T08:56:23","slug":"postgresql-12-released","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/","title":{"rendered":"PostgreSQL<sup>\u00ae<\/sup> 12 released"},"content":{"rendered":"<p>The PostgreSQL<sup>\u00ae<\/sup> Global Development Group (PGDG) has <a href=\"https:\/\/www.postgresql.org\/about\/news\/1976\/\" target=\"_blank\" rel=\"noopener noreferrer\">released<\/a> version 12 of the popular free PostgreSQL<sup>\u00ae<\/sup> database. As <a href=\"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-beta-4-released\/\" target=\"_blank\" rel=\"noopener noreferrer\">our article<a> for Beta 4 has already indicated, a number of new features, improvements and optimizations have been incorporated into the release. These include among others:<\/p>\n<h2>Optimized disk space utilization and speed for btree indexes<\/h2>\n<p>btree-Indexes, the default index type in PostgreSQL<sup>\u00ae<\/sup>, has experienced some optimizations in PostgreSQL<sup>\u00ae<\/sup> 12.<\/p>\n<p>btree indexes used to store duplicates (multiple entries with the same key values) in an unsorted order. This has resulted in suboptimal use of physical representation in these indexes. An optimization now stores these multiple key values in the same order as they are physically stored in the table. This improves disk space utilization and the effort required to manage corresponding btree type indexes. In addition, indexes with multiple indexed columns use an improved physical representation so that their storage utilization is also improved. To take advantage of this in PostgreSQL<sup>\u00ae<\/sup> 12, however, if they were upgraded to the new version using <code>pg_upgrade<\/code> via a binary upgrade, these indexes must be recreated or re-indexed.<\/p>\n<p>Insert operations in btree indexes are also accelerated by improved locking.<\/p>\n<h2>Improvements for pg_checksums<\/h2>\n<p>credativ has contributed an <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=ed308d78379008b2cebca30a986f97f992ee6122\">extension<\/a> for <a href=\"https:\/\/www.postgresql.org\/docs\/12\/app-pgchecksums.html\" target=\"_blank\" rel=\"noopener noreferrer\">pg_checksums<\/a> that allows to enable or disable block checksums in stopped PostgreSQL<sup>\u00ae<\/sup> instances. Previously, this could only be done by recreating the physical data representation of the cluster using <code>initdb<\/code>.<br \/>\n<code>pg_checksums<\/code> now has the <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=280e5f14056bf34a0f52320f659fb93acfda0876\">option<a> to display a status history on the console with the <code>--progress<\/code> parameter. The corresponding code contributions come from the colleagues Michael Banck and Bernd Helmle.<\/p>\n<h2>Optimizer Inlining of Common Table Expressions<\/h2>\n<p>Up to and including PostgreSQL<sup>\u00ae<\/sup> 11, the PostgreSQL<sup>\u00ae<\/sup> Optimizer was unable to optimize <a href=\"https:\/\/www.postgresql.org\/docs\/12\/queries-with.html\">common table expressions<\/a> (also called CTE or WITH queries). If such an expression was used in a query, the CTE was always evaluated and materialized first before the rest of the query was processed. This resulted in expensive execution plans for more complex CTE expressions. The following generic example illustrates this. A join is given with a CTE expression that filters all even numbers from a numeric column:<\/p>\n<pre>WITH t_cte AS (SELECT id FROM foo WHERE id % 2 = 0) SELECT COUNT(*) FROM t_cte JOIN bar USING(id);<\/pre>\n<p>In PostgreSQL<sup>\u00ae<\/sup> 11, using a CTE always leads to a CTE scan that materializes the CTE expression first:<\/p>\n<pre>EXPLAIN (ANALYZE, BUFFERS) WITH t_cte AS (SELECT id FROM foo WHERE id % 2 = 0) SELECT COUNT(*) FROM t_cte JOIN bar USING(id) ;\r\n                                                       QUERY PLAN                                                        \r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n Aggregate  (cost=2231.12..2231.14 rows=1 width=8) (actual time=48.684..48.684 rows=1 loops=1)\r\n   Buffers: shared hit=488\r\n   CTE t_cte\r\n     ->  Seq Scan on foo  (cost=0.00..1943.00 rows=500 width=4) (actual time=0.055..17.146 rows=50000 loops=1)\r\n           Filter: ((id % 2) = 0)\r\n           Rows Removed by Filter: 50000\r\n           Buffers: shared hit=443\r\n   ->  Hash Join  (cost=270.00..286.88 rows=500 width=0) (actual time=7.297..47.966 rows=5000 loops=1)\r\n         Hash Cond: (t_cte.id = bar.id)\r\n         Buffers: shared hit=488\r\n         ->  CTE Scan on t_cte  (cost=0.00..10.00 rows=500 width=4) (actual time=0.063..31.158 rows=50000 loops=1)\r\n               Buffers: shared hit=443\r\n         ->  Hash  (cost=145.00..145.00 rows=10000 width=4) (actual time=7.191..7.192 rows=10000 loops=1)\r\n               Buckets: 16384  Batches: 1  Memory Usage: 480kB\r\n               Buffers: shared hit=45\r\n               ->  Seq Scan on bar  (cost=0.00..145.00 rows=10000 width=4) (actual time=0.029..3.031 rows=10000 loops=1)\r\n                     Buffers: shared hit=45\r\n Planning Time: 0.832 ms\r\n Execution Time: 50.562 ms\r\n(19 rows)\r\n<\/pre>\n<p>This plan first materializes the <code>CTE<\/code> with a <code>sequential scan<\/code> with a corresponding filter <code>(id % 2 = 0)<\/code>. Here no functional index is used, therefore this scan is correspondingly more expensive. Then the result of the <code>CTE<\/code> is linked to the table <code>bar<\/code> by <code>Hash Join<\/code> with the corresponding <code>Join<\/code> condition. With PostgreSQL<sup>\u00ae<\/sup> 12, the optimizer now has the ability to <em>inline<\/em> these CTE expressions without prior materialization. The underlying optimized plan in PostgreSQL<sup>\u00ae<\/sup> 12 will look like this:<\/p>\n<pre>EXPLAIN (ANALYZE, BUFFERS) WITH t_cte AS (SELECT id FROM foo WHERE id % 2 = 0) SELECT COUNT(*) FROM t_cte JOIN bar USING(id) ;\r\n                                                                QUERY PLAN                                                                 \r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n Aggregate  (cost=706.43..706.44 rows=1 width=8) (actual time=9.203..9.203 rows=1 loops=1)\r\n   Buffers: shared hit=148\r\n   ->  Merge Join  (cost=0.71..706.30 rows=50 width=0) (actual time=0.099..8.771 rows=5000 loops=1)\r\n         Merge Cond: (foo.id = bar.id)\r\n         Buffers: shared hit=148\r\n         ->  Index Only Scan using foo_id_idx on foo  (cost=0.29..3550.29 rows=500 width=4) (actual time=0.053..3.490 rows=5001 loops=1)\r\n               Filter: ((id % 2) = 0)\r\n               Rows Removed by Filter: 5001\r\n               Heap Fetches: 10002\r\n               Buffers: shared hit=74\r\n         ->  Index Only Scan using bar_id_idx on bar  (cost=0.29..318.29 rows=10000 width=4) (actual time=0.038..3.186 rows=10000 loops=1)\r\n               Heap Fetches: 10000\r\n               Buffers: shared hit=74\r\n Planning Time: 0.646 ms\r\n Execution Time: 9.268 ms\r\n(15 rows)\r\n<\/pre>\n<p>The advantage of this method is that there is no initial materialization of the CTE expression. Instead, the query is executed directly with a <code>Join<\/code>. This works for all non-recursive CTE expressions without side effects (for example, CTEs with write statements) and those that are referenced only once per query. The old behavior of the optimizer can be forced with the <code>WITH ... AS MATERIALIZED ...<\/code> directive.<\/p>\n<h2>Generated Columns<\/h2>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/12\/ddl-generated-columns.html\"><code>Generated Columns<\/code><\/a> in PostgreSQL<sup>\u00ae<\/sup> 12 are materialized columns, which calculate a result based on expressions using existing column values. These are stored with the corresponding result values in the tuple. The advantage is that there is no need to create triggers for subsequent calculation of column values. The following simple example illustrates the new functionality using a price table with net and gross prices:<\/p>\n<pre>CREATE TABLE preise(netto numeric,\r\n                    brutto numeric GENERATED ALWAYS AS (netto * 1.19) STORED);\r\n \r\nINSERT INTO preise VALUES(17.30);\r\nINSERT INTO preise VALUES(225);\r\nINSERT INTO preise VALUES(247);\r\nINSERT INTO preise VALUES(19.15);\r\n \r\nSELECT * FROM preise;\r\n netto \u2502 brutto\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n 17.30 \u2502 20.5870\r\n   225 \u2502  267.75\r\n   247 \u2502  293.93\r\n 19.15 \u2502 22.7885\r\n(4 rows)\r\n<\/pre>\n<p>The column <code>brutto<\/code> is calculated directly from the net price. The keyword <code>STORED<\/code> is mandatory. Of course, indexes can also be created on <code>Generated Columns<\/code>, but they cannot be part of a primary key. Furthermore, the SQL expression must be unique, i.e. it must return the same result even if the input quantity is the same. Columns declared as <code>Generated Columns<\/code> cannot be used explicitly in <code>INSERT<\/code> or <code>UPDATE<\/code> operations. If a column list is absolutely necessary, the corresponding value can be indirectly referenced with the keyword <code>DEFAULT<\/code>.<\/p>\n<h2>Omission of explicit OID columns<\/h2>\n<p>Explicit OID columns have historically been a way to create unique column values so that a table row can be uniquely identified database-wide. However, for a long time PostgreSQL<sup>\u00ae<\/sup> has only created these explicitly and considered their basic functionality obsolete. With PostgreSQL<sup>\u00ae<\/sup> the possibility to create such columns explicitly is now finally abolished. This means that it will no longer be possible to specify the <code>WITH OIDS<\/code> directive for tables. System tables that have always referenced OID objects uniquely will now return OID values without explicitly specifying OID columns in the result set. Especially older software, which handled catalog queries carelessly, could get problems with a double column output.<\/p>\n<h2>Moving <code>recovery.conf<\/code> to <code>postgresql.conf<\/code><\/h2>\n<p>Up to and including PostgreSQL<sup>\u00ae<\/sup> 11, database recovery and streaming replication instances were configured via a separate configuration file <code>recovery.conf<\/code>.<\/p>\n<p>With PostgreSQL<sup>\u00ae<\/sup> 12, all configuration work done there now migrates to <code>postgresql.conf<\/code>. The <code>recovery.conf<\/code> file is no longer required. PostgreSQL<sup>\u00ae<\/sup> 12 refuses to start as soon as this file exists. Whether recovery or streaming standby is desired is now decided either by a <code>recovery.signal<\/code> file (for recovery) or by a <code>standby.signal<\/code> file (for standby systems). The latter has priority if both files are present. The old parameter <code>standby_mode<\/code>, which controlled this behavior since then, has been removed.<\/p>\n<p>For automatic deployments of high-availability systems, this means a major change. However, it is now also possible to perform corresponding configuration work almost completely using the <code>ALTER SYSTEM<\/code> command.<\/p>\n<h2>REINDEX CONCURRENTLY<\/h2>\n<p>With PostgreSQL<sup>\u00ae<\/sup> 12 there is now a way to re-create indexes with as few locks as possible. This greatly simplifies one of the most common maintenance tasks in very write-intensive databases. Previously, a combination of <code>CREATE INDEX CONCURRENTLY<\/code> and <code>DROP INDEX CONCURRENTLY<\/code> had to be used. In doing so, it was also necessary to ensure that index names were reassigned accordingly, if required.<\/p>\n<p>The <a href=\"https:\/\/www.postgresql.org\/docs\/release\/12.0\/\">release notes<\/a> give an even more detailed overview of all new features and above all incompatibilities with previous PostgreSQL<sup>\u00ae<\/sup> versions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The PostgreSQL\u00ae Global Development Group (PGDG) has released version 12 of the popular free PostgreSQL\u00ae database. As our article for Beta 4 has already indicated, a number of new features, improvements and optimizations have been incorporated into the release. These include among others: Optimized disk space utilization and speed for btree indexes btree-Indexes, the default [&hellip;]<\/p>\n","protected":false},"author":15,"featured_media":6210,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_improvement_type_select":"improve_an_existing","_thumb_yes_seoaic":false,"_frame_yes_seoaic":false,"seoaic_generate_description":"","seoaic_improve_instructions_prompt":"","seoaic_rollback_content_improvement":"","seoaic_idea_thumbnail_generator":"","thumbnail_generated":false,"thumbnail_generate_prompt":"","seoaic_article_description":"","seoaic_article_subtitles":[],"footnotes":""},"categories":[1703,1708],"tags":[1824,1754,1761,1801],"class_list":["post-6723","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-postgresql-en","tag-credativ-en","tag-news-en","tag-open-source-en","tag-postgresql-en"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>PostgreSQL\u00ae 12 released - credativ\u00ae<\/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.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL\u00ae 12 released\" \/>\n<meta property=\"og:description\" content=\"The PostgreSQL\u00ae Global Development Group (PGDG) has released version 12 of the popular free PostgreSQL\u00ae database. As our article for Beta 4 has already indicated, a number of new features, improvements and optimizations have been incorporated into the release. These include among others: Optimized disk space utilization and speed for btree indexes btree-Indexes, the default [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-07T08:54:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-29T08:56:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2500\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bernd Helmle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bernd Helmle\" \/>\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.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/\"},\"author\":{\"name\":\"Bernd Helmle\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/9c950b20158763e45032034310b6f2bd\"},\"headline\":\"PostgreSQL\u00ae 12 released\",\"datePublished\":\"2019-10-07T08:54:59+00:00\",\"dateModified\":\"2022-03-29T08:56:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/\"},\"wordCount\":936,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg\",\"keywords\":[\"credativ\",\"News\",\"Open Source\",\"PostgreSQL\u00ae\"],\"articleSection\":[\"News\",\"PostgreSQL\u00ae\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#respond\"]}],\"copyrightYear\":\"2019\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/\",\"name\":\"PostgreSQL\u00ae 12 released - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg\",\"datePublished\":\"2019-10-07T08:54:59+00:00\",\"dateModified\":\"2022-03-29T08:56:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg\",\"width\":2500,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\u00ae 12 released\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/9c950b20158763e45032034310b6f2bd\",\"name\":\"Bernd Helmle\",\"description\":\"Bernd Helmle arbeitet als Datenbankberater und -entwickler f\u00fcr die credativ GmbH, Deutschland. Er verf\u00fcgt \u00fcber umfassende Erfahrung in der PostgreSQL\u00ae-Administration, Hochverf\u00fcgbarkeitsl\u00f6sungen und PostgreSQL\u00ae-Optimierung und Performance-Tuning. Au\u00dferdem war er an verschiedenen Migrationsprojekten von anderen Datenbanken zu PostgreSQL\u00ae beteiligt. Bernd Helmle entwickelte und betreut die Informix Foreign Data Wrapper Erweiterung f\u00fcr PostgreSQL\u00ae.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql\\\/postgresql-12-released\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL\u00ae 12 released - credativ\u00ae","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.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL\u00ae 12 released","og_description":"The PostgreSQL\u00ae Global Development Group (PGDG) has released version 12 of the popular free PostgreSQL\u00ae database. As our article for Beta 4 has already indicated, a number of new features, improvements and optimizations have been incorporated into the release. These include among others: Optimized disk space utilization and speed for btree indexes btree-Indexes, the default [&hellip;]","og_url":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2019-10-07T08:54:59+00:00","article_modified_time":"2022-03-29T08:56:23+00:00","og_image":[{"width":2500,"height":300,"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg","type":"image\/jpeg"}],"author":"Bernd Helmle","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"Bernd Helmle","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/"},"author":{"name":"Bernd Helmle","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/9c950b20158763e45032034310b6f2bd"},"headline":"PostgreSQL\u00ae 12 released","datePublished":"2019-10-07T08:54:59+00:00","dateModified":"2022-03-29T08:56:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/"},"wordCount":936,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg","keywords":["credativ","News","Open Source","PostgreSQL\u00ae"],"articleSection":["News","PostgreSQL\u00ae"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#respond"]}],"copyrightYear":"2019","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/","url":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/","name":"PostgreSQL\u00ae 12 released - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#primaryimage"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg","datePublished":"2019-10-07T08:54:59+00:00","dateModified":"2022-03-29T08:56:23+00:00","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#primaryimage","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/10\/PostgreSQL-12-vero\u0308ffentlicht-Header-1.jpg","width":2500,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL\u00ae 12 released"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/9c950b20158763e45032034310b6f2bd","name":"Bernd Helmle","description":"Bernd Helmle arbeitet als Datenbankberater und -entwickler f\u00fcr die credativ GmbH, Deutschland. Er verf\u00fcgt \u00fcber umfassende Erfahrung in der PostgreSQL\u00ae-Administration, Hochverf\u00fcgbarkeitsl\u00f6sungen und PostgreSQL\u00ae-Optimierung und Performance-Tuning. Au\u00dferdem war er an verschiedenen Migrationsprojekten von anderen Datenbanken zu PostgreSQL\u00ae beteiligt. Bernd Helmle entwickelte und betreut die Informix Foreign Data Wrapper Erweiterung f\u00fcr PostgreSQL\u00ae."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql\/postgresql-12-released\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/6723","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=6723"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/6723\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media\/6210"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=6723"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=6723"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=6723"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}