{"id":9958,"date":"2020-04-16T12:20:38","date_gmt":"2020-04-16T10:20:38","guid":{"rendered":"https:\/\/www.credativ.de\/blog\/credativ-inside\/recover-data-from-corrupt-tables-in-postgresql\/"},"modified":"2020-04-16T12:20:38","modified_gmt":"2020-04-16T10:20:38","slug":"recover-data-from-corrupt-tables-in-postgresql","status":"publish","type":"post","link":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/","title":{"rendered":"Recover Data from Corrupt Tables in PostgreSQL<sup>\u00ae<\/sup>"},"content":{"rendered":"<p><a href=\"https:\/\/www.credativ.de\/software\/datenbanken\/postgresql\/\">PostgreSQL<sup>\u00ae<\/sup><\/a> is an extremely robust database, to which most of our clients also entrust their data. However, if errors do occur, they are usually due to the storage system, where individual bits or bytes flip, or entire blocks become corrupted. We demonstrate how to recover data from corrupt tables.  <\/p>\n<p>In case of an error, the user is confronted with messages that originate from the storage layer or other PostgreSQL<sup>\u00ae<\/sup> subsystems:<\/p>\n<pre><code>postgres=# select * from t;\nERROR:  missing chunk number 0 for toast value 192436 in pg_toast_192430\n\npostgres=# select * from a;\nERROR:  invalid memory alloc request size 18446744073709551613\n<\/code><\/pre>\n<p>If only individual tuples are corrupt, one can partially help by reading them out individually, e.g., according to <code>id<\/code>, which often does not help further:<\/p>\n<pre><code>select * from t where id = 1;\n<\/code><\/pre>\n<p>It is more promising to address the tuples directly by their internal tuple ID, called in PostgreSQL<sup>\u00ae<\/sup> <code>ctid<\/code>:<\/p>\n<pre><code>select * from t where ctid = '(0,1)';\n<\/code><\/pre>\n<p>To read out all tuples, we use a loop in plpgsql:<\/p>\n<pre><code>for page in 0 .. pages-1 loop\n  for item in 1 .. ??? loop\n     select * from t where ctid = '('||page||','||item||')' into r;\n     return next r;\n  end loop;\nend loop;\n<\/code><\/pre>\n<p>We still need the number of pages in the table, which we get from <code>pg_relation_size()<\/code>, and the number of tuples on the page, for which we utilize the <code>pageinspect<\/code> extension.<\/p>\n<pre><code>select pg_relation_size(relname) \/ current_setting('block_size')::int into pages;\n\nfor page in 0 .. pages-1 loop\n  for item in select t_ctid from heap_page_items(get_raw_page(relname::text, page)) loop\n    SELECT * FROM t WHERE ctid=item into r;\n    if r is not null then\n      return next r;\n    end if;\n  end loop;\nend loop;\n<\/code><\/pre>\n<p>Now comes the most important part: Accessing the damaged tuples or pages causes errors that we must catch with a <code>begin..exception..end<\/code> block. We pass the error messages to the user as <x id=\"gid_1\"><\/x>. Furthermore, the function should not only work for one table but also receive a parameter <x id=\"gid_2\"><\/x>. The entire plpgsql function then looks like this:   <\/p>\n<pre><code>create extension pageinspect;\n\ncreate or replace function read_table(relname regclass)\nreturns setof record\nas $$\ndeclare\n  pages int;\n  page int;\n  ctid tid;\n  r record;\n  sql_state text;\n  error text;\nbegin\n  select pg_relation_size(relname) \/ current_setting('block_size')::int into pages;\n\n  for page in 0 .. pages-1 loop\n\n    begin\n\n      for ctid in select t_ctid from heap_page_items(get_raw_page(relname::text, page)) loop\n        begin\n          execute format('SELECT * FROM %s WHERE ctid=%L', relname, ctid) into r;\n          if r is not null then\n            return next r;\n          end if;\n        exception -- bad tuple\n          when others then\n            get stacked diagnostics sql_state := RETURNED_SQLSTATE;\n            get stacked diagnostics error := MESSAGE_TEXT;\n            raise notice 'Skipping ctid %: %: %', ctid, sql_state, error;\n        end;\n      end loop;\n\n    exception -- bad page\n      when others then\n        get stacked diagnostics sql_state := RETURNED_SQLSTATE;\n        get stacked diagnostics error := MESSAGE_TEXT;\n        raise notice 'Skipping page %: %: %', page, sql_state, error;\n    end;\n\n  end loop;\nend;\n$$ language plpgsql;\n<\/code><\/pre>\n<p>Since the function returns &#8220;record&#8221;, the table signature must be provided during the call:<\/p>\n<pre><code>postgres =# select * from read_table('t') as t(t text);\nNOTICE:  Skipping ctid (0,1): XX000: missing chunk number 0 for toast value 192436 in pg_toast_192430\n       t\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n one\n two\n three\n...\n<\/code><\/pre>\n<p>An alternative variant writes the read data directly into a new table:<\/p>\n<pre><code>postgres =# select rescue_table('t');\nNOTICE:  t: page 0 of 1\nNOTICE:  Skipping ctid (0,1): XX000: missing chunk number 0 for toast value 192436 in pg_toast_192430\n                                    rescue_table\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n rescue_table t into t_rescue: 0 of 1 pages are bad, 1 bad tuples, 100 tuples copied\n(1 row)\n<\/code><\/pre>\n<p>The table <code>t_rescue<\/code> was created automatically.<\/p>\n<pre><code>create extension pageinspect;\n\ncreate or replace function rescue_table(relname regclass, savename name default null, \"create\" boolean default true)\nreturns text\nas $$\ndeclare\n  pages int;\n  page int;\n  ctid tid;\n  row_count bigint;\n  good_tuples bigint := 0;\n  bad_pages bigint := 0;\n  bad_tuples bigint := 0;\n  sql_state text;\n  error text;\nbegin\n  if savename is null then\n    savename := relname || '_rescue';\n  end if;\n  if rescue_table.create then\n    execute format('CREATE TABLE %s (LIKE %s)', savename, relname);\n  end if;\n\n  select pg_relation_size(relname) \/ current_setting('block_size')::int into pages;\n\n  for page in 0 .. pages-1 loop\n    if page % 10000 = 0 then\n      raise notice '%: page % of %', relname, page, pages;\n    end if;\n\n    begin\n\n      for ctid in select t_ctid from heap_page_items(get_raw_page(relname::text, page)) loop\n        begin\n          execute format('INSERT INTO %s SELECT * FROM %s WHERE ctid=%L', savename, relname, ctid);\n          get diagnostics row_count = ROW_COUNT;\n          good_tuples := good_tuples + row_count;\n        exception -- bad tuple\n          when others then\n            get stacked diagnostics sql_state := RETURNED_SQLSTATE;\n            get stacked diagnostics error := MESSAGE_TEXT;\n            raise notice 'Skipping ctid %: %: %', ctid, sql_state, error;\n            bad_tuples := bad_tuples + 1;\n        end;\n      end loop;\n\n    exception -- bad page\n      when others then\n        get stacked diagnostics sql_state := RETURNED_SQLSTATE;\n        get stacked diagnostics error := MESSAGE_TEXT;\n        raise notice 'Skipping page %: %: %', page, sql_state, error;\n        bad_pages := bad_pages + 1;\n    end;\n\n  end loop;\n\n  error := format('rescue_table %s into %s: %s of %s pages are bad, %s bad tuples, %s tuples copied',\n    relname, savename, bad_pages, pages, bad_tuples, good_tuples);\n  raise log '%', error;\n  return error;\nend;\n$$ language plpgsql;\n<\/code><\/pre>\n<p>The SQL scripts are also available in the <a href=\"https:\/\/github.com\/df7cb\/pg_dirtyread\/tree\/master\/contrib\" target=\"_blank\" rel=\"noopener noreferrer\">pg_dirtyread git repository<\/a>.<\/p>\n<h2>Support<\/h2>\n<p>Should you require assistance with data recovery or the general use of PostgreSQL<sup>\u00ae<\/sup>, our <a href=\"https:\/\/www.credativ.de\/en\/portfolio\/support\/postgresql-competence-center\/\">PostgreSQL<sup>\u00ae<\/sup> Competence Center<\/a> is at your disposal \u2013 24 hours a day, 365 days a year, if desired.<\/p>\n<p>We look forward to <a href=\"https:\/\/www.credativ.de\/%C3%BCber-credativ\/kontakt\">hearing from you<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<p>This article was originally written by Christoph Berg.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PostgreSQL\u00ae is an extremely robust database, to which most of our clients also entrust their data. However, if errors do occur, they are usually due to the storage system, where individual bits or bytes flip, or entire blocks become corrupted. We demonstrate how to recover data from corrupt tables. In case of an error, the [&hellip;]<\/p>\n","protected":false},"author":90,"featured_media":6199,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_improvement_type_select":"improve_an_existing","_thumb_yes_seoaic":false,"_frame_yes_seoaic":false,"seoaic_generate_description":"","seoaic_improve_instructions_prompt":"","seoaic_rollback_content_improvement":"","seoaic_idea_thumbnail_generator":"","thumbnail_generated":false,"thumbnail_generate_prompt":"","seoaic_article_description":"","seoaic_article_subtitles":[],"footnotes":""},"categories":[1708],"tags":[1773,1801,1853],"class_list":["post-9958","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-postgresql-en","tag-data-recovery","tag-postgresql-en","tag-security"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Recover Data from Corrupt Tables in PostgreSQL\u00ae - credativ\u00ae<\/title>\n<meta name=\"description\" content=\"PostgreSQL\u00ae Data Recovery Made Easy: Learn how to effectively tackle corrupt tables.\" \/>\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.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Recover Data from Corrupt Tables in PostgreSQL\u00ae\" \/>\n<meta property=\"og:description\" content=\"PostgreSQL\u00ae data recovery from corrupt tables is explained in an easy-to-understand manner. Protect your valuable data in case of errors.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"credativ\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/credativDE\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-16T10:20:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/postgre-sql-center-credativ-640x390.jpg\" \/>\n<meta name=\"author\" content=\"credativ Redaktion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@credativde\" \/>\n<meta name=\"twitter:site\" content=\"@credativde\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"credativ Editorial Team\" \/>\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.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/\"},\"author\":{\"name\":\"credativ Redaktion\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\"},\"headline\":\"Recover Data from Corrupt Tables in PostgreSQL\u00ae\",\"datePublished\":\"2020-04-16T10:20:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/\"},\"wordCount\":300,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg\",\"keywords\":[\"Data recovery\",\"PostgreSQL\u00ae\",\"Security\"],\"articleSection\":[\"PostgreSQL\u00ae\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#respond\"]}],\"copyrightYear\":\"2020\",\"copyrightHolder\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/\",\"name\":\"Recover Data from Corrupt Tables in PostgreSQL\u00ae - credativ\u00ae\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg\",\"datePublished\":\"2020-04-16T10:20:38+00:00\",\"description\":\"PostgreSQL\u00ae Data Recovery Made Easy: Learn how to effectively tackle corrupt tables.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2020\\\/04\\\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg\",\"width\":2500,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Recover Data from Corrupt Tables in PostgreSQL\u00ae\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"name\":\"credativ GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Organization\",\"Place\"],\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#organization\",\"name\":\"credativ\u00ae\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/\",\"logo\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#local-main-organization-logo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#local-main-organization-logo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/credativDE\\\/\",\"https:\\\/\\\/x.com\\\/credativde\",\"https:\\\/\\\/mastodon.social\\\/@credativde\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/credativ-gmbh\",\"https:\\\/\\\/www.instagram.com\\\/credativ\\\/\"],\"description\":\"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\\\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.\",\"legalName\":\"credativ GmbH\",\"foundingDate\":\"2025-03-01\",\"duns\":\"316387060\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":\"11\",\"maxValue\":\"50\"},\"address\":{\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#local-main-place-address\"},\"geo\":{\"@type\":\"GeoCoordinates\",\"latitude\":\"51.1732374\",\"longitude\":\"6.392010099999999\"},\"telephone\":[\"+4921619174200\",\"08002733284\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"telephone\":\"08002733284\",\"email\":\"vertrieb@credativ.de\"},\"openingHoursSpecification\":[{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\"],\"opens\":\"09:00\",\"closes\":\"17:00\"},{\"@type\":\"OpeningHoursSpecification\",\"dayOfWeek\":[\"Saturday\",\"Sunday\"],\"opens\":\"00:00\",\"closes\":\"00:00\"}],\"email\":\"info@credativ.de\",\"areaServed\":\"D-A-CH\",\"vatID\":\"DE452151696\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/#\\\/schema\\\/person\\\/63430ac9e022ccceba0f8d53ffe6db12\",\"name\":\"credativ Redaktion\",\"description\":\"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich.\"},{\"@type\":\"PostalAddress\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#local-main-place-address\",\"streetAddress\":\"Hennes-Weisweiler-Allee 23\",\"addressLocality\":\"M\u00f6nchengladbach\",\"postalCode\":\"41179\",\"addressRegion\":\"Deutschland\",\"addressCountry\":\"DE\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.credativ.de\\\/en\\\/blog\\\/postgresql-en\\\/recover-data-from-corrupt-tables-in-postgresql\\\/#local-main-organization-logo\",\"url\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"contentUrl\":\"https:\\\/\\\/www.credativ.de\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/credativ-logo-right.svg\",\"caption\":\"credativ\u00ae\"}]}<\/script>\n<meta name=\"geo.placename\" content=\"M\u00f6nchengladbach\" \/>\n<meta name=\"geo.position\" content=\"51.1732374;6.392010099999999\" \/>\n<meta name=\"geo.region\" content=\"Germany\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Recover Data from Corrupt Tables in PostgreSQL\u00ae - credativ\u00ae","description":"PostgreSQL\u00ae Data Recovery Made Easy: Learn how to effectively tackle corrupt tables.","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.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/","og_locale":"en_US","og_type":"article","og_title":"Recover Data from Corrupt Tables in PostgreSQL\u00ae","og_description":"PostgreSQL\u00ae data recovery from corrupt tables is explained in an easy-to-understand manner. Protect your valuable data in case of errors.","og_url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/","og_site_name":"credativ\u00ae","article_publisher":"https:\/\/www.facebook.com\/credativDE\/","article_published_time":"2020-04-16T10:20:38+00:00","og_image":[{"url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2019\/07\/postgre-sql-center-credativ-640x390.jpg","type":"","width":"","height":""}],"author":"credativ Redaktion","twitter_card":"summary_large_image","twitter_creator":"@credativde","twitter_site":"@credativde","twitter_misc":{"Written by":"credativ Editorial Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/"},"author":{"name":"credativ Redaktion","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12"},"headline":"Recover Data from Corrupt Tables in PostgreSQL\u00ae","datePublished":"2020-04-16T10:20:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/"},"wordCount":300,"commentCount":0,"publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/04\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg","keywords":["Data recovery","PostgreSQL\u00ae","Security"],"articleSection":["PostgreSQL\u00ae"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#respond"]}],"copyrightYear":"2020","copyrightHolder":{"@id":"https:\/\/www.credativ.de\/#organization"}},{"@type":"WebPage","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/","url":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/","name":"Recover Data from Corrupt Tables in PostgreSQL\u00ae - credativ\u00ae","isPartOf":{"@id":"https:\/\/www.credativ.de\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/04\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg","datePublished":"2020-04-16T10:20:38+00:00","description":"PostgreSQL\u00ae Data Recovery Made Easy: Learn how to effectively tackle corrupt tables.","breadcrumb":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#primaryimage","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/04\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2020\/04\/Daten-aus-korrupten-Tabellen-in-PostgreSQL-retten-Header-1.jpg","width":2500,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.credativ.de\/en\/"},{"@type":"ListItem","position":2,"name":"Recover Data from Corrupt Tables in PostgreSQL\u00ae"}]},{"@type":"WebSite","@id":"https:\/\/www.credativ.de\/en\/#website","url":"https:\/\/www.credativ.de\/en\/","name":"credativ GmbH","description":"","publisher":{"@id":"https:\/\/www.credativ.de\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.credativ.de\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Organization","Place"],"@id":"https:\/\/www.credativ.de\/en\/#organization","name":"credativ\u00ae","url":"https:\/\/www.credativ.de\/en\/","logo":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#local-main-organization-logo"},"image":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#local-main-organization-logo"},"sameAs":["https:\/\/www.facebook.com\/credativDE\/","https:\/\/x.com\/credativde","https:\/\/mastodon.social\/@credativde","https:\/\/www.linkedin.com\/company\/credativ-gmbh","https:\/\/www.instagram.com\/credativ\/"],"description":"Die credativ GmbH ist ein f\u00fchrendes, auf Open Source Software spezialisiertes IT-Dienstleistungs- und Beratungsunternehmen. Wir bieten umfassende und professionelle Services, von Beratung und Infrastruktur-Betrieb \u00fcber 24\/7 Support bis hin zu individuellen L\u00f6sungen und Schulungen. Unser Fokus liegt auf dem ganzheitlichen Management von gesch\u00e4ftskritischen Open-Source-Systemen, darunter Betriebssysteme (z.B. Linux), Datenbanken (z.B. PostgreSQL), Konfigurationsmanagement (z.B. Ansible, Puppet) und Virtualisierung. Als engagierter Teil der Open-Source-Community unterst\u00fctzen wir unsere Kunden dabei, die Vorteile freier Software sicher, stabil und effizient in ihrer IT-Umgebung zu nutzen.","legalName":"credativ GmbH","foundingDate":"2025-03-01","duns":"316387060","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"11","maxValue":"50"},"address":{"@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#local-main-place-address"},"geo":{"@type":"GeoCoordinates","latitude":"51.1732374","longitude":"6.392010099999999"},"telephone":["+4921619174200","08002733284"],"contactPoint":{"@type":"ContactPoint","telephone":"08002733284","email":"vertrieb@credativ.de"},"openingHoursSpecification":[{"@type":"OpeningHoursSpecification","dayOfWeek":["Monday","Tuesday","Wednesday","Thursday","Friday"],"opens":"09:00","closes":"17:00"},{"@type":"OpeningHoursSpecification","dayOfWeek":["Saturday","Sunday"],"opens":"00:00","closes":"00:00"}],"email":"info@credativ.de","areaServed":"D-A-CH","vatID":"DE452151696"},{"@type":"Person","@id":"https:\/\/www.credativ.de\/en\/#\/schema\/person\/63430ac9e022ccceba0f8d53ffe6db12","name":"credativ Redaktion","description":"Dieser Account dient als Sammelpunkt f\u00fcr die wertvollen Beitr\u00e4ge ehemaliger Mitarbeiter von credativ. Wir bedanken uns f\u00fcr ihre gro\u00dfartigen Inhalte, die das technische Wissen in unserem Blog \u00fcber die Jahre hinweg bereichert haben. Ihre Artikel bleiben hier weiterhin f\u00fcr unsere Leser zug\u00e4nglich."},{"@type":"PostalAddress","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#local-main-place-address","streetAddress":"Hennes-Weisweiler-Allee 23","addressLocality":"M\u00f6nchengladbach","postalCode":"41179","addressRegion":"Deutschland","addressCountry":"DE"},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.credativ.de\/en\/blog\/postgresql-en\/recover-data-from-corrupt-tables-in-postgresql\/#local-main-organization-logo","url":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","contentUrl":"https:\/\/www.credativ.de\/wp-content\/uploads\/2025\/04\/credativ-logo-right.svg","caption":"credativ\u00ae"}]},"geo.placename":"M\u00f6nchengladbach","geo.position":{"lat":"51.1732374","long":"6.392010099999999"},"geo.region":"Germany"},"_links":{"self":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/users\/90"}],"replies":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/comments?post=9958"}],"version-history":[{"count":0,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/posts\/9958\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media\/6199"}],"wp:attachment":[{"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/media?parent=9958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/categories?post=9958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.credativ.de\/en\/wp-json\/wp\/v2\/tags?post=9958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}