By default, PostgreSQL installs itself as a Windows service set to automatic startup. This can be verified using the Services management console (services.msc) where you'll typically find entries like:
postgresql-x64-13 - PostgreSQL Server 13
There are several ways to modify this behavior. The most straightforward method is using the Windows Services console:
- Press Win+R, type
services.msc
and hit Enter - Locate your PostgreSQL service (name varies by version)
- Right-click → Properties
- Change Startup type to "Manual" or "Disabled"
Alternatively, you can use PowerShell for more control:
# Check current status Get-Service -Name postgresql* # Disable auto-start Set-Service -Name "postgresql-x64-13" -StartupType Manual # Stop the service if running Stop-Service -Name "postgresql-x64-13" -Force
If you're using PostgreSQL's command-line tools, pg_ctl
offers additional options:
# Register service with manual startup pg_ctl register -N "PostgreSQL_Manual" -D "C:\\Program Files\\PostgreSQL\\13\\data" -w -S manual # Unregister service completely (careful!) pg_ctl unregister -N "PostgreSQL_Manual"
For developers who frequently need to toggle the service state, consider creating batch scripts:
@echo off :: StartPostgres.bat net start postgresql-x64-13
@echo off :: StopPostgres.bat net stop postgresql-x64-13
When dealing with multiple installations, you might need to specify the exact service name:
# For PostgreSQL 12 Set-Service -Name "postgresql-x64-12" -StartupType Manual # For PostgreSQL 14 Set-Service -Name "postgresql-x64-14" -StartupType Manual
For advanced users, here's a PowerShell function to toggle PostgreSQL services:
function Manage-PostgreSQLService { param ( [Parameter(Mandatory=$true)] [ValidateSet("Start","Stop","Disable")] [string]$Action, [string]$Version = "13" ) $serviceName = "postgresql-x64-$Version" switch ($Action) { "Start" { Set-Service -Name $serviceName -StartupType Manual Start-Service -Name $serviceName } "Stop" { Stop-Service -Name $serviceName -Force } "Disable" { Set-Service -Name $serviceName -StartupType Disabled Stop-Service -Name $serviceName -Force } } }
When you install PostgreSQL on Windows, it typically configures itself to start automatically with Windows through a Windows Service. While this is convenient for production servers, it's often undesirable for development machines where you want more control over when database resources are consumed.
The most straightforward way is using the Windows Services Management Console:
1. Press Win+R, type "services.msc" and press Enter 2. Locate the PostgreSQL service (usually named "postgresql-x64-{version}") 3. Right-click → Properties 4. Change "Startup type" to "Manual" 5. Click OK and close the console
For those who prefer command-line solutions, use PowerShell or CMD as Administrator:
sc config postgresql-x64-14 start= demand
Replace "14" with your PostgreSQL version number. This changes the startup type to manual (demand-start).
Some PostgreSQL installers provide configuration options during setup:
# During installation, look for: [ ] Launch Stack Builder at exit [ ] Initialize database cluster [X] Start PostgreSQL Server when Windows starts
Uncheck the autostart option if available during installation.
If you need to temporarily prevent startup without changing the service configuration:
# Stop the service if running net stop postgresql-x64-14 # Prevent auto-start for current boot sc config postgresql-x64-14 start= disabled # When ready to use: sc config postgresql-x64-14 start= demand net start postgresql-x64-14
After making changes, verify the service won't start automatically:
# Check service status sc qc postgresql-x64-14 | find "START_TYPE"
Should return "DEMAND_START" or "DISABLED" rather than "AUTO_START".
For more control, consider managing PostgreSQL manually through pg_ctl:
# Stop the service completely pg_ctl -D "C:\Program Files\PostgreSQL\14\data" stop # Start manually when needed pg_ctl -D "C:\Program Files\PostgreSQL\14\data" start
This approach completely bypasses the Windows Service mechanism.