Ah. Sorry, I missed that part. As NTFS junctions and symbolic links are different (although they behave similarly), there seems only a minor inconvenience related to misleading error message i.e.
+ #ifdef WIN32 + if (rmdir(linkloc) < 0 && errno != ENOENT) + #else if (unlink(linkloc) < 0 && errno != ENOENT) + #endif ereport(ERROR, (errcode_for_file_access(), errmsg("could not remove symbolic link \"%s\": %m",
What is your opinion about it, Is it not worth changing ? . Thanks.
followed destroy_tablespace_directories() function, Is there any specific reason not to use same logic to detect type of the file/link i.e. “(lstat(linkloc, &st) == 0 && S_ISDIR(st.st_mode))”, It also seems have more appropriate error message i.e.
Thanks for reviewing and testing the patch. Yes, at first I did what you mentioned, but modified the patch according to some advice in the mail thread. During redo, create_tablespace_directories() needs to handle the case where the $PGDATA/pg_tblspc/xxx is not a symlink but a directory even on UNIX/Linux. Please see TablespaceCreateDbspace is(). destroy_tablespace_directories() doesn't have to handle such situation.