Martijn van Oosterhout wrote:
On Fri, Jul 14, 2006 at 05:36:58PM +0200, Florian G. Pflug wrote:
That was the idea - providing pg_rotate_wal(), which would guarantee that
the wal is rotatted at least once if called. Thinking further about this,
for a first prove of concept, I'd be enough to write a C function
pg_current_walsegment(). pg_rotate_wal() could then be a plpgsql function,
that e.g. creates a temporary table, and fills it with data, until the
return value of pg_current_walsegment() changes.

Temporary tables don't get xlogged. It would probably be easier to hook
into the xlog machinery and create NOP records, like you originally
suggested.

From further sourcecode reading, I got the following implementation plan
.) Add new entry to RmgrTable (Should I add it at the end, or use one of the 
"reserved" entries?)
.) Create nop_redo and nop_desc - for nop_redo an empty function should be 
sufficient
.) Create pg_rotate_wal, which calls
   XLogInsert(RM_NOP_ID, XLOG_NO_TRAN, rdata)
   with
     rdata.data = "pointer to WAL_SEGMENT_SIZE zero bytes"
     rdata.len = WAL_SEGMENT_SIZE
     rdata.buffer = InvalidBuffer
     rdata.next = NULL

Since I insert WAL_SIZE bytes, I shouldn't even have to loop, because that 
records
has no chance to fit into the current wal segment, right?

Am I overlooking something?

greetings, Florian Pflug


---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend

Reply via email to