{"id":20393,"date":"2022-11-06T14:46:25","date_gmt":"2022-11-06T13:46:25","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=20393"},"modified":"2022-11-14T12:56:27","modified_gmt":"2022-11-14T11:56:27","slug":"postgresql-dropping-a-table-automatically-if-another-table-is-dropped","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/","title":{"rendered":"PostgreSQL: Dropping a table automatically if another table is dropped"},"content":{"rendered":"\n<p>Imagine the following use case: You have a table t1, and based on it&#8217;s contents you create another table t2. What you want to achieve is: If table t1 gets dropped, you want to have table t2 to be dropped automatically. Can you do something like this in PostgreSQL? Short answer is yes, you have several options here. Depending on what exactly you want to achieve, one or the other option might be better for your use case.<\/p>\n\n\n\n<p>Lets start with a little demo setup. One really simple table and a second one which uses the content of the first one to be created:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; 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,100) i;\nINSERT 0 100\npostgres=# create table t2 as select count(*) from t1;\nSELECT 1\n<\/pre><\/div>\n\n\n<p>Is there anything we can do, to drop the &#8220;t2&#8221; table automatically if table &#8220;t1&#8221; is dropped? The only option you have with this setup, is to use an <a href=\"https:\/\/www.postgresql.org\/docs\/current\/event-triggers.html\" target=\"_blank\" rel=\"noreferrer noopener\">event trigger<\/a>. Using that you can create a trigger which fires, as soon as an object in the database gets dropped. <\/p>\n\n\n\n<p>The <a href=\"https:\/\/www.postgresql.org\/docs\/15\/plpgsql-trigger.html\" target=\"_blank\" rel=\"noreferrer noopener\">trigger function<\/a> to achieve this is quite simple:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# CREATE OR REPLACE FUNCTION f_drop_table_t2()\n           RETURNS event_trigger LANGUAGE plpgsql \nAS \n$$\nDECLARE\n    tables_dropped record;\nBEGIN\n    FOR tables_dropped IN SELECT * FROM pg_event_trigger_dropped_objects()\n    LOOP\n      IF ( tables_dropped.object_name = &#039;t1&#039;\n           AND\n           tables_dropped.original )\n      THEN\n         EXECUTE &#039;drop table public.t2&#039;;\n      END IF;\n    END LOOP;\nEND;\n$$;\n<\/pre><\/div>\n\n\n<p> The function <a href=\"https:\/\/www.postgresql.org\/docs\/current\/functions-event-triggers.html\" target=\"_blank\" rel=\"noreferrer noopener\">pg_event_trigger_dropped_objects()<\/a> returns a record which contains a list of all objects which have been dropped. The function above does not only check the name of the table but also the &#8220;original&#8221; property. This is required to capture only the base table and not any underlying system objects.<\/p>\n\n\n\n<p>Now that we have the trigger function we can create the event trigger:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# CREATE EVENT TRIGGER etrg_drop_table_t2\n           ON sql_drop\n           EXECUTE FUNCTION f_drop_table_t2();    \nCREATE EVENT TRIGGER\n<\/pre><\/div>\n\n\n<p>From now on, as soon as we drop the &#8220;t1&#8221; table, the &#8220;t2&#8221; table will also be dropped:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# \\d\n        List of relations\n Schema | Name | Type  |  Owner   \n--------+------+-------+----------\n public | t1   | table | postgres\n public | t2   | table | postgres\n(2 rows)\n\npostgres=# drop table t1;\nDROP TABLE\npostgres=# \\d\nDid not find any relations.\npostgres=# drop function f_drop_table_t2() cascade;\nNOTICE:  drop cascades to event trigger etrg_drop_table_t2\nDROP FUNCTION\n<\/pre><\/div>\n\n\n<p>As stated earlier above, there are other solutions for this requirement. By using a <a href=\"https:\/\/www.postgresql.org\/docs\/current\/rules-materializedviews.html\" target=\"_blank\" rel=\"noreferrer noopener\">materialized view<\/a> instead of a table for &#8220;t2&#8221;, we create a dependency from &#8220;t1&#8221; to &#8220;t2&#8221;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; 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,100) i;\nINSERT 0 100\npostgres=# create materialized view t2 as select count(*) from t1 with data;\nSELECT 1\npostgres=# \n<\/pre><\/div>\n\n\n<p>As PostgreSQL knows about this dependency, it will not let us drop &#8220;t1&#8221; by default:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# drop table t1;\nERROR:  cannot drop table t1 because other objects depend on it\nDETAIL:  materialized view t2 depends on table t1\nHINT:  Use DROP ... CASCADE to drop the dependent objects too.\n<\/pre><\/div>\n\n\n<p>By using &#8220;CASCADE&#8221; we can also get rid of &#8220;t2&#8221; automatically when we drop t1:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# drop table t1 cascade;\nNOTICE:  drop cascades to materialized view t2\nDROP TABLE\npostgres=# \\d\nDid not find any relations.\n<\/pre><\/div>\n\n\n<p>The same concept can be used with a standard view:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# create table t1 ( a int, b text );\nCREATE TABLE\npostgres=# create view t2 as select count(*) from t1;\nCREATE VIEW\npostgres=# drop table t1;\nERROR:  cannot drop table t1 because other objects depend on it\nDETAIL:  view t2 depends on table t1\nHINT:  Use DROP ... CASCADE to drop the dependent objects too.\npostgres=# drop table t1 cascade;\nNOTICE:  drop cascades to view t2\nDROP TABLE\npostgres=# \\d\nDid not find any relations.\npostgres=# \n<\/pre><\/div>\n\n\n<p>You might think, that a foreign key will be a solution for this use case as well, but it is not:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\npostgres=# create table t1 ( a int primary key, b text );\nCREATE TABLE\npostgres=# create table t2 ( a int references t1(a), b int );\nCREATE TABLE\npostgres=# drop table t1;\nERROR:  cannot drop table t1 because other objects depend on it\nDETAIL:  constraint t2_a_fkey on table t2 depends on table t1\nHINT:  Use DROP ... CASCADE to drop the dependent objects too.\npostgres=# drop table t1 cascade;\nNOTICE:  drop cascades to constraint t2_a_fkey on table t2\nDROP TABLE\npostgres=# \\d t2\n                 Table &quot;public.t2&quot;\n Column |  Type   | Collation | Nullable | Default \n--------+---------+-----------+----------+---------\n a      | integer |           |          | \n b      | integer |           |          | \n<\/pre><\/div>\n\n\n<p>This will only drop the constraint, but not the table.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Imagine the following use case: You have a table t1, and based on it&#8217;s contents you create another table t2. What you want to achieve is: If table t1 gets dropped, you want to have table t2 to be dropped automatically. Can you do something like this in PostgreSQL? Short answer is yes, you have [&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],"tags":[77],"type_dbi":[],"class_list":["post-20393","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>PostgreSQL: Dropping a table automatically if another table is dropped - 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-dropping-a-table-automatically-if-another-table-is-dropped\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL: Dropping a table automatically if another table is dropped\" \/>\n<meta property=\"og:description\" content=\"Imagine the following use case: You have a table t1, and based on it&#8217;s contents you create another table t2. What you want to achieve is: If table t1 gets dropped, you want to have table t2 to be dropped automatically. Can you do something like this in PostgreSQL? Short answer is yes, you have [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-06T13:46:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-14T11:56:27+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\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\"},\"author\":{\"name\":\"Daniel Westermann\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"headline\":\"PostgreSQL: Dropping a table automatically if another table is dropped\",\"datePublished\":\"2022-11-06T13:46:25+00:00\",\"dateModified\":\"2022-11-14T11:56:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\"},\"wordCount\":359,\"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-dropping-a-table-automatically-if-another-table-is-dropped\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\",\"name\":\"PostgreSQL: Dropping a table automatically if another table is dropped - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2022-11-06T13:46:25+00:00\",\"dateModified\":\"2022-11-14T11:56:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL: Dropping a table automatically if another table is dropped\"}]},{\"@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: Dropping a table automatically if another table is dropped - 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-dropping-a-table-automatically-if-another-table-is-dropped\/","og_locale":"en_US","og_type":"article","og_title":"PostgreSQL: Dropping a table automatically if another table is dropped","og_description":"Imagine the following use case: You have a table t1, and based on it&#8217;s contents you create another table t2. What you want to achieve is: If table t1 gets dropped, you want to have table t2 to be dropped automatically. Can you do something like this in PostgreSQL? Short answer is yes, you have [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/","og_site_name":"dbi Blog","article_published_time":"2022-11-06T13:46:25+00:00","article_modified_time":"2022-11-14T11:56:27+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\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/"},"author":{"name":"Daniel Westermann","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"headline":"PostgreSQL: Dropping a table automatically if another table is dropped","datePublished":"2022-11-06T13:46:25+00:00","dateModified":"2022-11-14T11:56:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/"},"wordCount":359,"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-dropping-a-table-automatically-if-another-table-is-dropped\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/","url":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/","name":"PostgreSQL: Dropping a table automatically if another table is dropped - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2022-11-06T13:46:25+00:00","dateModified":"2022-11-14T11:56:27+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d08e9bd996a89bd75c0286cbabf3c66"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/postgresql-dropping-a-table-automatically-if-another-table-is-dropped\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL: Dropping a table automatically if another table is dropped"}]},{"@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\/20393","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=20393"}],"version-history":[{"count":5,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/20393\/revisions"}],"predecessor-version":[{"id":20398,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/20393\/revisions\/20398"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=20393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=20393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=20393"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=20393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}