From: | "MauMau" <maumau307(at)gmail(dot)com> |
---|---|
To: | <pgsql-hackers(at)postgresql(dot)org> |
Subject: | [bug fix] PostgreSQL fails to start on Windows if it crashes after tablespace creation |
Date: | 2013-10-31 12:40:07 |
Message-ID: | 0CAA393E7F0B4FF88848B6C96B89468E@maumau |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
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
Attachment | Content-Type | Size |
---|---|---|
remove_tblspc_symlink.patch | application/octet-stream | 1.6 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Kevin Grittner | 2013-10-31 12:42:01 | Re: Creating partial index on a relation |
Previous Message | Robert Haas | 2013-10-31 12:22:14 | Re: How can I build OSSP UUID support on Windows to avoid duplicate UUIDs? |