Обсуждение: Finding time in WAL logs

Поиск
Список
Период
Сортировка

Finding time in WAL logs

От
Pascal Robert
Дата:
Hi,

I'm writing our backup procedure for using WAL and PITR, but to be
able to do a (mostly) perfect PITR, I need to find the time when a
error (DELETE FROM, DROP TABLE, etc.) was made so that I can do a
restore just before the error.

Does PostgreSQL has something similar to "mysqlbinlog" so that I can
look at the content of a WAL archive ?  I tried enabling
"log_min_messages" at "info" level, but it doesn't log the date and
time of a executed statement, so that's not a solution.

pgsql 8.2.4 on RedHat Linux ES 4

Re: Finding time in WAL logs

От
"Simon Riggs"
Дата:
On Wed, 2007-04-25 at 11:28 -0400, Pascal Robert wrote:

> I'm writing our backup procedure for using WAL and PITR, but to be
> able to do a (mostly) perfect PITR, I need to find the time when a
> error (DELETE FROM, DROP TABLE, etc.) was made so that I can do a
> restore just before the error.
>
> Does PostgreSQL has something similar to "mysqlbinlog" so that I can
> look at the content of a WAL archive ?  I tried enabling
> "log_min_messages" at "info" level, but it doesn't log the date and
> time of a executed statement, so that's not a solution.

http://pgfoundry.org/projects/xlogviewer/

I'd appreciate some feedback. I'll be looking to release a new version
within next few months.

--
  Simon Riggs
  EnterpriseDB   http://www.enterprisedb.com



Re: Finding time in WAL logs

От
Pascal Robert
Дата:
Le 07-04-25 à 11:43, Simon Riggs a écrit :

> On Wed, 2007-04-25 at 11:28 -0400, Pascal Robert wrote:
>
>> I'm writing our backup procedure for using WAL and PITR, but to be
>> able to do a (mostly) perfect PITR, I need to find the time when a
>> error (DELETE FROM, DROP TABLE, etc.) was made so that I can do a
>> restore just before the error.
>>
>> Does PostgreSQL has something similar to "mysqlbinlog" so that I can
>> look at the content of a WAL archive ?  I tried enabling
>> "log_min_messages" at "info" level, but it doesn't log the date and
>> time of a executed statement, so that's not a solution.
>
> http://pgfoundry.org/projects/xlogviewer/
>
> I'd appreciate some feedback. I'll be looking to release a new version
> within next few months.

When I look at a log with xlogdump -s /tmp/NAMEOFWAL, I always get
this at the end :

    Unable to read continuation page?

BTW, the statements look like this :

    0/15FFE470: prv 0/15FFE440; xid 2332; HEAP  info 10 len 18 tot_len 46
    DELETE FROM 16612 WHERE ...delete: ts 1663 db 16384 rel 16612 block
1413 off 5

(this is for a DELETE FROM table without any WHERE clause).  I see
the XID, but can you also display date and time in the ouput ?

Re: Finding time in WAL logs

От
"Simon Riggs"
Дата:
On Wed, 2007-04-25 at 13:13 -0400, Pascal Robert wrote:
> Le 07-04-25 à 11:43, Simon Riggs a écrit :
>
> > On Wed, 2007-04-25 at 11:28 -0400, Pascal Robert wrote:
> >
> >> I'm writing our backup procedure for using WAL and PITR, but to be
> >> able to do a (mostly) perfect PITR, I need to find the time when a
> >> error (DELETE FROM, DROP TABLE, etc.) was made so that I can do a
> >> restore just before the error.
> >>
> >> Does PostgreSQL has something similar to "mysqlbinlog" so that I can
> >> look at the content of a WAL archive ?  I tried enabling
> >> "log_min_messages" at "info" level, but it doesn't log the date and
> >> time of a executed statement, so that's not a solution.
> >
> > http://pgfoundry.org/projects/xlogviewer/
> >
> > I'd appreciate some feedback. I'll be looking to release a new version
> > within next few months.
>
> When I look at a log with xlogdump -s /tmp/NAMEOFWAL, I always get
> this at the end :
>
>     Unable to read continuation page?

It's not that smart about where it stops.

> BTW, the statements look like this :
>
>     0/15FFE470: prv 0/15FFE440; xid 2332; HEAP  info 10 len 18 tot_len 46
>     DELETE FROM 16612 WHERE ...delete: ts 1663 db 16384 rel 16612 block
> 1413 off 5
>
> (this is for a DELETE FROM table without any WHERE clause).  I see
> the XID, but can you also display date and time in the ouput ?

Original date/time is available only on COMMIT/ABORT records, so you'll
need to search ahead/behind.

--
  Simon Riggs
  EnterpriseDB   http://www.enterprisedb.com



Re: Finding time in WAL logs

От
Pascal Robert
Дата:
>> BTW, the statements look like this :
>>
>>     0/15FFE470: prv 0/15FFE440; xid 2332; HEAP  info 10 len 18
>> tot_len 46
>>     DELETE FROM 16612 WHERE ...delete: ts 1663 db 16384 rel 16612 block
>> 1413 off 5
>>
>> (this is for a DELETE FROM table without any WHERE clause).  I see
>> the XID, but can you also display date and time in the ouput ?
>
> Original date/time is available only on COMMIT/ABORT records, so
> you'll
> need to search ahead/behind.

Ok, so I guess that auto commited statements will never have date/time ?

Re: Finding time in WAL logs

От
Pascal Robert
Дата:
Le 07-04-25 à 14:49, Pascal Robert a écrit :

>>> BTW, the statements look like this :
>>>
>>>     0/15FFE470: prv 0/15FFE440; xid 2332; HEAP  info 10 len 18
>>> tot_len 46
>>>     DELETE FROM 16612 WHERE ...delete: ts 1663 db 16384 rel 16612 block
>>> 1413 off 5
>>>
>>> (this is for a DELETE FROM table without any WHERE clause).  I see
>>> the XID, but can you also display date and time in the ouput ?
>>
>> Original date/time is available only on COMMIT/ABORT records, so
>> you'll
>> need to search ahead/behind.
>
> Ok, so I guess that auto commited statements will never have date/
> time ?

Ok, I didn't see the commit line after the INSERT.

How can I use the -r option ?  From my understanding, I can use it to
find specific DML, but I tried :

    -r "INSERT"
    -r INSERT
    -r insert

without any success, even if I know that I have INSERT in the log.

Re: Finding time in WAL logs

От
"Simon Riggs"
Дата:
On Wed, 2007-04-25 at 14:49 -0400, Pascal Robert wrote:
> >> BTW, the statements look like this :
> >>
> >>     0/15FFE470: prv 0/15FFE440; xid 2332; HEAP  info 10 len 18
> >> tot_len 46
> >>     DELETE FROM 16612 WHERE ...delete: ts 1663 db 16384 rel 16612 block
> >> 1413 off 5
> >>
> >> (this is for a DELETE FROM table without any WHERE clause).  I see
> >> the XID, but can you also display date and time in the ouput ?
> >
> > Original date/time is available only on COMMIT/ABORT records, so
> > you'll
> > need to search ahead/behind.
>
> Ok, so I guess that auto commited statements will never have date/time ?

There'll be a COMMIT record for every transaction, however it was
initiated, unless the server crashed/shutdown before it could be issued.

--
  Simon Riggs
  EnterpriseDB   http://www.enterprisedb.com



Re: Finding time in WAL logs

От
Robert Treat
Дата:
On Wednesday 25 April 2007 11:28, Pascal Robert wrote:
> Hi,
>
> I'm writing our backup procedure for using WAL and PITR, but to be
> able to do a (mostly) perfect PITR, I need to find the time when a
> error (DELETE FROM, DROP TABLE, etc.) was made so that I can do a
> restore just before the error.
>
> Does PostgreSQL has something similar to "mysqlbinlog" so that I can
> look at the content of a WAL archive ?  I tried enabling
> "log_min_messages" at "info" level, but it doesn't log the date and
> time of a executed statement, so that's not a solution.
>

Look at the log_line_prefix option in the docs...
http://www.postgresql.org/docs/8.2/interactive/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHAT

--
Robert Treat
Build A Brighter LAMP :: Linux Apache {middleware} PostgreSQL

Re: Finding time in WAL logs

От
Jim Nasby
Дата:
On Apr 25, 2007, at 7:01 PM, Simon Riggs wrote:
>> (this is for a DELETE FROM table without any WHERE clause).  I see
>> the XID, but can you also display date and time in the ouput ?
>
> Original date/time is available only on COMMIT/ABORT records, so
> you'll
> need to search ahead/behind.

Additionally, you can specify an XID when doing a point-in-time
restore; you don't need to find an exact time to restore to.
--
Jim Nasby                                            jim@nasby.net
EnterpriseDB      http://enterprisedb.com      512.569.9461 (cell)