From: | Bruce Momjian <bruce(at)momjian(dot)us> |
---|---|
To: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
Cc: | arnaud(dot)listes(at)codata(dot)eu, PG-General Mailing List <pgsql-general(at)postgresql(dot)org>, PostgreSQL-documentation <pgsql-docs(at)postgresql(dot)org> |
Subject: | Re: [GENERAL] pg_upgrade --link on Windows |
Date: | 2017-06-13 20:07:48 |
Message-ID: | 20170613200748.GB13879@momjian.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs pgsql-general |
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(at)momjian(dot)us> 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 +
Attachment | Content-Type | Size |
---|---|---|
junction.diff | text/x-diff | 768 bytes |
From | Date | Subject | |
---|---|---|---|
Next Message | Klaus P. Pieper | 2017-06-14 07:59:04 | Re: pg_upgrade --link on Windows |
Previous Message | p.becker | 2017-06-12 22:19:10 | Maximum length for levenshtein algorithm |
From | Date | Subject | |
---|---|---|---|
Next Message | kbrannen | 2017-06-13 22:24:44 | Re: pg_catalog tables don't have constraints? |
Previous Message | Andreas Kretschmer | 2017-06-13 18:54:18 | Re: autovacuum holds exclusive lock on table preventing it from to be updated |