Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Recuperar borrado físico de registro.

From: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
To: SQL Ayuda Postgre <pgsql-es-ayuda(at)postgresql(dot)org>
Cc: Herrera Alvaro <alvherre(at)alvh(dot)no-ip(dot)org>, Casanova Jaime <jaime(at)2ndquadrant(dot)com>, German Gonzalez <german(dot)gonzo(at)gmail(dot)com>
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Recuperar borrado físico de registro.
Date: 2012-05-29 23:20:18
Message-ID: 1338333618.69261.YahooMailNeo@web171001.mail.ukl.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Por cierto, ¿alguien sabe si esta persona subió el recuperador y donde se puede descargar?
http://archives.postgresql.org/pgsql-es-ayuda/2006-02/msg00300.php
German Gonzalez

>________________________________
> De: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
>Para: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>; SQL Ayuda Postgre <pgsql-es-ayuda(at)postgresql(dot)org>
>CC: Herrera Alvaro <alvherre(at)alvh(dot)no-ip(dot)org>; Casanova Jaime <jaime(at)2ndquadrant(dot)com>
>Enviado: Martes 29 de Mayo de 2012 17:50
>Asunto: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Recuperar borrado físico de registro.
>
>
>Reenvío la respuesta ya que no aparece en los email de la lista (y creo q sería una respuesta ), excepto en http://web.archiveorange.com/archive/v/dFNxkHpJO8h9alMLvR0w
>
>Muchas gracias amigo. Busque ese valor 02 05 en el editor
hexadecimal XVI32, le cambie el 05 por 01, reinicie el servidor de
postgresql y funcionó perfectamente. Eso era lo que me hacia falta,
incluso soporta hacerle vacuum a la tabla y no me borra ese registro.
>
>Pasos:
>--1) Buscar el oid de la BD
>select oid from pg_database d where d.datname ='pruebas';
>--2) Buscar la ruta del archivo donde se encuentra la tabla, el OID de la BD debe coincidir con el OID de la ruta
>SELECT pg_relation_filenode('gps_datos'),pg_relation_filepath('gps_datos');
>--3) Buscar esa ruta en el directorio data de la carpeta donde se encuentra postgresql
>--4) Abrir el archivo donde se encuentra la tabla con un editor hexadecimal (pueden usar el de su preferencia)
>--5) Instalar la extensión
pageinspect
>CREATE EXTENSION pageinspect;
>--6) Usar las funciones heap_page_items y get_raw_page para obtener información de los registros en la tabla.
>---- Los registros a recuperar contienen un valor diferente a 0 en la columna t_xmax (transacción que eliminó el registro)
>select * from heap_page_items(get_raw_page('gps_datos',0));
>--7) Usando el editor hexadecimal, ir a la posicion que esta en la columna lp_off del registro a recuperar
>--7.1)
Los primeros 4 bytes son el t_xmin, los siguientes 4 bytes son t_xmax,
se debe cambiar el valor de cada uno de estos 4 bytes (t_xmax) a
cero(00). Ambos se leen de derecha a izquierda.
>--7.2) Es necesario
resetear los bits XMAX_COMMITTED, para ello se toma el valor de la
columna t_infomask, obtenida del query en el punto 6, para el registro a
recuperar(en mi caso 1282)
>-----  y se convierte el valor de esa
columna a hexadecimal (0502 en mi caso), luego cuenta 13 bytes hacia
adelante para llegar al infomask, el cual permite visualizar el
registro (posiciones:
http://www.postgresql.org/docs/9.0/interactive/storage-page-layout.html)
>----- 
por ultimo, se le resta 0x0400(XMAX_COMMITTED) al valor hexa (0502 en
mi caso) y el resultado (0102 en mi caso), se coloca reemplazando el
valor del infomask actual (se escribe de derecha a izquierda, 02 01 en
mi caso).
>
>
>Estos pasos se deben hacer para cada registro a recuperar.
>
>
>
>>________________________________
>> De: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
>>Para: SQL Ayuda Postgre <pgsql-es-ayuda(at)postgresql(dot)org>
>>CC: Herrera Alvaro <alvherre(at)alvh(dot)no-ip(dot)org>; Casanova Jaime <jaime(at)2ndquadrant(dot)com>
>>Enviado: Jueves 5 de abril de 2012 21:56
>>Asunto: [pgsql-es-ayuda] Recuperar borrado físico de registro.
>>
>>
>>Hola,
>>
>>
>>Alguno sabe como recuperar (sin backups, sin pg_audit, sin borrado logico), un registro de una tabla de la BD. He estado investigando y al parecer todo apunta a HeapTupleSatisfiesVisibility(), que debe estar en true para ver los registros borrados de todas las tablas, que no se le han hecho vacuum. El lio radica, en que no se puede volver a compilar postgresql para hacer esta maniobra.
>>
>>
>>
>>Gracias
>>
>>
>>
>
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message raul andrez gutierrez alejo 2012-05-30 16:15:54 instalar servicio de postgres en windows
Previous Message Alejandro Carrillo 2012-05-29 22:50:46 Re: [pgsql-es-ayuda] Recuperar borrado físico de registro.