On Fri, Jun 9, 2017 at 07:55:55AM -0700, Adrian Klaver wrote: > On 06/09/2017 07:39 AM, Arnaud L. wrote: > >See this page for more details : > >http://cects.com/overview-to-understanding-hard-links-junction-points-and-symbolic-links-in-windows/ > > > > > >Under "Hard Link (Linking for individual files)" : > >"If the target is deleted, its content is still available through the hard > >link" > > > >Junction Point (Directory Hard Link): > >"If the target is moved, renamed or deleted, the Junction Point still > >exists, but points to a non-existing directory" > > > >BUT, when I try to "pg_upgrade --link --check" with old-data-dir and > >new-data-dir on different volumes, I get an error saying that both > >directories must be on the same volume if --link is used. > >So maybe pg_upgrade uses hard-links (i.e. to files), and only the > >documentation is wrong by calling them junctions (i.e. soft links to > >files) ? > > Looks that way. In file.c in ~/src/bin/pg_upgrade I see: > > #ifdef WIN32 > 300 /* implementation of pg_link_file() on Windows */ > 301 static int > 302 win32_pghardlink(const char *src, const char *dst) > 303 { > 304 /* > 305 * CreateHardLinkA returns zero for failure > 306 * http://msdn.microsoft.com/en-us/library/aa363860(VS.85).aspx > 307 */ > 308 if (CreateHardLinkA(dst, src, NULL) == 0) > 309 { > 310 _dosmaperr(GetLastError()); > 311 return -1; > 312 } > 313 else > 314 return 0; > 315 } > 316 #endif [docs list added] I apologize for not being smarter on this thread. When I helped with the Windows port, I was told Windows didn't have hard links for use by tablespace directories, so I got it into my head that Windows didn't have hard links. Therefore, when I was writing the docs, I called them junction points. Looking back to Postgres 9.0 where pg_upgrade was added to the tree, I see that the code even at that time used hard links on Windows. I have created the attached patch which I will apply to all current Postgres versions to fix this error. Thanks for the report and the research. :-) -- Bruce Momjian <bruce@xxxxxxxxxx> http://momjian.us EnterpriseDB http://enterprisedb.com + As you are, so once was I. As I am, so you will be. + + Ancient Roman grave inscription +
diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml new file mode 100644 index bf58a0a..4e27112 *** a/doc/src/sgml/ref/pgupgrade.sgml --- b/doc/src/sgml/ref/pgupgrade.sgml *************** *** 123,129 **** <term><option>-k</option></term> <term><option>--link</option></term> <listitem><para>use hard links instead of copying files to the new ! cluster (use junction points on Windows)</para></listitem> </varlistentry> <varlistentry> --- 123,129 ---- <term><option>-k</option></term> <term><option>--link</option></term> <listitem><para>use hard links instead of copying files to the new ! cluster</para></listitem> </varlistentry> <varlistentry>
-- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general