Thread: Postgres service not starting on windows after install if not installed into standard locations
Postgres service not starting on windows after install if not installed into standard locations
From
Thomas Schweikle
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Adrian Klaver
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Laurenz Albe
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Thomas Schweikle
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Thomas Schweikle
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Adrian Klaver
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Thomas Schweikle
Date:
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
Re: Postgres service not starting on windows after install if not installed into standard locations
From
Adrian Klaver
Date:
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