On 10/31/2013 08:40 AM, MauMau wrote: > Hello, > > I've found and fixed a bug that causes recovery (crash recovery, PITR) > to fail. Please find attached the patch against HEAD. > > > [Bug] > To reproduce the problem, do the following on Windows: > > 1. pg_ctl start > 2. CREATE TABLESPACE tbs LOCATION 'some_tblspc_path'; > 3. pg_ctl stop -mi > 4. pg_ctl start > > The database server fails to start, leaving the below messages: > > LOG: database system was interrupted; last known up at 2013-10-31 > 20:24:07 JST > LOG: database system was not properly shut down; automatic recovery in > progress > LOG: redo starts at 0/1788938 > FATAL: could not remove symbolic link "pg_tblspc/16385": Permission > denied > CONTEXT: xlog redo create tablespace: 16385 "d:/tbs" > LOG: startup process (PID 2724) exited with exit code 1 > LOG: aborting startup due to startup process failure > > > [Cause] > In redo, create_tablespace_directories() tries to remove the symbolic > link for the tablespace using unlink(). However, unlink() on Windows > fails with errno=13 (Permission denied). This is because junction > points are directories on Windows. > > > [Fix] > Follow destroy_tablespace_directories() and use rmdir() to remove the > junction point. > > > I've tested the patch. Could you review it and commit? I wish it to be > backported to all major releases. > > > Regards > MauMau >
Why are you making this a runtime check instead of a compile time check? cheers andrew -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers