>>> Based on the discussion and suggestions in this mail chain, following 
>>> features can be implemented:
>>>
>>> 1. To compute the value of max LSN in data pages based on user input 
>>> whether he wants it for an individual

>>>   file,  a particular directory or whole database.
>>
>>> 2a. To search the available WAL files for the latest checkpoint record and 
>>> prints the value.
>>> 2b. To search the available WAL files for the latest checkpoint record and 
>>> recreates a pg_control file pointing at

>>> that checkpoint.

>>> I have kept both options to address different kind of corruption scenarios.

>> I think I can see all of those things being potentially useful.  There
>> are a couple of pending patches that will revise the WAL format
>>  slightly; not sure how much those are likely to interfere with any
>> development you might do on (2) in the meantime.

> Based on above conclusion, I have prepared a patch which implements Option-1



This mail contains doc patch Option-1 and test cases.


Below are test scenarios corresponding to which testcases are in 
Test_find_max_lsn_from_datafiles



Scenario-1:
Validation of the maximum LSN number &  in data base directory
Steps:
1. Start the server, create table, insert some records into the table.
2. Shutdown the server in normal mode.
3. ./pg_resetxlog -P data to find the maximum LSN number and validate with the 
current pg_xlog directory and in pg_control file
Expected behavior:
Displayed maximum LSN number should to same as in pg_control file &
WAL segment number displayed (fileid, segnum) should be same current file in 
pg_xlog directory.

Scenario-2:
Validation of the maximum LSN number &  in specific directory
Steps:
1. Start the server, create table, insert some records into the table.
2. Shutdown the server in normal mode.
3. ./pg_resetxlog -p base/1/12557/ data
Expected behavior:
Displayed maximum LSN number should to same as in pg_control file &
WAL segment number displayed (fileid, segnum) should be same current file in 
pg_xlog directory.

Scenario-3:
Validation of the maximum LSN number &  in specific file
Steps:
1. Start the server, create table, insert some records into the table.
2. Shutdown the server in normal mode.
3. ./pg_resetxlog -p base/1/12557/16384 data
Expected behavior:
Displayed maximum LSN number should to same as in pg_control file &
WAL segment number displayed (fileid, segnum) should be same current file in 
pg_xlog directory.



With Regards,

Amit Kapila.



diff --git a/doc/src/sgml/ref/pg_resetxlog.sgml 
b/doc/src/sgml/ref/pg_resetxlog.sgml
index 27b9ab41..b5c6b3c 100644
--- a/doc/src/sgml/ref/pg_resetxlog.sgml
+++ b/doc/src/sgml/ref/pg_resetxlog.sgml
@@ -30,6 +30,8 @@ PostgreSQL documentation
    <arg choice="opt"><option>-m</option> <replaceable 
class="parameter">mxid</replaceable></arg>
    <arg choice="opt"><option>-O</option> <replaceable 
class="parameter">mxoff</replaceable></arg>
    <arg choice="opt"><option>-l</option> <replaceable 
class="parameter">timelineid</replaceable>,<replaceable 
class="parameter">fileid</replaceable>,<replaceable 
class="parameter">seg</replaceable></arg>
+   <arg choice="opt"><option>-P</option></arg>
+   <arg choice="opt"><option>-p</option> <replaceable 
class="parameter">file-name</replaceable> | <replaceable 
class="parameter">folder-name</replaceable></arg>
    <arg choice="plain"><replaceable>datadir</replaceable></arg>
   </cmdsynopsis>
  </refsynopsisdiv>
@@ -78,7 +80,7 @@ PostgreSQL documentation
 
   <para>
    The <option>-o</>, <option>-x</>, <option>-e</>,
-   <option>-m</>, <option>-O</>,
+   <option>-m</>, <option>-O</>, <option>-P</>, <option>-p</>, 
    and <option>-l</>
    options allow the next OID, next transaction ID, next transaction ID's
    epoch, next multitransaction ID, next multitransaction offset, and WAL
@@ -135,6 +137,16 @@ PostgreSQL documentation
       largest entry in <filename>pg_xlog</>, use <literal>-l 
00000001000000320000004B</> or higher.
      </para>
 
+     <para>
+      If <command>pg_resetxlog</command> complains that it cannot determine
+      valid data for <filename>pg_control</>, and if you do not have or 
corrupted
+      WAL segment files in the directory <filename>pg_xlog</> under the data 
directory,
+      then to identify larger WAL segment file from data files we can use the 
<option>-P</>
+      for finding maximum LSN from the data directory or for from specific
+      file or folder <option>-p <filename>file-name | folder-name</></>. Once 
larger WAL segment
+      file is found use <option>-l</> option for setting the value.
+     </para>
+
      <note>
       <para>
        <command>pg_resetxlog</command> itself looks at the files in
@@ -145,6 +157,11 @@ PostgreSQL documentation
        entries in an offline archive; or if the contents of
        <filename>pg_xlog</> have been lost entirely.
       </para>
+
+      <para>
+       <option>-p <filename>file-name | folder-name</></> file-name or 
floder-name 
+       should be absolute path, or relative from data directory.
+      </para>
      </note>
     </listitem>
 
-- Test case 1
drop table if exists tbl;

create table tbl(f1 int, f2 varchar(10), f3 float, f4 char(200));

insert into tbl values(1,'postgres',2.1,'test');
insert into tbl values(3,'bangalore',4.1,'test');
insert into tbl values(2,'kiran',3.1,'test');
insert into tbl values(4,'india',5.1,'test');
checkpoint;

-- stop the server

-- run the following command
pg_resetxlog -P data

-- Validate the LSN number and WAL fileid, segid currently running in pg_xlog 
folder.

-- start the server and execute the following

drop table tbl;



-- Test case 2
drop table if exists tbl;

create table tbl(f1 int, f2 varchar(10), f3 float, f4 char(200));

insert into tbl values(1,'postgres',2.1,'test');
insert into tbl values(3,'bangalore',4.1,'test');
insert into tbl values(2,'kiran',3.1,'test');
insert into tbl values(4,'india',5.1,'test');
checkpoint;

-- stop the server

-- run the following command
pg_resetxlog -p base/12557 data

-- Validate the LSN number and WAL fileid, segid currently running in pg_xlog 
folder.

-- start the server and execute the following

drop table tbl;

-- Test case 3
drop table if exists tbl;

create table tbl(f1 int, f2 varchar(10), f3 float, f4 char(200));

insert into tbl values(1,'postgres',2.1,'test');
insert into tbl values(3,'bangalore',4.1,'test');
insert into tbl values(2,'kiran',3.1,'test');
insert into tbl values(4,'india',5.1,'test');

--Find the relfile node
select relfilenode from pg_class where relname='tbl';

checkpoint;

-- stop the server

-- run the following command with displayed refilenode 
pg_resetxlog -p base/12557/16384 data

-- Validate the LSN number and WAL fileid, segid currently running in pg_xlog 
folder.

-- start the server and execute the following

drop table tbl;
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to