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

From: Laurenz Albe <[email-masked]>
Date: Mon, 18 Nov 2024 19:43:36 +0100

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

---

From: Thomas Schweikle <[email-masked]>
Date: Wed, 20 Nov 2024 13:26:26 +0000

> 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