{"id":11048,"date":"2018-03-29T14:11:39","date_gmt":"2018-03-29T12:11:39","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/"},"modified":"2018-03-29T14:11:39","modified_gmt":"2018-03-29T12:11:39","slug":"insert-on-conflict-with-partitions-finally-works-in-postgresql-11","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/","title":{"rendered":"Insert&#8230;on conflict with partitions finally works in PostgreSQL 11"},"content":{"rendered":"<p>Another partitioning improvement for PostgreSQL 11: <a href=\"https:\/\/www.postgresql.org\/docs\/current\/static\/sql-insert.html\" target=\"_blank\" rel=\"noopener\">Insert&#8230;on conflict<\/a> is now supported (for most cases) in PostgreSQL 11 thanks to this <a href=\"https:\/\/git.postgresql.org\/gitweb\/?p=postgresql.git;a=commit;h=555ee77a9668e3f1b03307055b5027e13bf1a715\" target=\"_blank\" rel=\"noopener\">commit<\/a>. Lets see how it works.<\/p>\n<p><!--more--><\/p>\n<p>We&#8217;ll again use the slightly modified little list partitioned table from the last post, here in PostgreSQL 10:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select version();\n                                                          version                                       Insert                    \n----------------------------------------------------------------------------------------------------------------------------\n PostgreSQL 10.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit\n(1 row)\n \npostgres=# create table part ( a int, b int, list varchar(5) ) partition by list (list);\nCREATE TABLE\npostgres=# create table part_1 partition of part for values in ('beer');\nCREATE TABLE\npostgres=# create table part_2 partition of part for values in ('wine');\nCREATE TABLE\npostgres=# create unique index iu1 on part_1 (a);\nCREATE INDEX\npostgres=# create unique index iu2 on part_2 (a);\nCREATE INDEX\npostgres=# d+ part\n                                          Table \"public.part\"\n Column |         Type         | Collation | Nullable | Default | Storage  | Stats target | Description \n--------+----------------------+-----------+----------+---------+----------+--------------+-------------\n a      | integer              |           |          |         | plain    |              | \n b      | integer              |           |          |         | plain    |              | \n list   | character varying(5) |           |          |         | extended |              | \nPartition key: LIST (list)\nPartitions: part_1 FOR VALUES IN ('beer'),\n            part_2 FOR VALUES IN ('wine')\n\npostgres=# d+ part_1\n                                         Table \"public.part_1\"\n Column |         Type         | Collation | Nullable | Default | Storage  | Stats target | Description \n--------+----------------------+-----------+----------+---------+----------+--------------+-------------\n a      | integer              |           |          |         | plain    |              | \n b      | integer              |           |          |         | plain    |              | \n list   | character varying(5) |           |          |         | extended |              | \nPartition of: part FOR VALUES IN ('beer')\nPartition constraint: ((list IS NOT NULL) AND ((list)::text = ANY (ARRAY['beer'::character varying(5)])))\nIndexes:\n    \"iu1\" UNIQUE, btree (a)\n\npostgres=# d+ part_2\n                                         Table \"public.part_2\"\n Column |         Type         | Collation | Nullable | Default | Storage  | Stats target | Description \n--------+----------------------+-----------+----------+---------+----------+--------------+-------------\n a      | integer              |           |          |         | plain    |              | \n b      | integer              |           |          |         | plain    |              | \n list   | character varying(5) |           |          |         | extended |              | \nPartition of: part FOR VALUES IN ('wine')\nPartition constraint: ((list IS NOT NULL) AND ((list)::text = ANY (ARRAY['wine'::character varying(5)])))\nIndexes:\n    \"iu2\" UNIQUE, btree (a)\n\n<\/pre>\n<p>Insert some sample data:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part(a,b,list) values (1,1,'beer');\nINSERT 0 1\npostgres=# insert into part(a,b,list) values (2,2,'beer');\nINSERT 0 1\npostgres=# select * from part;\n a | b | list \n---+---+------\n 1 | 1 | beer\n 2 | 2 | beer\n(2 rows)\n<\/pre>\n<p>When you try the following in PostgreSQL 10 it will fail:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part(a,b,list) values (1,2,'beer') on conflict (a) do update set b = 2;\nERROR:  ON CONFLICT clause is not supported with partitioned tables\n<\/pre>\n<p>Doing that directly on the partition is working:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# insert into part(a,b,list) values (1,2,'beer') on conflict (a) do update set b = 2;\nERROR:  ON CONFLICT clause is not supported with partitioned tables\npostgres=# insert into part_1(a,b,list) values (1,2,'beer') on conflict (a) do update set b = 2;\nINSERT 0 1\npostgres=# select * from part;\n a | b | list \n---+---+------\n 2 | 2 | beer\n 1 | 2 | beer\n(2 rows)\n<\/pre>\n<p>But who wants to do that directly on the partition? For sure this is a big limitation and not very useful. That got fixed now with PostgreSQL 11:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select version();\n                                                  version                                                   \n------------------------------------------------------------------------------------------------------------\n PostgreSQL 11devel on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16), 64-bit\n(1 row)\n\npostgres=# create table part ( a int, b int, list varchar(5) ) partition by list (list);\nCREATE TABLE\npostgres=# alter table part add constraint pk1 primary key (a,list);\nALTER TABLE\npostgres=# create table part_1 partition of part for values in ('beer');\nCREATE TABLE\npostgres=# create table part_2 partition of part for values in ('wine');\nCREATE TABLE\npostgres=# d+ part\n                                          Table \"public.part\"\n Column |         Type         | Collation | Nullable | Default | Storage  | Stats target | Description \n--------+----------------------+-----------+----------+---------+----------+--------------+-------------\n a      | integer              |           | not null |         | plain    |              | \n b      | integer              |           |          |         | plain    |              | \n list   | character varying(5) |           | not null |         | extended |              | \nPartition key: LIST (list)\nIndexes:\n    \"pk1\" PRIMARY KEY, btree (a, list)\nPartitions: part_1 FOR VALUES IN ('beer'),\n            part_2 FOR VALUES IN ('wine')\n\n\npostgres=# insert into part(a,b,list) values (1,1,'beer');\nINSERT 0 1\npostgres=# insert into part(a,b,list) values (2,2,'wine');\nINSERT 0 1\npostgres=# insert into part(a,b,list) values (1,2,'beer') on conflict (a,list) do update set b = 2;\nINSERT 0 1\n<\/pre>\n<p>Cool. But be aware that there still is a case which is not working:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# select * from part;\n a | b | list \n---+---+------\n 1 | 2 | beer\n 2 | 2 | wine\n(2 rows)\n\npostgres=# insert into part(a,b,list) values (1,2,'beer') on conflict (a,list) do update set list='wine';\nERROR:  invalid ON UPDATE specification\nDETAIL:  The result tuple would appear in a different partition than the original tuple.\n<\/pre>\n<p>When you do an on conflict clause that would require to move the row into another partition (updating the partition key) it will fail.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Another partitioning improvement for PostgreSQL 11: Insert&#8230;on conflict is now supported (for most cases) in PostgreSQL 11 thanks to this commit. Lets see how it works.<\/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-11048","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.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Insert...on conflict with partitions finally works in PostgreSQL 11 - 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\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Insert...on conflict with partitions finally works in PostgreSQL 11\" \/>\n<meta property=\"og:description\" content=\"Another partitioning improvement for PostgreSQL 11: Insert&#8230;on conflict is now supported (for most cases) in PostgreSQL 11 thanks to this commit. Lets see how it works.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-29T12:11:39+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=\"4 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\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Insert&#8230;on conflict with partitions finally works in PostgreSQL 11\",\"datePublished\":\"2018-03-29T12:11:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\"},\"wordCount\":139,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\",\"name\":\"Insert...on conflict with partitions finally works in PostgreSQL 11 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2018-03-29T12:11:39+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Insert&#8230;on conflict with partitions finally works in PostgreSQL 11\"}]},{\"@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":"Insert...on conflict with partitions finally works in PostgreSQL 11 - 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\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/","og_locale":"en_US","og_type":"article","og_title":"Insert...on conflict with partitions finally works in PostgreSQL 11","og_description":"Another partitioning improvement for PostgreSQL 11: Insert&#8230;on conflict is now supported (for most cases) in PostgreSQL 11 thanks to this commit. Lets see how it works.","og_url":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/","og_site_name":"dbi Blog","article_published_time":"2018-03-29T12:11:39+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Insert&#8230;on conflict with partitions finally works in PostgreSQL 11","datePublished":"2018-03-29T12:11:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/"},"wordCount":139,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/","url":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/","name":"Insert...on conflict with partitions finally works in PostgreSQL 11 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2018-03-29T12:11:39+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/insert-on-conflict-with-partitions-finally-works-in-postgresql-11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Insert&#8230;on conflict with partitions finally works in PostgreSQL 11"}]},{"@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\/11048","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=11048"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/11048\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=11048"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=11048"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=11048"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=11048"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}