{"id":12626,"date":"2019-07-08T05:19:48","date_gmt":"2019-07-08T03:19:48","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/"},"modified":"2019-07-08T05:19:48","modified_gmt":"2019-07-08T03:19:48","slug":"postgresql-data-type-conversion","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/","title":{"rendered":"Converting columns from one data type to another in PostgreSQL"},"content":{"rendered":"<p>Usually you should use the data type that best fits the representation of your data in a relational database. But how many times did you see applications that store dates or numbers as text or dates as integers? This is not so uncommon as you might think and fixing that could be quite a challenge as you need to cast from one data type to another when you want to change the data type used for a specific column. Depending on the current format of the data it might be easy to fix or it might become more complicated. PostgreSQL has a quite clever way of doing that.<\/p>\n<p><!--more--><\/p>\n<p>Frequent readers of our blog might know that already: We start with a simple, reproducible test setup:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 values ( 1, '20190101');\nINSERT 0 1\npostgres=# insert into t1 values ( 2, '20190102');\nINSERT 0 1\npostgres=# insert into t1 values ( 3, '20190103');\nINSERT 0 1\npostgres=# select * from t1;\n a |    b     \n---+----------\n 1 | 20190101\n 2 | 20190102\n 3 | 20190103\n(3 rows)\n<\/pre>\n<p>What do we have here? A simple table with two columns: Column &#8220;a&#8221; is an integer and column &#8220;b&#8221; is of type text. For humans it seems obvious that the second column in reality contains a date but stored as text. What options do we have to fix that? We could try something like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 add column c date default (to_date('YYYYDDMM',b));\npsql: ERROR:  cannot use column reference in DEFAULT expression\n<\/pre>\n<p>That obviously does not work. Another option would be to add another column with the correct data type, populate that column and then drop the original one:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 add column c date;\nALTER TABLE\npostgres=# update t1 set c = to_date('YYYYMMDD',b);\nUPDATE 3\npostgres=# alter table t1 drop column b;\nALTER TABLE\n<\/pre>\n<p>But what is the downside of that? This will probably break the application as the column name changed and there is no way to avoid that. Is there a better way of doing that? Let&#8217;s start from scratch:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 values ( 1, '20190101');\nINSERT 0 1\npostgres=# insert into t1 values ( 2, '20190102');\nINSERT 0 1\npostgres=# insert into t1 values ( 3, '20190103');\nINSERT 0 1\npostgres=# select * from t1;\n a |    b     \n---+----------\n 1 | 20190101\n 2 | 20190102\n 3 | 20190103\n(3 rows)\n<\/pre>\n<p>The same setup as before. What other options do we have to convert &quot;b&quot; to a real date without changing the name of the column. Let&#039;s try the most obvious way and let PostgreSQL decide what to do:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 alter column b type date;\npsql: ERROR:  column \"b\" cannot be cast automatically to type date\nHINT:  You might need to specify \"USING b::date\".\n<\/pre>\n<p>This does not work as PostgreSQL in this case can not know how to go from one data type to another. But the &#8220;HINT&#8221; does already tell us what we might need to do:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 alter column b type date using (b::date);\nALTER TABLE\npostgres=# d t1\n                 Table \"public.t1\"\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n b      | date    |           |          | \n\npostgres=# \n<\/pre>\n<p>For our data in the &#8220;b&#8221; column that does work. but consider you have data like this:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# drop table t1;\nDROP TABLE\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 values (1,'01-JAN-2019');\nINSERT 0 1\npostgres=# insert into t1 values (2,'02-JAN-2019');\nINSERT 0 1\npostgres=# insert into t1 values (3,'03-JAN-2019');\nINSERT 0 1\npostgres=# select * from t1;\n a |      b      \n---+-------------\n 1 | 01-JAN-2019\n 2 | 02-JAN-2019\n 3 | 03-JAN-2019\n(3 rows)\n<\/pre>\n<p>Would that still work?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 alter column b type date using (b::date);;\nALTER TABLE\npostgres=# select * from t1;\n a |     b      \n---+------------\n 1 | 2019-01-01\n 2 | 2019-01-02\n 3 | 2019-01-03\n(3 rows)\n<\/pre>\n<p>Yes, but in this case it will not:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nDROP TABLE\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 values (1,'First--January--19');\nINSERT 0 1\npostgres=# insert into t1 values (2,'Second--January--19');\nINSERT 0 1\npostgres=# insert into t1 values (3,'Third--January--19');\nINSERT 0 1\npostgres=# select * from t1;\n a |          b           \n---+---------------------\n 1 | First--January--19\n 2 | Second--January--19\n 3 | Third--January--19\n(3 rows)\n\npostgres=# alter table t1 alter column b type date using (b::date);;\npsql: ERROR:  invalid input syntax for type date: \"First--January--19\"\npostgres=# \n<\/pre>\n<p>As PostgreSQL has no idea how to do the conversion this will fail, no surprise here. But still you have the power of doing that by providing a function that does the conversion in exactly the way you want to have it:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\ncreate or replace function f_convert_to_date ( pv_text in text ) returns date\nas $$\ndeclare\nbegin\n  return date('20190101');\nend;\n$$ language plpgsql;\n<\/pre>\n<p>Of course you would add logic to parse the input string so that the function will return the matching date and not a constant as in this example. For demonstration purposes we will go with this fake function:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# alter table t1 alter column b type date using (f_convert_to_date(b));;\nALTER TABLE\npostgres=# d t1\n                 Table \"public.t1\"\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n b      | date    |           |          | \n\npostgres=# select * from t1;\n a |     b      \n---+------------\n 1 | 2019-01-01\n 2 | 2019-01-01\n 3 | 2019-01-01\n(3 rows)\n<\/pre>\n<p>&#8230; and here we go. The column was converted from text to date and we provided the exact way of doing that by calling a function that contains the logic to do that. As long as the output of the function conforms to the data type you want and you did not do any mistakes you can potentially go from any source data type to any target data type. <\/p>\n<p>There is one remaining question: Will that block other sessions selecting from the table while the conversion is ongoing?<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\npostgres=# drop table t1;\nDROP TABLE\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 select a, '20190101' from generate_series(1,1000000) a;\nINSERT 0 1000000\npostgres=# create index i1 on t1(a);\nCREATE INDEX\n<\/pre>\n<p>In one session we will do the conversion and in the other session we will do a simple select that goes over the index:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- first session\npostgres=# alter table t1 alter column b type date using (f_convert_to_date(b));\n<\/pre>\n<p>Second one at the same time:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\n-- second session\npostgres=# select * from t1 where a = 1;\n-- blocks\n<\/pre>\n<p>Yes, that will block, so you should plan such actions carefully when you have a busy system. But this is still better than adding a new column.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Usually you should use the data type that best fits the representation of your data in a relational database. But how many times did you see applications that store dates or numbers as text or dates as integers? This is not so uncommon as you might think and fixing that could be quite a challenge [&hellip;]<\/p>\n","protected":false},"author":29,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[77],"type_dbi":[],"class_list":["post-12626","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>Converting columns from one data type to another in PostgreSQL - 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-data-type-conversion\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Converting columns from one data type to another in PostgreSQL\" \/>\n<meta property=\"og:description\" content=\"Usually you should use the data type that best fits the representation of your data in a relational database. But how many times did you see applications that store dates or numbers as text or dates as integers? This is not so uncommon as you might think and fixing that could be quite a challenge [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-08T03:19:48+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=\"5 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-data-type-conversion\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"Converting columns from one data type to another in PostgreSQL\",\"datePublished\":\"2019-07-08T03:19:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\"},\"wordCount\":584,\"commentCount\":0,\"keywords\":[\"PostgreSQL\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\",\"name\":\"Converting columns from one data type to another in PostgreSQL - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2019-07-08T03:19:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Converting columns from one data type to another in PostgreSQL\"}]},{\"@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":"Converting columns from one data type to another in PostgreSQL - 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-data-type-conversion\/","og_locale":"en_US","og_type":"article","og_title":"Converting columns from one data type to another in PostgreSQL","og_description":"Usually you should use the data type that best fits the representation of your data in a relational database. But how many times did you see applications that store dates or numbers as text or dates as integers? This is not so uncommon as you might think and fixing that could be quite a challenge [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/","og_site_name":"dbi Blog","article_published_time":"2019-07-08T03:19:48+00:00","author":"Daniel Westermann","twitter_card":"summary_large_image","twitter_creator":"@westermanndanie","twitter_misc":{"Written by":"Daniel Westermann","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"Converting columns from one data type to another in PostgreSQL","datePublished":"2019-07-08T03:19:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/"},"wordCount":584,"commentCount":0,"keywords":["PostgreSQL"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/","name":"Converting columns from one data type to another in PostgreSQL - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2019-07-08T03:19:48+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-data-type-conversion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Converting columns from one data type to another in PostgreSQL"}]},{"@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\/12626","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=12626"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/12626\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=12626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=12626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=12626"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=12626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}