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

Started by Thomas Schweikleover 1 year ago8 messagesgeneral
Jump to latest
#1Thomas Schweikle
tschweikle@bfs.de

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

#2Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Thomas Schweikle (#1)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#3Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Thomas Schweikle (#1)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#4Thomas Schweikle
tschweikle@bfs.de
In reply to: Adrian Klaver (#2)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#5Thomas Schweikle
tschweikle@bfs.de
In reply to: Laurenz Albe (#3)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#6Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Thomas Schweikle (#5)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#7Thomas Schweikle
tschweikle@bfs.de
In reply to: Adrian Klaver (#6)
Re: Postgres service not starting on windows after install if not installed into standard locations

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

#8Adrian Klaver
adrian.klaver@aklaver.com
In reply to: Thomas Schweikle (#7)
Re: Postgres service not starting on windows after install if not installed into standard locations

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