Re: Upgrading 9.0 to 9.3 - permission denied to pg_upgrade_utility.log - Mailing list pgsql-general

From Russell Keane
Subject Re: Upgrading 9.0 to 9.3 - permission denied to pg_upgrade_utility.log
Date
Msg-id 8D0E5D045E36124A8F1DDDB463D548557D3C2F2155@mxsvr1.is.inps.co.uk
Whole thread Raw
In response to Re: Upgrading 9.0 to 9.3 - permission denied to pg_upgrade_utility.log  (Bruce Momjian <bruce@momjian.us>)
Responses Re: Upgrading 9.0 to 9.3 - permission denied to pg_upgrade_utility.log  (Bruce Momjian <bruce@momjian.us>)
List pgsql-general

-----Original Message-----
From: Bruce Momjian [mailto:bruce@momjian.us] 
Sent: 07 August 2014 17:43
To: Russell Keane
Cc: pgsql-general@postgresql.org
Subject: Re: [GENERAL] Upgrading 9.0 to 9.3 - permission denied to pg_upgrade_utility.log

On Thu, Aug  7, 2014 at 09:42:13AM +0100, Russell Keane wrote:
> Hi,
> 
>  
> 
> We’re trying to upgrade a 9.0 database to 9.3 using pg_upgrade. The 
> upgrade must be automated so a manual pg_dump / pg_restore is not an option.
> 
> We use the following command:
> 
> D:\PostgreSQL\9.3\Data>"c:\Program Files (x86)\PostgreSQL\9.3\bin\ 
> pg_upgrade.exe" -d "D:\PostgreSQL\Data" -D "D:\PostgreSQL\9.3\Data" -b 
> "C:\ Program Files (x86)\PostgreSQL\9.0\bin" -B "C:\Program Files 
> (x86)\PostgreSQL\ 9.3\bin" -u postgres -c -P 5432
> 
>  
> 
> This is on a Windows 7 64 bit environment.
> 
> We’ve given the postgres windows user full permissions to all folders 
> involved and are running the upgrade in a cmd prompt opened with runas  
> /user:postgres
> 
>  
> 
> The upgrade works all the way up until the final hurdle where, in the 
> pg_upgrade_utility.log the following statement appears:
> 
> command: ""C:\Program Files (x86)\PostgreSQL\9.3\bin/initdb" 
> --sync-only "D:\ PostgreSQL\9.3\Data" >> "pg_upgrade_utility.log" 2>&1"
> 
> syncing data to disk ... initdb: could not open file 
> "D:/PostgreSQL/9.3/Data/
> pg_upgrade_utility.log": Permission denied

Uh, it would appear you are running pg_upgrade from _inside_ the 9.3 data directory.  That should work, but it would
probablybe better to run it in another directory where you also have write permission.  I think the problem is that
initdb--sync-only is syncing those files to disk as you are writing to the log file.
 

We have had Windows problems of two processes writing to the same file, but that is usually a different error message,
e.g.

     * For some reason, Windows issues a file-in-use error if we write data to
     * the log file from a non-primary thread just before we create a
     * subprocess that also writes to the same log file.  One fix is to sleep
     * for 100ms.  A cleaner fix is to write to the log file _after_ the
     * subprocess has completed, so we do this only when writing from a
     * non-primary thread.  fflush(), running system() twice, and pre-creating
     * the file do not see to help.

I think that returns a "share violation" error.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +


Excellent! That's fixed it for us.

Thanks Bruce,

pgsql-general by date:

Previous
From: Alexis Bernard
Date:
Subject: Re: Duplicated IDs
Next
From: Rémi Cura
Date:
Subject: Re: pg_advisory_lock problem