{"id":19092,"date":"2022-09-22T19:04:21","date_gmt":"2022-09-22T17:04:21","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=19092"},"modified":"2022-09-22T19:04:21","modified_gmt":"2022-09-22T17:04:21","slug":"toasting-in-postgresql-lets-see-it-in-action","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/","title":{"rendered":"TOASTing in PostgreSQL, let&#8217;s see it in action"},"content":{"rendered":"<p>The last two posts introduced <a href=\"https:\/\/www.dbi-services.com\/blog\/toasting-strategies-in-postgresql\/\" target=\"_blank\" rel=\"noopener\">TOASTing strategies<\/a> and how <a href=\"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-toast-tables\/\" target=\"_blank\" rel=\"noopener\">TOAST tables<\/a> look like. Have a look at those posts if you are not yet familiar with TOAST in PostgreSQL. In this post we&#8217;ll look a bit under the hood to understand how TOASTing really works.<\/p>\n<p>We&#8217;ll use the same table as in the last post, which is still there but empty right now:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# \\d t\n                 Table \"public.t\"\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n b      | text    |           |          | \n\npostgres=# \\d :reltoastrelid\nTOAST table \"pg_toast.pg_toast_16418\"\n   Column   |  Type   \n------------+---------\n chunk_id   | oid\n chunk_seq  | integer\n chunk_data | bytea\nOwning table: \"public.t\"\nIndexes:\n    \"pg_toast_16418_index\" PRIMARY KEY, btree (chunk_id, chunk_seq)\n\npostgres=# select count(*) from t;\n count \n-------\n     0\n(1 row)\n<\/pre>\n<p>What happens if insert a row like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# insert into t values (1, repeat('x',10000));\nINSERT 0 1\n<\/pre>\n<p>The second column now contains a string with a length of 10000 characters. Did this trigger the TOASTer?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# select count(*) from :reltoastrelid;\n count \n-------\n     0\n(1 row)\n<\/pre>\n<p>It did not, and the reason is easy to explain: This string can easily be compressed and there is no need to move it out of line. This leads us to another question: What compression algorithm was used to compress the data? The default is this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# show default_toast_compression;\n default_toast_compression \n---------------------------\n pglz\n(1 row)\n<\/pre>\n<p>Starting with PostgreSQL 14 you have an additional option:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# set default_toast_compression = lz4;\nSET\n<\/pre>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/LZ4_(compression_algorithm)\" target=\"_blank\" rel=\"noopener\">LZ4<\/a> &#8220;is focused on compression and decompression speed&#8221; and usually gives you better results than the buid-in PGLZ algorithm. Support for LZ4 needs to be compiled in, otherwise it is not available. The packages provided by the PostgreSQL community have it enabled by default, if you compile from source you need to enable it:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">postgres@debian11pg:\/home\/postgres\/postgresql\/ [pg16] .\/configure --help | grep lz4\n  --with-lz4              build with LZ4 support\n<\/pre>\n<p>You also have the flexibility to change the compression algorithm on a column basis:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# alter table t alter column b set compression lz4;\nALTER TABLE\n<\/pre>\n<p>As soon as you change the default compression algorithm for a column, this is recorded in <a>pg_attribute<\/a> (it is empty if the default compression is used):<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# select attcompression from pg_attribute where attname = 'b';\n attcompression \n----------------\n l\n(1 row)\n<\/pre>\n<p>The performance benefit of LZ4 compared to PGLZ is quite huge, as you can see in the little test below:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [8,12,23,27]\">postgres=# \\timing\nTiming is on.\npostgres=# truncate t;\nTRUNCATE TABLE\nTime: 18.493 ms\npostgres=# insert into t select i, repeat('x',10000) from generate_series(1,1000000) i;\nINSERT 0 1000000\nTime: 3431.030 ms (00:03.431)\npostgres=# select pg_size_pretty(pg_total_relation_size('t'));\n pg_size_pretty \n----------------\n 89 MB\n(1 row)\nTime: 1.361 ms\npostgres=# truncate t;\nTRUNCATE TABLE\nTime: 45.045 ms\npostgres=# alter table t alter column b set compression pglz;\nALTER TABLE\nTime: 13.442 ms\npostgres=# insert into t select i, repeat('x',10000) from generate_series(1,1000000) i;\nINSERT 0 1000000\nTime: 51065.485 ms (00:51.065)\npostgres=# select pg_size_pretty(pg_total_relation_size('t'));\n pg_size_pretty \n----------------\n 160 MB\n(1 row)\n<\/pre>\n<p>How can we force the TOASTer to kick in? One way of doing that is by generating a string that is not easily compressible like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# truncate t;\nTRUNCATE TABLE\npostgres=# with dummy_string as\n( select string_agg (md5(random()::text),'') as dummy \n    from generate_series(1,5000) )\n  insert into t \n  select 1\n       , dummy_string.dummy \n    from dummy_string;\nINSERT 0 1\n<\/pre>\n<p>This will give us 81 chunks in the corresponding TOAST table:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# select count(*) from :reltoastrelid;\n count \n-------\n    81\n(1 row)\n<\/pre>\n<p>&#8230; and the data looks like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">postgres=# select * from :reltoastrelid limit 3;\n chunk_id | chunk_seq |                                                                                                      &gt;\n----------+-----------+------------------------------------------------------------------------------------------------------&gt;\n    16455 |         0 | \\x313839623233643865653830316434323863336230333463633731313435333766396133393130356262383739343765373&gt;\n    16455 |         1 | \\x313461633239646532633936613433306664636664303337346332343737626563336266373663346435386563633166663&gt;\n    16455 |         2 | \\x633262373562616563393536636537383537323434633565363639396337646164653138623430366635633265383135643&gt;\n(3 rows)\n<\/pre>\n<p>We managed to trigger the TOASTer. What still needs to be answered is: At what size of a row is the TOASTer triggered. The answer is in &#8220;\/src\/include\/access\/heaptoast.h&#8221;: If a new tuple is larger than 2000 bytes, then the TOASTer kicks in and does its job.<\/p>\n<p>Some final words: You never should use &#8220;select *&#8221; against tables anyway, but especially against tables which contain data which is moved out-of-line. If you do that, you will always pull out the TOASTed data, and this might take some time. Only retrieve it, if you really need it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The last two posts introduced TOASTing strategies and how TOAST tables look like. Have a look at those posts if you are not yet familiar with TOAST in PostgreSQL. In this post we&#8217;ll look a bit under the hood to understand how TOASTing really works. We&#8217;ll use the same table as in the last post,&hellip;&nbsp;<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[4133],"tags":[],"class_list":["post-19092","post","type-post","status-publish","format-standard","hentry","category-database"],"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>TOASTing in PostgreSQL, let&#039;s see it in action - dbi services | 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\/toasting-in-postgresql-lets-see-it-in-action\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TOASTing in PostgreSQL, let&#039;s see it in action\" \/>\n<meta property=\"og:description\" content=\"The last two posts introduced TOASTing strategies and how TOAST tables look like. Have a look at those posts if you are not yet familiar with TOAST in PostgreSQL. In this post we&#8217;ll look a bit under the hood to understand how TOASTing really works. We&#8217;ll use the same table as in the last post,&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-22T17:04:21+00:00\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\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=\"3 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\\\/toasting-in-postgresql-lets-see-it-in-action\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\"},\"headline\":\"TOASTing in PostgreSQL, let&#8217;s see it in action\",\"datePublished\":\"2022-09-22T17:04:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/\"},\"wordCount\":407,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"articleSection\":[\"Database\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/\",\"name\":\"TOASTing in PostgreSQL, let's see it in action - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2022-09-22T17:04:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/toasting-in-postgresql-lets-see-it-in-action\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TOASTing in PostgreSQL, let&#8217;s see it in action\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"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\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"caption\":\"Open source Team\"},\"description\":\"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"TOASTing in PostgreSQL, let's see it in action - dbi services | 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\/toasting-in-postgresql-lets-see-it-in-action\/","og_locale":"en_US","og_type":"article","og_title":"TOASTing in PostgreSQL, let's see it in action","og_description":"The last two posts introduced TOASTing strategies and how TOAST tables look like. Have a look at those posts if you are not yet familiar with TOAST in PostgreSQL. In this post we&#8217;ll look a bit under the hood to understand how TOASTing really works. We&#8217;ll use the same table as in the last post,&hellip;&nbsp;","og_url":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2022-09-22T17:04:21+00:00","author":"Open source Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Open source Team","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a"},"headline":"TOASTing in PostgreSQL, let&#8217;s see it in action","datePublished":"2022-09-22T17:04:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/"},"wordCount":407,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"articleSection":["Database"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/","url":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/","name":"TOASTing in PostgreSQL, let's see it in action - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2022-09-22T17:04:21+00:00","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/toasting-in-postgresql-lets-see-it-in-action\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"TOASTing in PostgreSQL, let&#8217;s see it in action"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","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":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","caption":"Open source Team"},"description":"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.","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\/19092","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=19092"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/19092\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=19092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=19092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=19092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}