Обсуждение: Re: PITR on Win32 - Archive and Restore

Поиск
Список
Период
Сортировка

Re: PITR on Win32 - Archive and Restore

От
Bruce Momjian
Дата:
OK, I have a solution.  It turns out that COPY and COPY.EXE behave
differently.  :-O

    # cat x.c
    #include <stdio.h>

    main()
    {
            system("copy.exe \"c:/msys/1.0/home/bruce momjian/a b\"
    \"c:/msys/1.0/home/bruce momjian/c d\"");
    }
    # gcc -o x x.c
    # ./x
    The system cannot find the file specified.

I just changed copy to copy.exe, and bingo, failure.

I suggest we back out the backslash patch and provide a Win32 sample
archive line in postgresql.conf that quotes both args, and that we add
quotes to the Unix example too.

---------------------------------------------------------------------------

markir@coretech.co.nz wrote:
> Funny thing is, now that the "%p" is silently using '\', the "target" path can
> use '/':
>
> e.g :
>
> archive_command = 'copy "%p" "c:/databases/pgarchive/%f"'
>
> *now* works fine. The next interesting question will be "can I use '/' in the
> restore_command too?". I will have a muddle around with it.
>
> regards
>
> Mark
>
> Quoting markir@coretech.co.nz:
>
> > I agree, the approach seems quite nice.
> >
> > I gave the lastest cvs a go  - which is probably cvs as of about 2 hours ago,
> > as
> > a mingw build takes 55 minutes on this machine (compare to 6 minutes when
> > booted into Freebsd... ah well..)
> >
> >
> > Initially tried :
> >
> > archive_command = 'copy "%p" "c:\databases\pgarchive\%f"'
> >
> > But saw errors in the log about "c:databasespgarchive00000..."
> >
> > Looks like '\' needs to be escaped, confirmed this with :
> >
> >
> > archive_command = 'copy "%p" "c:\\databases\\pgarchive\\%f"'
> >
> > Which worked fine. However, it would be nice if the '\' inside the '"' were
> > 'auto-escaped' somehow, as I suspect Mr 'used-windows-all-my-life' will find
> > the current behaviour counter-intuitive.
> >
> > Otherwise looks good
> >
> > Mark
> >
> >
> >
> > Quoting Andrew Dunstan <andrew@dunslane.net>:
> >
> > > Tom Lane said:
> > > > Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > > >> I have gotten confused by this.  Does COPY work with quoted paths only
> > > >> if we use forward slashes, or was this fix just for the slash issue
> > > >> and not spaces?
> > > >
> > > > This only fixes the slash issue.  If your database path includes spaces
> > > > you'll still need to put quotes in the archive_command, but it
> > > > shouldn't be any worse than
> > > >     archive_command = 'copy "%p" "c:\someplace\%f"'
> > > >
> > > > I'd appreciate confirmation though from some win32 users that the above
> > > > indeed works.
> > > >
> > >
> > > That's what my experimentation showed, although I worked with a tiny test.c
> > > file rather than the archive command. I think this is the right solution -
> > > the user should put the quotes in, not postgres.
> > >
> > > cheers
> > >
> > > andrew
> > >
> > >
> > >
> > >
> > > ---------------------------(end of broadcast)---------------------------
> > > TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
> > >
> >
> >
> >
> >
>
>
>
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: PITR on Win32 - Archive and Restore

От
"Andrew Dunstan"
Дата:
Bruce Momjian said:
>
> OK, I have a solution.  It turns out that COPY and COPY.EXE behave
> differently.  :-O
>
>     # cat x.c
>     #include <stdio.h>
>
>     main()
>     {
>             system("copy.exe \"c:/msys/1.0/home/bruce momjian/a b\"
>     \"c:/msys/1.0/home/bruce momjian/c d\"");
>     }
>     # gcc -o x x.c
>     # ./x
>     The system cannot find the file specified.
>
> I just changed copy to copy.exe, and bingo, failure.
>
> I suggest we back out the backslash patch and provide a Win32 sample
> archive line in postgresql.conf that quotes both args, and that we add
> quotes to the Unix example too.

There is no copy.exe - it's a command builtin to cmd.exe, at least on my
system.
Before jumping to a conclusion that we have an answer we need to make sure
it works portably across all the Windows versions we are working with.

My testing and Mark's experience suggest that the source path needs to be
backslashed but the destination path maybe doesn't - which would actually
work quite well for us *with* the backslash patch.

cheers

andrew





Re: PITR on Win32 - Archive and Restore

От
markir@coretech.co.nz
Дата:
That problem is because there is no copy.exe, it's part of cmd. I am afraid I
introduced that confusion while trying out all sorts of things in
archive_command....

I suspect that your example may be working because of your current directory is
where your test files happen to be (the business of quoted forward slash paths
working *if* they point to your current working directory is very odd).

Consistency is generally lacking commands as well - e.g:

C:\Databases>cd "c:/program files"
The system cannot find the path specified.

C:\Databases>dir "c:/program files"
 Volume in drive C has no label.
 Volume Serial Number is F444-3F9F

 Directory of c:\program files

11/08/2004  15:02       <DIR>          .
11/08/2004  15:02       <DIR>          ..
24/08/2003  03:13       <DIR>          Accessories
23/08/2003  18:20       <DIR>          ATI Technologies
08/09/2003  17:22       <DIR>          CheckPoint
07/08/2004  14:18       <DIR>          Common Files


Mark
Quoting Bruce Momjian <pgman@candle.pha.pa.us>:

>
> OK, I have a solution.  It turns out that COPY and COPY.EXE behave
> differently.  :-O
>
>     # cat x.c
>     #include <stdio.h>
>
>     main()
>     {
>             system("copy.exe \"c:/msys/1.0/home/bruce momjian/a b\"
>     \"c:/msys/1.0/home/bruce momjian/c d\"");
>     }
>     # gcc -o x x.c
>     # ./x
>     The system cannot find the file specified.
>
> I just changed copy to copy.exe, and bingo, failure.
>
> I suggest we back out the backslash patch and provide a Win32 sample
> archive line in postgresql.conf that quotes both args, and that we add
> quotes to the Unix example too.
>
> ---------------------------------------------------------------------------
>
> markir@coretech.co.nz wrote:
> > Funny thing is, now that the "%p" is silently using '\', the "target" path
> can
> > use '/':
> >
> > e.g :
> >
> > archive_command = 'copy "%p" "c:/databases/pgarchive/%f"'
> >
> > *now* works fine. The next interesting question will be "can I use '/' in
> the
> > restore_command too?". I will have a muddle around with it.
> >
> > regards
> >
> > Mark
> >
> > Quoting markir@coretech.co.nz:
> >
> > > I agree, the approach seems quite nice.
> > >
> > > I gave the lastest cvs a go  - which is probably cvs as of about 2 hours
> ago,
> > > as
> > > a mingw build takes 55 minutes on this machine (compare to 6 minutes when
> > > booted into Freebsd... ah well..)
> > >
> > >
> > > Initially tried :
> > >
> > > archive_command = 'copy "%p" "c:\databases\pgarchive\%f"'
> > >
> > > But saw errors in the log about "c:databasespgarchive00000..."
> > >
> > > Looks like '\' needs to be escaped, confirmed this with :
> > >
> > >
> > > archive_command = 'copy "%p" "c:\\databases\\pgarchive\\%f"'
> > >
> > > Which worked fine. However, it would be nice if the '\' inside the '"'
> were
> > > 'auto-escaped' somehow, as I suspect Mr 'used-windows-all-my-life' will
> find
> > > the current behaviour counter-intuitive.
> > >
> > > Otherwise looks good
> > >
> > > Mark
> > >
> > >
> > >
> > > Quoting Andrew Dunstan <andrew@dunslane.net>:
> > >
> > > > Tom Lane said:
> > > > > Bruce Momjian <pgman@candle.pha.pa.us> writes:
> > > > >> I have gotten confused by this.  Does COPY work with quoted paths
> only
> > > > >> if we use forward slashes, or was this fix just for the slash issue
> > > > >> and not spaces?
> > > > >
> > > > > This only fixes the slash issue.  If your database path includes
> spaces
> > > > > you'll still need to put quotes in the archive_command, but it
> > > > > shouldn't be any worse than
> > > > >     archive_command = 'copy "%p" "c:\someplace\%f"'
> > > > >
> > > > > I'd appreciate confirmation though from some win32 users that the
> above
> > > > > indeed works.
> > > > >
> > > >
> > > > That's what my experimentation showed, although I worked with a tiny
> test.c
> > > > file rather than the archive command. I think this is the right
> solution -
> > > > the user should put the quotes in, not postgres.
> > > >
> > > > cheers
> > > >
> > > > andrew
> > > >
> > > >
> > > >
> > > >
> > > > ---------------------------(end of
> broadcast)---------------------------
> > > > TIP 1: subscribe and unsubscribe commands go to
> majordomo@postgresql.org
> > > >
> > >
> > >
> > >
> > >
> >
> >
> >
> >
>
> --
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 359-1001
>   +  If your life is a hard drive,     |  13 Roberts Road
>   +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
>