{"id":23986,"date":"2023-03-27T14:09:53","date_gmt":"2023-03-27T12:09:53","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=23986"},"modified":"2023-03-27T14:11:09","modified_gmt":"2023-03-27T12:11:09","slug":"postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/","title":{"rendered":"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql"},"content":{"rendered":"\n<p>Last week some smaller features got committed for PostgreSQL. The first one is an option which can be given to explain for displaying the generic plan for a statement. I&#8217;ve written about generic plans in the past, please read <a href=\"https:\/\/www.dbi-services.com\/blog\/what-are-custom-and-generic-plans-in-postgresql\/\" target=\"_blank\" rel=\"noreferrer noopener\">this before<\/a> you continue and are not aware what this is about. <\/p>\n\n\n\n<p>Displaying the help for EXPLAIN in psql will already show you the new option:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,14]; title: ; notranslate\" title=\"\">\npostgres=# \\h explain\nCommand:     EXPLAIN\nDescription: show the execution plan of a statement\nSyntax:\nEXPLAIN &#x5B; ( option &#x5B;, ...] ) ] statement\nEXPLAIN &#x5B; ANALYZE ] &#x5B; VERBOSE ] statement\n\nwhere option can be one of:\n\n    ANALYZE &#x5B; boolean ]\n    VERBOSE &#x5B; boolean ]\n    COSTS &#x5B; boolean ]\n    SETTINGS &#x5B; boolean ]\n    GENERIC_PLAN &#x5B; boolean ]\n    BUFFERS &#x5B; boolean ]\n    WAL &#x5B; boolean ]\n    TIMING &#x5B; boolean ]\n    SUMMARY &#x5B; boolean ]\n    FORMAT { TEXT | XML | JSON | YAML }\n\nURL: https:\/\/www.postgresql.org\/docs\/devel\/sql-explain.html\n<\/pre><\/div>\n\n\n<p>Let&#8217;s create some sample data to have some to test with:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,3,5,7]; title: ; notranslate\" title=\"\">\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# insert into t1 select i, i::text from generate_series(1,1000000) i;\nINSERT 0 1000000\npostgres=# analyze t1;\nANALYZE\n<\/pre><\/div>\n\n\n<p>For seeing a generic before PostgreSQL 16 we would need to create a <a href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-prepare.html\" target=\"_blank\" rel=\"noreferrer noopener\">prepared statement <\/a>and then execute that 6 times, or switch <a href=\"https:\/\/www.postgresql.org\/docs\/current\/runtime-config-query.html\" target=\"_blank\" rel=\"noreferrer noopener\">plan_cache_mode<\/a> to &#8216;force_generic_plan&#8217;. Starting with PostgreSQL 16 we can simply do it like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1,7]; title: ; notranslate\" title=\"\">\npostgres=# explain (generic_plan true) select b from t1 where a = $1;\n                             QUERY PLAN                              \n---------------------------------------------------------------------\n Gather  (cost=1000.00..11613.43 rows=1 width=6)\n   Workers Planned: 2\n   -&gt;  Parallel Seq Scan on t1  (cost=0.00..10613.33 rows=1 width=6)\n         Filter: (a = $1)\n(4 rows)\n<\/pre><\/div>\n\n\n<p>Nice, saves some work if you want to see the generic plan.<\/p>\n\n\n\n<p>The other feature went into <a href=\"https:\/\/www.postgresql.org\/docs\/current\/app-psql.html\" target=\"_blank\" rel=\"noreferrer noopener\">psql<\/a>. As you might know, you can easily execute commands on the operating system, as as long as the operating user who started psql has permissions to do so, e.g.:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; highlight: [1]; title: ; notranslate\" title=\"\">\npostgres=# \\! ls -l \/var\/tmp\ntotal 8\ndrwx------ 3 root root 4096 Mar 27 11:05 systemd-private-42efbc3a4e614d01b5e49fb8a0b76627-systemd-logind.service-7C7X7o\ndrwx------ 3 root root 4096 Mar 27 11:05 systemd-private-42efbc3a4e614d01b5e49fb8a0b76627-systemd-timesyncd.service-5vVnaO\n<\/pre><\/div>\n\n\n<p>Until now there is no way to get the exit code from the shell command. You could try something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,6]; title: ; notranslate\" title=\"\">\npostgres=$ \\! ls -l \/var\/tmp &amp;&amp; echo $?\ntotal 8\ndrwx------ 3 root root 4096 Mar 27 11:05 systemd-private-42efbc3a4e614d01b5e49fb8a0b76627-systemd-logind.service-7C7X7o\ndrwx------ 3 root root 4096 Mar 27 11:05 systemd-private-42efbc3a4e614d01b5e49fb8a0b76627-systemd-timesyncd.service-5vVnaO\n0\npostgres=$ \\! ls -l \/var\/tmps &amp;&amp; echo $?\nls: cannot access &#039;\/var\/tmps&#039;: No such file or directory\npostgres=$ \n<\/pre><\/div>\n\n\n<p>&#8230; but this will only give you the exit code for the successful command (but you don&#8217;t have it in psql yet). For the failed command it will not work at all.<\/p>\n\n\n\n<p>Now you can do something like this:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1,3,9]; title: ; notranslate\" title=\"\">\npostgres=$ \\! ls -l \/var\/tmps\nls: cannot access &#039;\/var\/tmps&#039;: No such file or directory\npostgres=# select :&#039;SHELL_ERROR&#039;;\n ?column? \n----------\n true\n(1 row)\n\npostgres=$ select :&#039;SHELL_EXIT_CODE&#039;;\n ?column? \n----------\n 2\n(1 row)\n\npostgres=$ \n<\/pre><\/div>\n\n\n<p>Also nice, thanks to everyone involved.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Last week some smaller features got committed for PostgreSQL. The first one is an option which can be given to explain for displaying the generic plan for a statement. I&#8217;ve written about generic plans in the past, please read this before you continue and are not aware what this is about. Displaying the help for [&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":[2602],"type_dbi":[],"class_list":["post-23986","post","type-post","status-publish","format-standard","hentry","category-database-administration-monitoring","category-database-management","tag-postgresql-2"],"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>PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql - 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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql\" \/>\n<meta property=\"og:description\" content=\"Last week some smaller features got committed for PostgreSQL. The first one is an option which can be given to explain for displaying the generic plan for a statement. I&#8217;ve written about generic plans in the past, please read this before you continue and are not aware what this is about. Displaying the help for [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-27T12:09:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-27T12:11:09+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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql\",\"datePublished\":\"2023-03-27T12:09:53+00:00\",\"dateModified\":\"2023-03-27T12:11:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\"},\"wordCount\":242,\"commentCount\":0,\"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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\",\"name\":\"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-03-27T12:09:53+00:00\",\"dateModified\":\"2023-03-27T12:11:09+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql\"}]},{\"@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 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql - 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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql","og_description":"Last week some smaller features got committed for PostgreSQL. The first one is an option which can be given to explain for displaying the generic plan for a statement. I&#8217;ve written about generic plans in the past, please read this before you continue and are not aware what this is about. Displaying the help for [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/","og_site_name":"dbi Blog","article_published_time":"2023-03-27T12:09:53+00:00","article_modified_time":"2023-03-27T12:11:09+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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql","datePublished":"2023-03-27T12:09:53+00:00","dateModified":"2023-03-27T12:11:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/"},"wordCount":242,"commentCount":0,"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-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/","name":"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-03-27T12:09:53+00:00","dateModified":"2023-03-27T12:11:09+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-16-generic_plan-option-for-explain-and-shell-exit-codes-psql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL 16: GENERIC_PLAN option for EXPLAIN and SHELL exit codes for psql"}]},{"@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\/23986","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=23986"}],"version-history":[{"count":8,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/23986\/revisions"}],"predecessor-version":[{"id":24000,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/23986\/revisions\/24000"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=23986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=23986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=23986"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=23986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}