Postgresql 14 on Windows 10: pg_ctl.exe returns is not a database cluster directory
I have installed postgresql 14 on a Windows 10 machine. But, I'm getting this message:
C:\Program Files\PostgreSQL\14\bin > pg_ctl.exe start -D "C:\postgres" pg_ctl: directory "C:/postgres" is not a database cluster directory
The installation log file at
%temp%\install-postgresql.logshows this text at the very end:
Error running C:\WINDOWS\System32\cscript //NoLogo "C:\Program Files\PostgreSQL\14/installer/server/initcluster.vbs" "NT AUTHORITY\NetworkService" "postgres" "****" "C:\Users\nephewtom\AppData\Local\Temp/postgresql_installer_80ce3934c2" "C:\Program Files\PostgreSQL\14" "C:\Program Files\PostgreSQL\14\data" 5432 "DEFAULT" 0: Program ended with an error exit code Problem running post-install step. Installation may not complete correctly The database cluster initialisation failed. Setting variable whoami from C:\WINDOWS\System32\whoami Script exit code: 0
I suspect it may be due to a permissions issue.
Checking the troubleshoot guide https://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#I.27m_getting_permissions_errors_when_installing.2Frunning_initdb , it suggests to use
cscript.exe, but that failed.
@LaurenzAlbe comment made it.
He deserves all the credit, but I am posting the answer with commands output in case somebody has the same issue and it could help.
C:\Program Files\PostgreSQL\14\bin> .\initdb.exe -D c:/PostgreSQL/14/data The files belonging to this database system will be owned by user "nephewtom". This user must also own the server process.
The database cluster will be initialized with locale "English_United States.1252".
The default database encoding has accordingly been set to "WIN1252".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory c:/PostgreSQL/14/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... windows
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Europe/Paris
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
".\pg_ctl" -D "c:\PostgreSQL\14\data\\" -l logfile start
Then starting PostgreSQL with
C:\Program Files\PostgreSQL\14\bin> .\pg_ctl.exe start -D c:\PostgreSQL\14\data waiting for server to start.... 2022-03-14 13:13:34.114 CET  LOG: starting PostgreSQL 14.2, compiled by Visual C++ build 1914, 64-bit 2022-03-14 13:13:34.126 CET  LOG: listening on IPv6 address "::1", port 5432 2022-03-14 13:13:34.126 CET  LOG: listening on IPv4 address "127.0.0.1", port 5432 2022-03-14 13:13:34.219 CET  LOG: database system was shut down at 2022-03-14 13:13:01 CET 2022-03-14 13:13:34.485 CET  LOG: database system is ready to accept connections done server started