Thread: Postgres service not starting on windows after install if not installed into standard locations

Hi!

Had installed PostgreSQL 16.5 on Windows 10:

Install directory: "C:\PRGS\pgSQL\16"
DB-Directory:      "C:\DB\pgSQL\16\data"

Environment variable "PGDATA" is set to "C:\DB\pgSQL\16\data".

Initialized the database. Then started postgres services using:

c:\PRGS\pgSQL\16\bin\pg_ctl.exe start

Worked nice. Server starts, the serves as expected. But: if I try to 
start the service by "net start pgSQL" I am reported that "pg_ctl.exe" 
could not find "postgres.exe".

What I've tried:
- added environment variable "PGPATH" pointing to "C:\PRGS\pgSQL\16\bin"
   -> did not help.

- added "C:\PRGS\pgSQL\16\bin" to path. -> did not help either, even 
after rebooting. I've added it to system path.

Are paths somewhere within some configuration file or registry entry? 
And set to standard install locations?

Any idea is welcome to solve this problem!

-- 
Thomas

On 11/18/24 09:22, Thomas Schweikle wrote:
> Hi!
> 
> Had installed PostgreSQL 16.5 on Windows 10:

Using what installer?

> 
> Install directory: "C:\PRGS\pgSQL\16"
> DB-Directory:      "C:\DB\pgSQL\16\data"
> 
> Environment variable "PGDATA" is set to "C:\DB\pgSQL\16\data".
> 
> Initialized the database. Then started postgres services using:
> 
> c:\PRGS\pgSQL\16\bin\pg_ctl.exe start
> 
> Worked nice. Server starts, the serves as expected. But: if I try to
> start the service by "net start pgSQL" I am reported that "pg_ctl.exe"
> could not find "postgres.exe".
> 
> What I've tried:
> - added environment variable "PGPATH" pointing to "C:\PRGS\pgSQL\16\bin"
>     -> did not help.
> 
> - added "C:\PRGS\pgSQL\16\bin" to path. -> did not help either, even
> after rebooting. I've added it to system path.
> 
> Are paths somewhere within some configuration file or registry entry?
> And set to standard install locations?
> 
> Any idea is welcome to solve this problem!
> 

-- 
Adrian Klaver
adrian.klaver@aklaver.com




On Mon, 2024-11-18 at 17:22 +0000, Thomas Schweikle wrote:
> Had installed PostgreSQL 16.5 on Windows 10:
>
> Install directory: "C:\PRGS\pgSQL\16"
> DB-Directory:      "C:\DB\pgSQL\16\data"
>
> Environment variable "PGDATA" is set to "C:\DB\pgSQL\16\data".
>
> Initialized the database. Then started postgres services using:
>
> c:\PRGS\pgSQL\16\bin\pg_ctl.exe start
>
> Worked nice. Server starts, the serves as expected. But: if I try to
> start the service by "net start pgSQL" I am reported that "pg_ctl.exe"
> could not find "postgres.exe".
>
> What I've tried:
> - added environment variable "PGPATH" pointing to "C:\PRGS\pgSQL\16\bin"
>    -> did not help.
>
> - added "C:\PRGS\pgSQL\16\bin" to path. -> did not help either, even
> after rebooting. I've added it to system path.
>
> Are paths somewhere within some configuration file or registry entry?
> And set to standard install locations?

How exactly is the Windows service defined?
Perhaps you need to use an absolute path for the executable.

Yours,
Laurenz Albe



Am Mo., 18.Nov..2024 um 18:48:56 schrieb Adrian Klaver:
> On 11/18/24 09:22, Thomas Schweikle wrote:
>> Hi!
>>
>> Had installed PostgreSQL 16.5 on Windows 10:
> 
> Using what installer?

postgresql-16.5-1-windows-x64.exe as found on 
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads


>> Install directory: "C:\PRGS\pgSQL\16"
>> DB-Directory:      "C:\DB\pgSQL\16\data"
>>
>> Environment variable "PGDATA" is set to "C:\DB\pgSQL\16\data".
>>
>> Initialized the database. Then started postgres services using:
>>
>> c:\PRGS\pgSQL\16\bin\pg_ctl.exe start
>>
>> Worked nice. Server starts, the serves as expected. But: if I try to
>> start the service by "net start pgSQL" I am reported that "pg_ctl.exe"
>> could not find "postgres.exe".
>>
>> What I've tried:
>> - added environment variable "PGPATH" pointing to "C:\PRGS\pgSQL\16\bin"
>>     -> did not help.
>>
>> - added "C:\PRGS\pgSQL\16\bin" to path. -> did not help either, even
>> after rebooting. I've added it to system path.
>>
>> Are paths somewhere within some configuration file or registry entry?
>> And set to standard install locations?
>>
>> Any idea is welcome to solve this problem!



-- 
Thomas

Am Mo., 18.Nov..2024 um 19:43:36 schrieb Laurenz Albe:
> On Mon, 2024-11-18 at 17:22 +0000, Thomas Schweikle wrote:
>> Had installed PostgreSQL 16.5 on Windows 10:
>>
>> Install directory: "C:\PRGS\pgSQL\16"
>> DB-Directory:      "C:\DB\pgSQL\16\data"
>>
>> Environment variable "PGDATA" is set to "C:\DB\pgSQL\16\data".
>>
>> Initialized the database. Then started postgres services using:
>>
>> c:\PRGS\pgSQL\16\bin\pg_ctl.exe start
>>
>> Worked nice. Server starts, the serves as expected. But: if I try to
>> start the service by "net start pgSQL" I am reported that "pg_ctl.exe"
>> could not find "postgres.exe".
>>
>> What I've tried:
>> - added environment variable "PGPATH" pointing to "C:\PRGS\pgSQL\16\bin"
>>     -> did not help.
>>
>> - added "C:\PRGS\pgSQL\16\bin" to path. -> did not help either, even
>> after rebooting. I've added it to system path.
>>
>> Are paths somewhere within some configuration file or registry entry?
>> And set to standard install locations?
> 
> How exactly is the Windows service defined?
> Perhaps you need to use an absolute path for the executable.

Servicename: postgresql-x64-16
Name:        postgresql-x64-16-PostgreSQL Server 16
Comment:     Provides relational database storage
Path:        "C:\PRGS\pgSQL\16\bin\pg_ctl.exe"
              runservice -N "postgresql-x64-16"
              -D "C:\DB\pgSQL\16\data" -w
Type:        Automatic
Account:     Networkservice
Password:    set
Dependencies:RPC, DCOM-Service, RPC-Endpoint

Errors found within system logs:
pg_ctl: could not find program 'postgres.exe'

Seems, since "C:\PRGS\pgSQL\16\bin" is in system path, it does not 
search there at all:

# dir "C:\PRGS\pgSQL\16\bin"
[...]
Mi, 13.Nov.2024  13:24           123.392 pg_ctl.exe
[...]
Mi, 13.Nov.2024  13:24         8.659.968 postgres.exe

Any way to tell a service in Windows to use a path?
Any registry key to assign a path to?

# sc qc "postgresql-x64-16"
[SC] QueryServiceConfig ERFOLG

SERVICE_NAME: postgresql-x64-16
         TYPE               : 10  WIN32_OWN_PROCESS
         START_TYPE         : 2   AUTO_START
         ERROR_CONTROL      : 1   NORMAL
         BINARY_PATH_NAME   : "C:\PRGS\pgSQL\16\bin\pg_ctl.exe" 
runservice -N "postgresql-x64-16" -D "C:\DB\pgSQL\16\data" -w
         LOAD_ORDER_GROUP   :
         TAG                : 0
         DISPLAY_NAME       : postgresql-x64-16 - PostgreSQL Server 16
         DEPENDENCIES       : RPCSS
         SERVICE_START_NAME : NT AUTHORITY\NetworkService


-- 
Thomas

On 11/20/24 05:26, Thomas Schweikle wrote:
> Am Mo., 18.Nov..2024 um 19:43:36 schrieb Laurenz Albe:
>> On Mon, 2024-11-18 at 17:22 +0000, Thomas Schweikle wrote:
>>> Had installed PostgreSQL 16.5 on Windows 10:

>> How exactly is the Windows service defined?
>> Perhaps you need to use an absolute path for the executable.
> 
> Servicename: postgresql-x64-16
> Name:        postgresql-x64-16-PostgreSQL Server 16
> Comment:     Provides relational database storage
> Path:        "C:\PRGS\pgSQL\16\bin\pg_ctl.exe"
>                runservice -N "postgresql-x64-16"
>                -D "C:\DB\pgSQL\16\data" -w
> Type:        Automatic
> Account:     Networkservice
> Password:    set
> Dependencies:RPC, DCOM-Service, RPC-Endpoint


Did you change settings during the install?

Here on my Windows machine I get:

C:\Program Files\PostgreSQL\bin

> 
> Errors found within system logs:
> pg_ctl: could not find program 'postgres.exe'
> 
> Seems, since "C:\PRGS\pgSQL\16\bin" is in system path, it does not
> search there at all:
> 
> # dir "C:\PRGS\pgSQL\16\bin"
> [...]
> Mi, 13.Nov.2024  13:24           123.392 pg_ctl.exe
> [...]
> Mi, 13.Nov.2024  13:24         8.659.968 postgres.exe
> 
> Any way to tell a service in Windows to use a path?
> Any registry key to assign a path to?
> 
> # sc qc "postgresql-x64-16"
> [SC] QueryServiceConfig ERFOLG
> 
> SERVICE_NAME: postgresql-x64-16
>           TYPE               : 10  WIN32_OWN_PROCESS
>           START_TYPE         : 2   AUTO_START
>           ERROR_CONTROL      : 1   NORMAL
>           BINARY_PATH_NAME   : "C:\PRGS\pgSQL\16\bin\pg_ctl.exe"
> runservice -N "postgresql-x64-16" -D "C:\DB\pgSQL\16\data" -w
>           LOAD_ORDER_GROUP   :
>           TAG                : 0
>           DISPLAY_NAME       : postgresql-x64-16 - PostgreSQL Server 16
>           DEPENDENCIES       : RPCSS
>           SERVICE_START_NAME : NT AUTHORITY\NetworkService
> 
> 

-- 
Adrian Klaver
adrian.klaver@aklaver.com




Am Mi., 20.Nov..2024 um 18:15:42 schrieb Adrian Klaver:
> On 11/20/24 05:26, Thomas Schweikle wrote:
>> Am Mo., 18.Nov..2024 um 19:43:36 schrieb Laurenz Albe:
>>> On Mon, 2024-11-18 at 17:22 +0000, Thomas Schweikle wrote:
>>>> Had installed PostgreSQL 16.5 on Windows 10:
> 
>>> How exactly is the Windows service defined?
>>> Perhaps you need to use an absolute path for the executable.
>>
>> Servicename: postgresql-x64-16
>> Name:        postgresql-x64-16-PostgreSQL Server 16
>> Comment:     Provides relational database storage
>> Path:        "C:\PRGS\pgSQL\16\bin\pg_ctl.exe"
>>                runservice -N "postgresql-x64-16"
>>                -D "C:\DB\pgSQL\16\data" -w
>> Type:        Automatic
>> Account:     Networkservice
>> Password:    set
>> Dependencies:RPC, DCOM-Service, RPC-Endpoint
> 
> 
> Did you change settings during the install?

I called the installer with:

.\postgresql-16.5-1-windows-x64.exe

Then changed install path to: "C:\PRGS\pgSQL"
And database path to: "C:\DB\pgSQL"

After a while postgres got installed into "C:\PRGS\pgSQL\16" and the 
database path was created: "C:\DB\pgSQL\16\data", but the database was 
not created. Calling pg_initdb did the job and created the database 
within the given folder.

Calling "pg_ctl start" gave a message, that "pg_ctl.exe" could not find 
"postgres.exe" -- I prepended "C:\PRGS\pgSQL\16\bin" to %PATH%. Next 
thing was that pg_ctl could not find the just, with pg_initdb, created 
database. So I've set up PGDATA to point to "C:\DB\pgSQL\16\data". Both 
within the global system environment of windows.

Tried again to start postgres via "pg_ctl start". This time postgres got 
up and running instantly.

Then stopped postgres again: "pg_ctl.exe stop". And tried it using "net 
start postgresql-x64-16". This failed. "pg_ctl.exe" called could not 
find "postgres.exe".

Looking at the logs "pg_ctl.exe" stated it could not find "postgres.exe" 
again. Since %PGDATA% and %PATH% where set within system environment 
these are to be global and shall be active for services too.

Looking closer on "pg_ctl.exe" I found it using a build in path of 
"C:\Program files\PostgreSQL\16\bin\postgres.exe", regardless of any 
environment variables set if started without any of stdout, stdin, 
stderr, what is the case if it is started as a service.

> Here on my Windows machine I get:
> 
> C:\Program Files\PostgreSQL\bin

>> Errors found within system logs:
>> pg_ctl: could not find program 'postgres.exe'
>>
>> Seems, since "C:\PRGS\pgSQL\16\bin" is in system path, it does not
>> search there at all:
>>
>> # dir "C:\PRGS\pgSQL\16\bin"
>> [...]
>> Mi, 13.Nov.2024  13:24           123.392 pg_ctl.exe
>> [...]
>> Mi, 13.Nov.2024  13:24         8.659.968 postgres.exe
>>
>> Any way to tell a service in Windows to use a path?
>> Any registry key to assign a path to?
>>
>> # sc qc "postgresql-x64-16"
>> [SC] QueryServiceConfig ERFOLG
>>
>> SERVICE_NAME: postgresql-x64-16
>>           TYPE               : 10  WIN32_OWN_PROCESS
>>           START_TYPE         : 2   AUTO_START
>>           ERROR_CONTROL      : 1   NORMAL
>>           BINARY_PATH_NAME   : "C:\PRGS\pgSQL\16\bin\pg_ctl.exe"
>> runservice -N "postgresql-x64-16" -D "C:\DB\pgSQL\16\data" -w
>>           LOAD_ORDER_GROUP   :
>>           TAG                : 0
>>           DISPLAY_NAME       : postgresql-x64-16 - PostgreSQL Server 16
>>           DEPENDENCIES       : RPCSS
>>           SERVICE_START_NAME : NT AUTHORITY\NetworkService
>>
>>
> 


-- 
Thomas

On 11/21/24 06:10, Thomas Schweikle wrote:
> Am Mi., 20.Nov..2024 um 18:15:42 schrieb Adrian Klaver:
>> On 11/20/24 05:26, Thomas Schweikle wrote:
>>> Am Mo., 18.Nov..2024 um 19:43:36 schrieb Laurenz Albe:
>>>> On Mon, 2024-11-18 at 17:22 +0000, Thomas Schweikle wrote:
>>>>> Had installed PostgreSQL 16.5 on Windows 10:

>> Did you change settings during the install?
> 
> I called the installer with:
> 
> .\postgresql-16.5-1-windows-x64.exe
> 
> Then changed install path to: "C:\PRGS\pgSQL"
> And database path to: "C:\DB\pgSQL"
> 
> After a while postgres got installed into "C:\PRGS\pgSQL\16" and the
> database path was created: "C:\DB\pgSQL\16\data", but the database was
> not created. Calling pg_initdb did the job and created the database
> within the given folder.
> 
> Calling "pg_ctl start" gave a message, that "pg_ctl.exe" could not find
> "postgres.exe" -- I prepended "C:\PRGS\pgSQL\16\bin" to %PATH%. Next
> thing was that pg_ctl could not find the just, with pg_initdb, created
> database. So I've set up PGDATA to point to "C:\DB\pgSQL\16\data". Both
> within the global system environment of windows.
> 
> Tried again to start postgres via "pg_ctl start". This time postgres got
> up and running instantly.
> 
> Then stopped postgres again: "pg_ctl.exe stop". And tried it using "net
> start postgresql-x64-16". This failed. "pg_ctl.exe" called could not
> find "postgres.exe".
> 
> Looking at the logs "pg_ctl.exe" stated it could not find "postgres.exe"
> again. Since %PGDATA% and %PATH% where set within system environment
> these are to be global and shall be active for services too.
> 
> Looking closer on "pg_ctl.exe" I found it using a build in path of
> "C:\Program files\PostgreSQL\16\bin\postgres.exe", regardless of any
> environment variables set if started without any of stdout, stdin,
> stderr, what is the case if it is started as a service.
> 


Looks like your choices are:

1) Keep the default paths during the install.

2) Raise an issue here:

https://github.com/EnterpriseDB/edb-installers/issues




-- 
Adrian Klaver
adrian.klaver@aklaver.com