Dear hackers, This is my first try to post on that list to propose a workaround on an issue I noticed while using pg_waldump. Each time an object is referenced by "oids" following output template : tablespace oid/database oid/relfilenodeid
That template seems to be used for each operation but the *copy dir* operation. The latter is performed (at least) when CREATE DATABASE statement is called with the template: oid/tablespace oid Exemple on CREATE DATABASE (without defining a template database) : rmgr: Database len (rec/tot): 42/ 42, tx: 568, lsn: 0/01865790, prev 0/01865720, desc: CREATE copy dir 1/1663 to 16384/1663 It comes out (to me) it may be more consistent to use the same template than the other operations in pg_waldump. I propose to swap the parameters positions for the copy dir operation output. You'll find a patch file included which does the switching job : rmgr: Database len (rec/tot): 42/ 42, tx: 568, lsn: 0/01865790, prev 0/01865720, desc: CREATE copy dir 1663/1 to 1663/16384 - Project name ; PostgreSQL - File : copy_dir_message_switch_parameters_v0.patch - Description : Swaps copy dir output parameters - This patch is not WIP (but may be discussed) - Patch applied against master branch - Compiles and tests successfully - No platform specific code - No need of regression test - Not a new feature - No performance impact Any comment or advice are more than welcome. If I didn't do the things the right way, I would appreciate some help from a kind mentor. I'll put the patch for the next commitfest. Thank you, -- Jean-Christophe Arnu
diff --git a/src/backend/access/rmgrdesc/dbasedesc.c b/src/backend/access/rmgrdesc/dbasedesc.c index 39e26d7ed4..7ee120f1d9 100644 --- a/src/backend/access/rmgrdesc/dbasedesc.c +++ b/src/backend/access/rmgrdesc/dbasedesc.c @@ -29,15 +29,15 @@ dbase_desc(StringInfo buf, XLogReaderState *record) xl_dbase_create_rec *xlrec = (xl_dbase_create_rec *) rec; appendStringInfo(buf, "copy dir %u/%u to %u/%u", - xlrec->src_db_id, xlrec->src_tablespace_id, - xlrec->db_id, xlrec->tablespace_id); + xlrec->src_tablespace_id, xlrec->src_db_id, + xlrec->tablespace_id, xlrec->db_id); } else if (info == XLOG_DBASE_DROP) { xl_dbase_drop_rec *xlrec = (xl_dbase_drop_rec *) rec; appendStringInfo(buf, "dir %u/%u", - xlrec->db_id, xlrec->tablespace_id); + xlrec->tablespace_id, xlrec->db_id); } }