-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpostgresql-allow-remote-connections.html
More file actions
138 lines (137 loc) · 16.9 KB
/
postgresql-allow-remote-connections.html
File metadata and controls
138 lines (137 loc) · 16.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Allow Remote Connections to PostgreSQL on Windows — pg_hba.conf and Firewall Guide</title>
<meta name="description" content="Enable remote connections to PostgreSQL on Windows. Configure listen_addresses in postgresql.conf, add pg_hba.conf host rules, open Windows Firewall port 5432.">
<link rel="canonical" href="https://postgre-sql.github.io/postgresql-allow-remote-connections.html">
<meta name="last-modified" content="2026-06-08">
<meta property="og:title" content="Allow Remote Connections to PostgreSQL on Windows — pg_hba.conf and Firewall Guide">
<meta property="og:description" content="Enable remote connections to PostgreSQL on Windows. Configure listen_addresses in postgresql.conf, add pg_hba.conf host rules, open Windows Firewall port 5432.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://postgre-sql.github.io/postgresql-allow-remote-connections.html">
<meta property="og:image" content="https://postgre-sql.github.io/og-image.svg">
<meta name="twitter:card" content="summary_large_image">
<link rel="icon" href="/favicon.svg">
<link rel="stylesheet" href="/style.css">
</head>
<body>
<nav class="site-nav"><div class="wrap"><div class="nav-inner">
<a href="/index.html" class="nav-logo"><div class="nav-logo-mark">Pg</div><span class="nav-logo-name">PostgreSQL</span><span class="nav-logo-sub">for Windows</span></a>
<div class="nav-links">
<a href="/index.html" id="nl-home">Home</a>
<a href="/download-windows.html" id="nl-dl">Download</a>
<a href="/offline-installer.html" id="nl-off">Offline</a>
<a href="/configure-windows-service.html" id="nl-svc">Service</a>
<a href="/fix-path-issues.html" id="nl-path">PATH fix</a>
<a href="/pgadmin-windows.html" id="nl-pgadmin">pgAdmin</a>
<a href="/postgresql-windows-faq.html" id="nl-faq">FAQ</a>
</div>
<a href="/download-windows.html" class="nav-cta"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg> Download</a>
</div></div></nav>
<div class="page-hero"><div class="wrap">
<nav class="breadcrumb"><a href="/index.html">home</a> <span>/</span> <span>postgresql-allow-remote-connections</span></nav>
<span class="page-tag">Remote access</span>
<h1>Allow remote connections to PostgreSQL on Windows — <span>pg_hba.conf & firewall guide</span></h1>
<p class="page-lead">Enable remote connections to PostgreSQL on Windows in three steps: set listen_addresses in postgresql.conf, add client rules to pg_hba.conf, and open port 5432 in Windows Firewall.</p>
</div></div>
<div class="wrap"><div class="content-layout">
<main><div class="callout callout-warn"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg><span>By default PostgreSQL only accepts connections from localhost. Enabling remote connections requires changes to both <code>postgresql.conf</code> AND <code>pg_hba.conf</code> AND Windows Firewall. All three must be configured.</span></div>
<div class="section" aria-labelledby="steps-h2"><span class="section-label">Three steps</span><h2 id="steps-h2">Enable remote connections step by step</h2><ul class="steps">
<li class="step"><div class="step-n">1</div><div><h3>Edit postgresql.conf — set listen_addresses</h3><p>Open <code>postgresql.conf</code> in the data directory and change <code>listen_addresses</code>:</p>
<div class="term"><div class="term-bar"><div class="term-dot" style="background:#ff5f56"></div><div class="term-dot" style="background:#ffbd2e"></div><div class="term-dot" style="background:#27c93f"></div><span class="term-label">postgresql.conf</span></div><div class="term-body"><div><span class="t-cm"># Find this line (remove the # if commented out):</span></div><div><span class="t-o">#listen_addresses = 'localhost'</span></div><div></div><div><span class="t-cm"># Change to listen on all interfaces:</span></div><div><span class="t-v">listen_addresses = '*'</span></div><div></div><div><span class="t-cm"># Or listen on a specific IP only:</span></div><div><span class="t-v">listen_addresses = '192.168.1.10'</span></div></div></div>
<div class="callout callout-info"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg><span>Using <code>*</code> listens on all network interfaces. For production, specify only the IP address clients will connect to.</span></div>
</div></li>
<li class="step"><div class="step-n">2</div><div><h3>Edit pg_hba.conf — allow remote clients</h3><p>Open <code>pg_hba.conf</code> and add a rule for your client IP range:</p>
<div class="term"><div class="term-bar"><div class="term-dot" style="background:#ff5f56"></div><div class="term-dot" style="background:#ffbd2e"></div><div class="term-dot" style="background:#27c93f"></div><span class="term-label">pg_hba.conf — add at the end</span></div><div class="term-body"><div><span class="t-cm"># Allow specific user from a subnet:</span></div><div><span class="t-v">host all all 192.168.1.0/24 scram-sha-256</span></div><div></div><div><span class="t-cm"># Allow all users from anywhere (not recommended for production):</span></div><div><span class="t-v">host all all 0.0.0.0/0 scram-sha-256</span></div><div></div><div><span class="t-cm"># Allow specific user to specific database from specific IP:</span></div><div><span class="t-v">host mydb myuser 10.0.0.5/32 scram-sha-256</span></div></div></div>
</div></li>
<li class="step"><div class="step-n">3</div><div><h3>Open Windows Firewall for port 5432</h3>
<div class="term"><div class="term-bar"><div class="term-dot" style="background:#ff5f56"></div><div class="term-dot" style="background:#ffbd2e"></div><div class="term-dot" style="background:#27c93f"></div><span class="term-label">PowerShell — Administrator</span></div><div class="term-body"><div><span class="t-p">PS></span> <span class="t-c">New-NetFirewallRule -DisplayName "PostgreSQL 5432" -Direction Inbound -Protocol TCP -LocalPort 5432 -Action Allow</span></div><div></div><div><span class="t-cm"># Or restrict to specific source IP:</span></div><div><span class="t-p">PS></span> <span class="t-c">New-NetFirewallRule -DisplayName "PostgreSQL 5432" -Direction Inbound -Protocol TCP -LocalPort 5432 -RemoteAddress 192.168.1.0/24 -Action Allow</span></div></div></div>
</div></li>
<li class="step"><div class="step-n">4</div><div><h3>Restart PostgreSQL to apply all changes</h3>
<div class="term"><div class="term-bar"><div class="term-dot" style="background:#ff5f56"></div><div class="term-dot" style="background:#ffbd2e"></div><div class="term-dot" style="background:#27c93f"></div><span class="term-label">cmd.exe — Administrator</span></div><div class="term-body"><div><span class="t-p">C:\></span> <span class="t-c">net stop postgresql-x64-18 && net start postgresql-x64-18</span></div></div></div>
</div></li>
<li class="step"><div class="step-n">5</div><div><h3>Test from a remote machine</h3>
<div class="term"><div class="term-bar"><div class="term-dot" style="background:#ff5f56"></div><div class="term-dot" style="background:#ffbd2e"></div><div class="term-dot" style="background:#27c93f"></div><span class="term-label">cmd.exe — remote machine</span></div><div class="term-body"><div><span class="t-p">C:\></span> <span class="t-c">psql -h 192.168.1.10 -U postgres -d mydb</span></div><div><span class="t-o">Password for user postgres:</span></div><div><span class="t-ok">mydb=#</span></div></div></div>
</div></li>
</ul></div>
<div class="section" aria-labelledby="trouble-h2"><span class="section-label">Troubleshoot</span><h2 id="trouble-h2">Connection refused or timeout</h2>
<div class="tbl-wrap"><table><thead><tr><th>Symptom</th><th>Likely cause</th><th>Fix</th></tr></thead><tbody>
<tr><td>Connection refused</td><td>listen_addresses still localhost</td><td>Check postgresql.conf, restart service</td></tr>
<tr><td>Connection timed out</td><td>Windows Firewall blocking</td><td>Add inbound rule for port 5432</td></tr>
<tr><td>Password authentication failed</td><td>pg_hba.conf missing rule</td><td>Add host rule for client IP in pg_hba.conf</td></tr>
<tr><td>No pg_hba.conf entry</td><td>pg_hba.conf rule missing or wrong IP</td><td>Add correct host rule and reload config</td></tr>
</tbody></table></div>
</div>
<div class="section" aria-labelledby="faq-h2"><span class="section-label">FAQ</span><h2 id="faq-h2">Remote connection questions</h2><div class="faq">
<div class="faq-item"><details><summary>Changes made but still cannot connect remotely</summary><div class="faq-ans">Check all three pieces: (1) <code>netstat -ano | findstr 5432</code> should show <code>0.0.0.0:5432</code> not <code>127.0.0.1:5432</code> after the restart. (2) <code>pg_hba.conf</code> must have a matching host rule. (3) Windows Firewall inbound rule must exist for port 5432.</div></details></div>
<div class="faq-item"><details><summary>Is it safe to use 0.0.0.0/0 in pg_hba.conf?</summary><div class="faq-ans">Only if you also have strong authentication (scram-sha-256) and strong passwords. For production, restrict to specific IP ranges. A database accessible from anywhere with a weak password is a serious security risk.</div></details></div>
<div class="faq-item"><details><summary>How do I reload pg_hba.conf without restarting?</summary><div class="faq-ans">pg_hba.conf changes can be applied without a full restart: <code>psql -U postgres -c "SELECT pg_reload_conf();"</code>. postgresql.conf changes to listen_addresses still require a full service restart.</div></details></div>
</div></div>
<div class="cta-banner"><div><h2>Need to configure pg_hba.conf more?</h2><p>Full postgresql.conf and pg_hba.conf reference guide.</p></div><a href="/postgresql-config-windows.html" class="btn-white"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>Config guide</a></div>
<div style="margin-bottom:32px"><span class="section-label">Related guides</span><div class="rel-grid"><a href="/postgresql-config-windows.html" class="rel-card"><div class="rel-title">postgresql.conf →</div><div class="rel-sub">full config guide</div></a><a href="/postgresql-port-5432.html" class="rel-card"><div class="rel-title">Port 5432 →</div><div class="rel-sub">port configuration</div></a><a href="/postgresql-password-windows.html" class="rel-card"><div class="rel-title">Reset password →</div><div class="rel-sub">secure your server</div></a></div></div></main>
<aside class="content-sidebar"><div class="sb-card"><div class="version-badge-label">Latest stable</div><div class="version-badge-val">18.3</div><div class="version-badge-sub">Released May 2026</div></div><div class="sb-card"><div class="sb-card-title">Install & setup</div><ul class="sb-links"><li><a href="/download-windows.html">Download PostgreSQL</a></li><li><a href="/offline-installer.html">Offline installer</a></li><li><a href="/configure-windows-service.html">Windows service</a></li><li><a href="/fix-path-issues.html">Fix PATH / psql</a></li><li><a href="/pgadmin-windows.html">pgAdmin 4</a></li><li><a href="/install-postgresql-windows-server.html">Windows Server</a></li></ul></div><div class="sb-card"><div class="sb-card-title">Configuration</div><ul class="sb-links"><li><a href="/postgresql-config-windows.html">postgresql.conf</a></li><li><a href="/postgresql-port-5432.html">Port 5432</a></li><li><a href="/postgresql-allow-remote-connections.html" class="cur">Remote connections</a></li><li><a href="/postgresql-password-windows.html">Reset password</a></li></ul></div><div class="sb-card"><div class="sb-card-title">Tools & help</div><ul class="sb-links"><li><a href="/psql-commands-windows.html">psql commands</a></li><li><a href="/pg-dump-restore-windows.html">Backup & restore</a></li><li><a href="/postgresql-python-windows.html">Python / psycopg2</a></li><li><a href="/odbc-driver-x64-x86.html">ODBC driver</a></li><li><a href="/postgresql-not-starting-windows.html">Service not starting</a></li><li><a href="/postgresql-uninstall-windows.html">Uninstall</a></li><li><a href="/postgresql-windows-faq.html">FAQ</a></li></ul></div></aside>
</div></div>
<footer class="site-footer"><div class="wrap">
<div class="footer-inner">
<div>
<div class="footer-logo"><div class="footer-logo-mark">Pg</div><span class="footer-logo-name">PostgreSQL for Windows</span></div>
<p class="footer-tagline">Unofficial Windows guide for PostgreSQL — download, install, configure, troubleshoot.</p>
</div>
<div>
<div class="footer-col-title">Install & setup</div>
<ul class="footer-links">
<li><a href="/download-windows.html">Download PostgreSQL</a></li>
<li><a href="/offline-installer.html">Offline installer</a></li>
<li><a href="/configure-windows-service.html">Windows service</a></li>
<li><a href="/fix-path-issues.html">Fix PATH / psql</a></li>
<li><a href="/pgadmin-windows.html">pgAdmin 4</a></li>
</ul>
</div>
<div>
<div class="footer-col-title">Configuration</div>
<ul class="footer-links">
<li><a href="/postgresql-config-windows.html">postgresql.conf</a></li>
<li><a href="/postgresql-port-5432.html">Port 5432</a></li>
<li><a href="/postgresql-allow-remote-connections.html">Remote connections</a></li>
<li><a href="/postgresql-password-windows.html">Reset password</a></li>
<li><a href="/install-postgresql-windows-server.html">Windows Server</a></li>
</ul>
</div>
<div>
<div class="footer-col-title">Tools & help</div>
<ul class="footer-links">
<li><a href="/psql-commands-windows.html">psql commands</a></li>
<li><a href="/pg-dump-restore-windows.html">Backup & restore</a></li>
<li><a href="/postgresql-not-starting-windows.html">Service not starting</a></li>
<li><a href="/postgresql-uninstall-windows.html">Uninstall</a></li>
<li><a href="/postgresql-windows-faq.html">FAQ</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>Not affiliated with the PostgreSQL Global Development Group. Unofficial community guide.</p>
<p><strong>Affiliate disclosure:</strong> Download links may be partner links.</p>
</div>
</div></footer>
<div class="cookie-bar" id="cookieBar" style="display:none">
<p>We use Google Analytics for anonymous traffic data. <a href="/privacy.html">Privacy policy</a></p>
<div class="cookie-btns"><button class="cookie-accept" id="cookieAccept">Accept</button><button class="cookie-decline" id="cookieDecline">Decline</button></div>
</div>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MHLW57MR8Q"></script>
<script>
window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}
gtag('consent','default',{analytics_storage:'denied',ad_storage:'denied'});
gtag('js',new Date());gtag('config','G-MHLW57MR8Q',{anonymize_ip:true,send_page_view:false});
function grantGA(){gtag('consent','update',{analytics_storage:'granted'});gtag('event','page_view',{page_location:location.href,page_title:document.title})}
document.addEventListener('DOMContentLoaded',function(){
var bar=document.getElementById('cookieBar');
var c=localStorage.getItem('pg_consent');
if(!c){bar.style.display='flex'}else if(c==='1'){grantGA()}
document.getElementById('cookieAccept').addEventListener('click',function(){localStorage.setItem('pg_consent','1');grantGA();bar.style.display='none'});
document.getElementById('cookieDecline').addEventListener('click',function(){localStorage.setItem('pg_consent','0');bar.style.display='none'});
});
</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"HowTo","name":"Enable Remote Connections to PostgreSQL on Windows","description":"Configure PostgreSQL on Windows to accept connections from remote machines.","step":[{"@type":"HowToStep","position":1,"name":"Edit postgresql.conf","text":"Set listen_addresses = *"},{"@type":"HowToStep","position":2,"name":"Edit pg_hba.conf","text":"Add host rule for client IP with scram-sha-256"},{"@type":"HowToStep","position":3,"name":"Open firewall","text":"New-NetFirewallRule for TCP port 5432"},{"@type":"HowToStep","position":4,"name":"Restart service","text":"net stop postgresql-x64-18 && net start postgresql-x64-18"}]}</script>
<script>var el=document.getElementById("nl-home");if(el)el.classList.add("active");</script>
</body></html>