{"id":32353,"date":"2024-04-09T08:37:00","date_gmt":"2024-04-09T06:37:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=32353"},"modified":"2024-04-08T19:20:33","modified_gmt":"2024-04-08T17:20:33","slug":"postgresql-17-split-and-merge-partitions","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/","title":{"rendered":"PostgreSQL 17: Split and Merge partitions"},"content":{"rendered":"\n<p>Since declarative partitioning was introduced in <a href=\"https:\/\/www.postgresql.org\/docs\/10\/release-10.html#id-1.11.6.28.3\">PostgreSQL 10<\/a> there have been several additions and enhancements throughout the PostgreSQL releases. PostgreSQL 17, expected to be released around September\/October this year, is no exception to that and will come with two new features when it comes to partitioning: <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=87c21bb9412c8ba2727dec5ebcd74d44c2232d11\" target=\"_blank\" rel=\"noreferrer noopener\">Splitting<\/a> and <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commitdiff;h=1adf16b8fba45f77056d91573cd7138ed9da4ebf\" target=\"_blank\" rel=\"noreferrer noopener\">Merging<\/a> partitions. <\/p>\n\n\n\n<p>Before we can have a look at that, we need a partitioned table, some partitions and some data, so lets generate this. Splitting and Merging works for range and list partitioning and because most of the examples for partitioning you can find online go for range partitioning, we&#8217;ll go for list partitioning in this post:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,12,14,16,18]; title: ; notranslate\" title=\"\">\npostgres=# create table t ( a int, b text ) partition by list (b);\nCREATE TABLE\npostgres=# \\d+ t\nPartitioned table &quot;public.t&quot;\nColumn | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description\n--------+---------+-----------+----------+---------+----------+-------------+--------------+-------------\na | integer | | | | plain | | |\nb | text | | | | extended | | |\nPartition key: LIST (b)\nNumber of partitions: 0\n\npostgres=# create table t_p1 partition of t for values in (&#039;a&#039;);\nCREATE TABLE\npostgres=# create table t_p2 partition of t for values in (&#039;b&#039;);\nCREATE TABLE\npostgres=# create table t_p3 partition of t for values in (&#039;c&#039;);\nCREATE TABLE\npostgres=# create table t_p4 partition of t for values in (&#039;d&#039;);\nCREATE TABLE\npostgres=# \\d+ t\n                                      Partitioned table &quot;public.t&quot;\n Column |  Type   | Collation | Nullable | Default | Storage  | Compression | Stats target | Description \n--------+---------+-----------+----------+---------+----------+-------------+--------------+-------------\n a      | integer |           |          |         | plain    |             |              | \n b      | text    |           |          |         | extended |             |              | \nPartition key: LIST (b)\nPartitions: t_p1 FOR VALUES IN (&#039;a&#039;),\n            t_p2 FOR VALUES IN (&#039;b&#039;),\n            t_p3 FOR VALUES IN (&#039;c&#039;),\n            t_p4 FOR VALUES IN (&#039;d&#039;)\n<\/pre><\/div>\n\n\n<p>This gives us a simple list partitioned table and four partitions. Lets add some data to the partitions:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,5,7,9,15,21,27]; title: ; notranslate\" title=\"\">\npostgres=# insert into t select i, &#039;a&#039; from generate_series(1,100) i;\nINSERT 0 100\npostgres=# insert into t select i, &#039;b&#039; from generate_series(101,200) i;\nINSERT 0 100\npostgres=# insert into t select i, &#039;c&#039; from generate_series(201,300) i;\nINSERT 0 100\npostgres=# insert into t select i, &#039;d&#039; from generate_series(301,400) i;\nINSERT 0 100\npostgres=# select count(*) from t_p1;\n count \n-------\n   100\n(1 row)\n\npostgres=# select count(*) from t_p2;\n count \n-------\n   100\n(1 row)\n\npostgres=# select count(*) from t_p3;\n count \n-------\n   100\n(1 row)\n\npostgres=# select count(*) from t_p4;\n count \n-------\n   100\n(1 row)\n\n<\/pre><\/div>\n\n\n<p>Suppose we want to merge the first two partitions, containing values of &#8216;a&#8217; and &#8216;b&#8217;. This can now be easily done with the new merge partition DDL command:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# alter table t merge partitions (t_p1, t_p2) into t_p12;\nALTER TABLE\npostgres=# \\d+ t\n                                      Partitioned table &quot;public.t&quot;\n Column |  Type   | Collation | Nullable | Default | Storage  | Compression | Stats target | Description \n--------+---------+-----------+----------+---------+----------+-------------+--------------+-------------\n a      | integer |           |          |         | plain    |             |              | \n b      | text    |           |          |         | extended |             |              | \nPartition key: LIST (b)\nPartitions: t_p12 FOR VALUES IN (&#039;a&#039;, &#039;b&#039;),\n            t_p3 FOR VALUES IN (&#039;c&#039;),\n            t_p4 FOR VALUES IN (&#039;d&#039;)\n<\/pre><\/div>\n\n\n<p>The same the other way around: Splitting the new combined partition into single partitions:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3]; title: ; notranslate\" title=\"\">\npostgres=# alter table t split partition t_p12 into ( partition t_p1 for values in (&#039;a&#039;), partition t_p2 for values in (&#039;b&#039;));\nALTER TABLE\npostgres=# \\d+ t\n                                      Partitioned table &quot;public.t&quot;\n Column |  Type   | Collation | Nullable | Default | Storage  | Comp&gt;\n--------+---------+-----------+----------+---------+----------+-----&gt;\n a      | integer |           |          |         | plain    |     &gt;\n b      | text    |           |          |         | extended |     &gt;\nPartition key: LIST (b)\nPartitions: t_p1 FOR VALUES IN (&#039;a&#039;),\n            t_p2 FOR VALUES IN (&#039;b&#039;),\n            t_p3 FOR VALUES IN (&#039;c&#039;),\n            t_p4 FOR VALUES IN (&#039;d&#039;)\n<\/pre><\/div>\n\n\n<p>Nice, but there currently is a downside with this: Both operations will take an &#8220;ACCESS EXCLUSIVE LOCK&#8221; on the parent table, so everything against that table will be blocked for the time it takes to either split or merge the partitions. I am not to worried about that, as this was the same with other features related to partitioning in the past. Over time, locking was reduced and I guess this will be the same with this feature.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Since declarative partitioning was introduced in PostgreSQL 10 there have been several additions and enhancements throughout the PostgreSQL releases. PostgreSQL 17, expected to be released around September\/October this year, is no exception to that and will come with two new features when it comes to partitioning: Splitting and Merging partitions. Before we can have a [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229,198],"tags":[77],"type_dbi":[],"class_list":["post-32353","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-database-management","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>PostgreSQL 17: Split and Merge partitions - 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\/postgresql-17-split-and-merge-partitions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 17: Split and Merge partitions\" \/>\n<meta property=\"og:description\" content=\"Since declarative partitioning was introduced in PostgreSQL 10 there have been several additions and enhancements throughout the PostgreSQL releases. PostgreSQL 17, expected to be released around September\/October this year, is no exception to that and will come with two new features when it comes to partitioning: Splitting and Merging partitions. Before we can have a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-09T06:37:00+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=\"2 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\\\/postgresql-17-split-and-merge-partitions\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL 17: Split and Merge partitions\",\"datePublished\":\"2024-04-09T06:37:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/\"},\"wordCount\":248,\"commentCount\":3,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\",\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/\",\"name\":\"PostgreSQL 17: Split and Merge partitions - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-04-09T06:37:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/postgresql-17-split-and-merge-partitions\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 17: Split and Merge partitions\"}]},{\"@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":"PostgreSQL 17: Split and Merge partitions - 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\/postgresql-17-split-and-merge-partitions\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 17: Split and Merge partitions","og_description":"Since declarative partitioning was introduced in PostgreSQL 10 there have been several additions and enhancements throughout the PostgreSQL releases. PostgreSQL 17, expected to be released around September\/October this year, is no exception to that and will come with two new features when it comes to partitioning: Splitting and Merging partitions. Before we can have a [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/","og_site_name":"dbi Blog","article_published_time":"2024-04-09T06:37:00+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL 17: Split and Merge partitions","datePublished":"2024-04-09T06:37:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/"},"wordCount":248,"commentCount":3,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring","Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/","name":"PostgreSQL 17: Split and Merge partitions - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-04-09T06:37:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-17-split-and-merge-partitions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 17: Split and Merge partitions"}]},{"@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\/32353","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=32353"}],"version-history":[{"count":10,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/32353\/revisions"}],"predecessor-version":[{"id":32382,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/32353\/revisions\/32382"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=32353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=32353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=32353"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=32353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}