
很多人第一次在 Windows 上裝 PostgreSQL以為跟裝個(gè)普通軟件一樣一路 Next 就行結(jié)果卡在密碼策略、端口占用、命令行工具認(rèn)不出 psql 這些細(xì)節(jié)上折騰半天連不上數(shù)據(jù)庫(kù)。這篇文章把我在 Windows 環(huán)境下安裝 PostgreSQL、用 Navicat 連接、以及過(guò)程中最常踩的坑完整過(guò)一遍希望你看完能一次走通。1. 安裝前的準(zhǔn)備工作1.1 版本選擇與安裝包獲取PostgreSQL 官方提供 Windows 安裝包下載時(shí)別盲目選最新版。對(duì)大多數(shù)項(xiàng)目來(lái)說(shuō)穩(wěn)定版比嘗鮮版更重要。我的建議是選擇當(dāng)前最新的穩(wěn)定大版本比如 16.x 系列而不是剛發(fā)布不久的 17 或者更舊的 12、13。新版雖然功能新但一些第三方工具比如 Navicat 的舊版本、某些 ORM 驅(qū)動(dòng)可能要等一陣子才能完美適配。可以在官網(wǎng)的 download 頁(yè)面找到 Windows 安裝器一般是個(gè).exe文件幾十 MB 到一百多 MB 不等。1.2 安裝前的系統(tǒng)檢查在雙擊安裝包之前最好先做兩件事檢查是否已安裝過(guò) PostgreSQL有些人在不知情的情況下裝過(guò)或者裝了某些集成環(huán)境自帶的 PostgreSQL導(dǎo)致端口沖突或服務(wù)名沖突。建議先打開(kāi)“服務(wù)”窗口WinR 輸入services.msc看看有沒(méi)有包含postgresql字樣的服務(wù)。確認(rèn) 5432 端口是否被占用PostgreSQL 默認(rèn)端口是 5432。提前打開(kāi)命令行執(zhí)行一下netstat -ano | findstr 5432如果沒(méi)有任何輸出說(shuō)明端口空閑。如果有輸出且狀態(tài)是LISTENING那就得留意了要么是舊版本 PostgreSQL要么是其他程序占用了。在安裝時(shí)可以改端口但我個(gè)人建議優(yōu)先解決端口占用問(wèn)題盡量保持 5432 這個(gè)默認(rèn)端口免得后面連接配置的時(shí)候還要單獨(dú)寫(xiě)端口號(hào)。2. 安裝 PostgreSQL 的完整過(guò)程2.1 安裝向?qū)е鸩讲僮髂玫桨惭b包后雙擊運(yùn)行接下來(lái)就是跟著向?qū)ё?。大部分步驟很直白但有幾個(gè)環(huán)節(jié)容易出問(wèn)題我一個(gè)個(gè)說(shuō)。第一步選擇安裝目錄。默認(rèn)是C:\Program Files\PostgreSQL\16如果你不想裝在 C 盤(pán)可以改成 D 盤(pán)或者其他位置。這里要注意安裝目錄不要包含中文和空格否則極少數(shù)情況下會(huì)導(dǎo)致一些命令行工具或驅(qū)動(dòng)加載異常。也別圖省事直接把整個(gè) PostgreSQL 裝在根目錄后面想找配置文件的時(shí)候會(huì)很難受。第二步選擇組件。安裝向?qū)?huì)讓你勾選組件默認(rèn)是全部勾選包括 PostgreSQL Server、pgAdmin 4、Stack Builder、Command Line Tools。建議全選尤其是 Command Line Tools里面包含psql、pg_dump、pg_restore這些命令行工具備份恢復(fù)、日常維護(hù)都離不開(kāi)它們。pgAdmin 4 是官方圖形化管理工具留著沒(méi)壞處。第三步設(shè)置數(shù)據(jù)目錄。這一步相當(dāng)關(guān)鍵。默認(rèn)數(shù)據(jù)目錄在安裝目錄下的data文件夾里如果你把安裝目錄放在系統(tǒng)盤(pán)那數(shù)據(jù)庫(kù)文件也默認(rèn)放在系統(tǒng)盤(pán)。有條件的強(qiáng)烈建議把數(shù)據(jù)目錄單獨(dú)指定到數(shù)據(jù)盤(pán)或容量充足的磁盤(pán)分區(qū)。比如我習(xí)慣放在D:\PostgreSQL\Data這樣后續(xù)如果系統(tǒng)重裝或卸載軟件數(shù)據(jù)文件還在不至于全盤(pán)皆輸。安裝向?qū)Ю镉幸徊綄iT(mén)讓你設(shè)置 Data Directory在這一步改好即可。第四步設(shè)置超級(jí)用戶密碼。這里設(shè)置的密碼是數(shù)據(jù)庫(kù)超級(jí)用戶postgres的密碼。有兩點(diǎn)要特別注意密碼別用太簡(jiǎn)單的雖然本地開(kāi)發(fā)沒(méi)人管你但一旦端口暴露到公網(wǎng)或者局域網(wǎng)弱密碼就等于裸奔。務(wù)必牢記這個(gè)密碼Navicat 連接、psql 登錄都是用這個(gè)密碼。實(shí)在怕忘就臨時(shí)記在密碼管理器里。注意這個(gè)密碼跟安裝 PostgreSQL 的 Windows 系統(tǒng)用戶密碼沒(méi)有任何關(guān)系別想著“Windows 登錄密碼不就是這個(gè)”那是兩碼事。第五步設(shè)置端口。默認(rèn)是 5432。除非你的 5432 確實(shí)被占用了否則別改。如果改了后面連接數(shù)據(jù)庫(kù)時(shí)端口必須寫(xiě)對(duì)很多新手連接失敗就是端口寫(xiě)錯(cuò)了。第六步 locale 設(shè)置。安裝過(guò)程中會(huì)讓你選 locale也就是區(qū)域和編碼。這一步非常多人踩坑。默認(rèn)值通常是操作系統(tǒng)當(dāng)前區(qū)域?qū)?yīng)的 locale在中文 Windows 上可能會(huì)默認(rèn)成Chinese (Simplified) China但如果你打算用psql或者處理一些國(guó)際化的數(shù)據(jù)建議選擇C或者en_US.UTF-8具體看你的數(shù)據(jù)需求。不過(guò)說(shuō)實(shí)話多數(shù)情況下用默認(rèn)的也能跑只是如果后面發(fā)現(xiàn)中文亂碼或者排序有問(wèn)題往往就是 locale 沒(méi)選對(duì)。更穩(wěn)妥的做法是選C數(shù)據(jù)庫(kù)默認(rèn)編碼UTF8基本能在通用場(chǎng)景下兼容絕大多數(shù)客戶端。全部設(shè)置完之后向?qū)?huì)匯總一遍你填的信息確認(rèn)無(wú)誤后點(diǎn)擊 Next 開(kāi)始安裝。安裝過(guò)程會(huì)執(zhí)行初始化數(shù)據(jù)庫(kù)、注冊(cè) Windows 服務(wù)、安裝命令行工具等動(dòng)作一般幾分鐘內(nèi)完成。2.2 驗(yàn)證安裝是否成功安裝完成后不要急著去打開(kāi) Navicat先在本地把基礎(chǔ)驗(yàn)證做了。Windows 開(kāi)始菜單里能找到pgAdmin 4或SQL Shell (psql)。如果你用的是SQL Shell (psql)啟動(dòng)后它會(huì)依次問(wèn)你 Server、Database、Port、Username、Password。直接回車(chē)使用默認(rèn)值本機(jī)、postgres 數(shù)據(jù)庫(kù)、5432 端口、postgres 用戶最后輸入你剛才設(shè)置的密碼。看到以下提示就說(shuō)明安裝成功了postgres#出現(xiàn)這個(gè)提示符說(shuō)明你已經(jīng)進(jìn)入了 PostgreSQL 的命令行交互界面。此時(shí)可以敲一個(gè)簡(jiǎn)單的命令試試SELECT version();能正常返回 PostgreSQL 版本信息就說(shuō)明服務(wù)在跑數(shù)據(jù)庫(kù)也能正常響應(yīng)。3. 核心配置解析PostgreSQL 服務(wù)與連接原理3.1 Windows 服務(wù)機(jī)制安裝完成后PostgreSQL 不是在前臺(tái)跑的程序而是作為 Windows 的后臺(tái)服務(wù)運(yùn)行。你可以在服務(wù)管理里找到名字類似postgresql-x64-16的服務(wù)。這意味著即使沒(méi)有任何圖形界面打開(kāi)數(shù)據(jù)庫(kù)也能一直運(yùn)行。這點(diǎn)對(duì)很多新手來(lái)說(shuō)是個(gè)認(rèn)知盲區(qū)他以為要開(kāi)著某個(gè)窗口才能訪問(wèn)數(shù)據(jù)庫(kù)其實(shí)完全不需要。只要服務(wù)狀態(tài)是“正在運(yùn)行”任何客戶端都能連接。如果你發(fā)現(xiàn)數(shù)據(jù)庫(kù)連不上第一步就是去服務(wù)管理里確認(rèn)這個(gè)服務(wù)是否在運(yùn)行雙擊服務(wù)還能設(shè)置啟動(dòng)類型為“自動(dòng)”確保開(kāi)機(jī)自啟。3.2 連接 PostgreSQL 的底層邏輯無(wú)論你用 Navicat 還是命令行 psql連接一個(gè) PostgreSQL 數(shù)據(jù)庫(kù)本質(zhì)上就是在做一件事向 PostgreSQL 服務(wù)發(fā)起 TCP 連接然后通過(guò)認(rèn)證。連接過(guò)程中需要幾樣信息主機(jī)地址本機(jī)就是localhost或127.0.0.1遠(yuǎn)程機(jī)器就是對(duì)方的 IP。端口號(hào)默認(rèn)5432。用戶名默認(rèn)超級(jí)用戶是postgres也可以創(chuàng)建普通用戶。密碼安裝時(shí)設(shè)置的那個(gè)。數(shù)據(jù)庫(kù)名默認(rèn)安裝后會(huì)有一個(gè)名為postgres的數(shù)據(jù)庫(kù)如果要連其他庫(kù)需要先創(chuàng)建。連接時(shí)會(huì)讀取 PostgreSQL 的認(rèn)證配置文件也就是pg_hba.conf。這個(gè)文件決定了哪些 IP 段可以訪問(wèn)、用什么方式認(rèn)證密碼、信任、拒絕等。Navicat 連接報(bào)錯(cuò)如果出現(xiàn) “no pg_hba.conf entry for host”就說(shuō)明遠(yuǎn)端連接的規(guī)則沒(méi)放開(kāi)。后面會(huì)詳細(xì)說(shuō)怎么改。3.3 安裝路徑與配置文件位置PostgreSQL 的配置文件都在數(shù)據(jù)目錄下而不是安裝目錄下。比如postgresql.conf主配置文件包括監(jiān)聽(tīng)地址、端口、內(nèi)存參數(shù)、日志等。pg_hba.conf客戶端認(rèn)證配置文件控制誰(shuí)可以連、怎么驗(yàn)證身份。如果需要修改監(jiān)聽(tīng)地址比如允許遠(yuǎn)程連接要改postgresql.conf里的listen_addresses默認(rèn)是localhost只允許本機(jī)連接。改成*或具體 IP 后還要在pg_hba.conf里加上對(duì)應(yīng)的認(rèn)證規(guī)則然后重啟服務(wù)才能生效。很多人在文件里改了老半天發(fā)現(xiàn)沒(méi)效果大概率是忘了重啟服務(wù)。4. Navicat 連接 PostgreSQL 圖文詳解4.1 新建連接前的信息準(zhǔn)備打開(kāi) Navicat我用的是 Navicat 16 版本其他版本界面大同小異點(diǎn)擊左上角的“連接”選擇 “PostgreSQL”。在彈窗里填這些內(nèi)容連接名隨便起比如本地PG只是用來(lái)區(qū)分不同連接不參與實(shí)際連接。主機(jī)本機(jī)填localhost或127.0.0.1。如果是遠(yuǎn)程連接的服務(wù)器填對(duì)方的 IP 或域名。端口5432安裝時(shí)改過(guò)端口的填你改的那個(gè)。用戶名postgres密碼安裝時(shí)設(shè)置的超級(jí)用戶密碼。數(shù)據(jù)庫(kù)這一步可以先不填連接成功后會(huì)在左側(cè)展開(kāi)看到所有數(shù)據(jù)庫(kù)也可以直接填postgres先行測(cè)試。填完后點(diǎn)擊“測(cè)試連接”。如果彈窗提示“連接成功”說(shuō)明數(shù)據(jù)庫(kù)服務(wù)正常、認(rèn)證也通過(guò)了。4.2 連接成功后的基礎(chǔ)操作連接成功之后左側(cè)會(huì)出現(xiàn)連接下的數(shù)據(jù)庫(kù)列表。默認(rèn)只有一個(gè)postgres數(shù)據(jù)庫(kù)。要新建一個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)右鍵“連接名”或“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)選擇“新建數(shù)據(jù)庫(kù)”。數(shù)據(jù)庫(kù)名稱、所有者一般選postgres編碼選UTF8模板選template0因?yàn)閠emplate1可能帶有一些額外的對(duì)象復(fù)制過(guò)來(lái)不干凈。如果你平時(shí)用的是 MySQL會(huì)發(fā)現(xiàn) PostgreSQL 的很多概念跟 MySQL 不太一樣。比如PostgreSQL 里有“模式”Schema的概念數(shù)據(jù)庫(kù)Database下是模式模式里才是表。默認(rèn)的public模式就是 MySQL 里的默認(rèn)庫(kù)空間。新建表時(shí)表歸屬在某個(gè)模式底下用的時(shí)候要寫(xiě)成schema名.表名。這些概念理解不到位的話連接上之后會(huì)有點(diǎn)懵但用順手了就回不去了。4.3 連接失敗的常見(jiàn)提示與含義Navicat 連接出錯(cuò)時(shí)錯(cuò)誤信息往往是一大段英文看得人頭皮發(fā)麻。我挑幾個(gè)最常見(jiàn)的說(shuō)一下錯(cuò)誤一server does not listen意思是服務(wù)沒(méi)有在監(jiān)聽(tīng)。檢查幾步服務(wù)是否啟動(dòng)了端口是否填對(duì)了是否遠(yuǎn)程連接遠(yuǎn)程連接要改listen_addresses否則服務(wù)只在本地監(jiān)聽(tīng)。錯(cuò)誤二password authentication failed密碼驗(yàn)簽失敗。密碼填錯(cuò)了或者你連的用戶不是postgres也可能該用戶設(shè)置了不同的密碼。如果是遠(yuǎn)程連接還要確認(rèn)pg_hba.conf允許該 IP 通過(guò)密碼方式認(rèn)證。錯(cuò)誤三no pg_hba.conf entry for host ...服務(wù)端根本沒(méi)有把你這個(gè) IP 放進(jìn)白名單。去pg_hba.conf添加一條規(guī)則比如host all all 0.0.0.0/0 scram-sha-256這么寫(xiě)表示允許所有 IP 通過(guò)密碼認(rèn)證訪問(wèn)所有數(shù)據(jù)庫(kù)僅限測(cè)試環(huán)境生產(chǎn)環(huán)境建議指定客戶端 IP 段。錯(cuò)誤四database does not exist填的數(shù)據(jù)庫(kù)名不存在。要么先創(chuàng)建要么連接時(shí)留空。4.4 Navicat 與 pgAdmin 的選擇很多人裝了官方自帶的 pgAdmin但還是習(xí)慣用 Navicat因?yàn)榻缑婧?jiǎn)潔連接管理方便導(dǎo)入導(dǎo)出也更直觀。不過(guò) pgAdmin 完全免費(fèi)Navicat 需要授權(quán)。如果你只是偶爾連一下pgAdmin 夠用如果日常工作頻繁操作多個(gè)庫(kù)Navicat 的體驗(yàn)會(huì)好很多。關(guān)鍵是Navicat 只是客戶端不會(huì)影響數(shù)據(jù)庫(kù)服務(wù)端本身的配置和運(yùn)行。不管用哪個(gè)客戶端最終都是走同樣的 TCP/IP 協(xié)議和認(rèn)證流程。所以千萬(wàn)別在服務(wù)端問(wèn)題上糾結(jié)客戶端選型先把服務(wù)端這一層的網(wǎng)絡(luò)和認(rèn)證打通再說(shuō)。5. 常見(jiàn)問(wèn)題排查與避坑指南5.1 psql 命令找不到很多人裝完后打開(kāi)命令提示符輸入psql提示“不是內(nèi)部或外部命令”。這是因?yàn)榘惭b過(guò)程中雖然裝了命令行工具但沒(méi)有把psql的路徑加入系統(tǒng)環(huán)境變量。默認(rèn)情況下psql 在安裝目錄下的bin目錄里比如C:\Program Files\PostgreSQL\16\bin兩個(gè)解決辦法手動(dòng)把bin目錄加入 PATH 環(huán)境變量右鍵“此電腦” - 屬性 - 高級(jí)系統(tǒng)設(shè)置 - 環(huán)境變量 - Path - 新建把上面的路徑加進(jìn)去。或者每次打開(kāi) SQL Shell 工具它已經(jīng)幫你把路徑配好了不用手動(dòng)處理。我個(gè)人建議把bin加進(jìn) PATH因?yàn)楹竺婺阌胮g_dump做備份、用psql執(zhí)行 SQL 腳本都需要能直接調(diào)命令。5.2 端口被占用的排查思路如果安裝時(shí)提示 5432 端口無(wú)法使用先用前面的 netstat 命令找到占用進(jìn)程的 PID然后在任務(wù)管理器里找到對(duì)應(yīng)進(jìn)程搞清楚是什么程序。常見(jiàn)情況你之前裝過(guò) PostgreSQL舊的實(shí)例還在跑。裝了某些數(shù)據(jù)庫(kù)管理集成環(huán)境自帶了 PostgreSQL。其他應(yīng)用恰好占用了 5432。如果是舊實(shí)例在跑建議直接卸載掉舊版本否則很容易出現(xiàn)混淆。之前我就碰到過(guò)一臺(tái)機(jī)器上裝了 PostgreSQL 12 和 16服務(wù)同時(shí)跑著5432 被老的占著新的只能用 5433。后來(lái)想連老的密碼又忘了折騰了很久才理清楚。5.3 遠(yuǎn)程連接配置的完整步驟本地連接通常沒(méi)問(wèn)題畢竟 localhost 和密碼認(rèn)證都是默認(rèn)支持的。但如果你想在局域網(wǎng)內(nèi)用另一臺(tái)電腦連接這臺(tái)機(jī)器的 PostgreSQL會(huì)發(fā)現(xiàn)問(wèn)題不少。完整配置步驟如下第一步改監(jiān)聽(tīng)地址。打開(kāi)postgresql.conf找到下面這一行#listen_addresses localhost改成listen_addresses *這個(gè)符號(hào)表示監(jiān)聽(tīng)所有網(wǎng)卡上的連接請(qǐng)求。如果你只想允許特定 IP 訪問(wèn)可以寫(xiě)成具體的 IP 列表但一般應(yīng)用場(chǎng)景下用*就夠。第二步改認(rèn)證規(guī)則。打開(kāi)pg_hba.conf在文件末尾追加host all all 192.168.1.0/24 scram-sha-256192.168.1.0/24表示允許這個(gè)網(wǎng)段的客戶端來(lái)連你可以改成自己的局域網(wǎng)網(wǎng)段。第三步重啟服務(wù)。在服務(wù)管理里找到 PostgreSQL 服務(wù)右鍵選擇“重啟”。第四步關(guān)注防火墻。Windows 防火墻默認(rèn)會(huì)攔截外部對(duì) 5432 端口的訪問(wèn)。在“高級(jí)安全 Windows Defender 防火墻”里新建入站規(guī)則放行 TCP 5432 端口。這一步漏掉的話外部怎么都連不上。提示遠(yuǎn)程連接的生產(chǎn)環(huán)境不要用0.0.0.0/0這種全放行的規(guī)則至少在防火墻和pg_hba.conf里限制成具體網(wǎng)段否則數(shù)據(jù)庫(kù)暴露在公網(wǎng)上很容易被惡意掃描攻擊。5.4 密碼與加密方式不匹配PostgreSQL 從 14 版本開(kāi)始默認(rèn)密碼加密方式改成了scram-sha-256。如果你之前用過(guò)舊版本可能習(xí)慣用md5。如果pg_hba.conf里寫(xiě)的是md5而數(shù)據(jù)庫(kù)密碼是以scram-sha-256方式存儲(chǔ)的認(rèn)證就會(huì)失敗。解決辦法就是統(tǒng)一為一種方式。生成pg_hba.conf時(shí)默認(rèn)的scram-sha-256一般不需要改除非有老客戶端不兼容。Navicat 對(duì)scram-sha-256的支持很成熟低版本可能有些問(wèn)題。如果你用了很老版本的 Navicat連接時(shí)提示unsupported frontend protocol之類的錯(cuò)誤大概率是客戶端版本太舊不識(shí)別新的認(rèn)證協(xié)議。解決辦法是升級(jí) Navicat或者暫時(shí)把pg_hba.conf改成md5但需要同時(shí)把那行認(rèn)證方式改為 md5并且密碼得是 md5 格式存儲(chǔ)的比較麻煩。5.5 中文亂碼問(wèn)題中文亂碼多半出在數(shù)據(jù)庫(kù)編碼設(shè)置上。安裝時(shí)選了中文 locale 會(huì)導(dǎo)致某些特殊字符處理方式不同更常見(jiàn)的是在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)沒(méi)選對(duì)編碼。創(chuàng)建數(shù)據(jù)庫(kù)時(shí)把字符集選成UTF8模板選template0基本可以避免絕大多數(shù)亂碼問(wèn)題。如果你已經(jīng)建好數(shù)據(jù)庫(kù)且里面全是中文數(shù)據(jù)這時(shí)候改編碼很麻煩建議在剛創(chuàng)建時(shí)就把編碼定好。另外Navicat 連接時(shí)也可以在連接屬性的“高級(jí)”里設(shè)置編碼為自動(dòng)或UTF-8保證客戶端和服務(wù)端的編碼一致。5.6 忘記超級(jí)用戶密碼怎么辦如果是自己的開(kāi)發(fā)機(jī)把數(shù)據(jù)目錄下的pg_hba.conf臨時(shí)改成local all all trust host all all 127.0.0.1/32 trust然后重啟服務(wù)此時(shí)本機(jī)連接不需要密碼。用 psql 連上后執(zhí)行ALTER USER postgres WITH PASSWORD 新的密碼;改完之后把pg_hba.conf改回原來(lái)的認(rèn)證方式再重啟服務(wù)。這個(gè)操作需要你能進(jìn)去編輯數(shù)據(jù)目錄下的配置文件。如果你是完全托管在云端的數(shù)據(jù)庫(kù)那只能通過(guò)云廠商的控制臺(tái)重置密碼了。6. 安裝后的日常配置建議6.1 設(shè)置 PATH 環(huán)境變量前面提到過(guò)把bin目錄加入環(huán)境變量的好處這里再補(bǔ)充幾個(gè)實(shí)際用法。配好 PATH 后你可以直接在任何目錄下執(zhí)行pg_dump -U postgres -d 數(shù)據(jù)庫(kù)名 -f 備份文件.sql pg_restore -U postgres -d 數(shù)據(jù)庫(kù)名 備份文件.sql psql -U postgres -d 數(shù)據(jù)庫(kù)名 -f 腳本.sql不用每次 cd 到安裝目錄去敲命令省下大量重復(fù)勞動(dòng)。尤其是做定時(shí)備份的時(shí)候腳本里直接寫(xiě)命令名比寫(xiě)全路徑干凈很多。6.2 數(shù)據(jù)備份策略PostgreSQL 不像某些一鍵備份工具那樣有明顯的“背份”按鈕日常開(kāi)發(fā)中用命令行備份就夠了。我常用的備份方式有兩種方式一SQL 格式備份文本文件pg_dump -U postgres -d 數(shù)據(jù)庫(kù)名 -f backup.sql這種格式可讀性好適合小數(shù)據(jù)量和跨版本遷移用 psql 就能恢復(fù)psql -U postgres -d 數(shù)據(jù)庫(kù)名 -f backup.sql方式二自定義格式備份二進(jìn)制pg_dump -U postgres -F c -d 數(shù)據(jù)庫(kù)名 -f backup.dump恢復(fù)時(shí)用 pg_restorepg_restore -U postgres -d 數(shù)據(jù)庫(kù)名 backup.dump后者支持選擇性恢復(fù)、并行恢復(fù)數(shù)據(jù)量大的時(shí)候效率更高。6.3 性能與日志的基本把握不要一上來(lái)就亂調(diào)shared_buffers、work_mem這些參數(shù)。Windows 下 PostgreSQL 的性能瓶頸往往在 IO 和配置不當(dāng)上而不是參數(shù)不夠大。建議保持默認(rèn)先跑一段時(shí)間看日志。日志位置在數(shù)據(jù)目錄的log文件夾里出現(xiàn)問(wèn)題可以按時(shí)間查看。如果確實(shí)要優(yōu)化比如機(jī)器內(nèi)存有 16G可以把shared_buffers調(diào)到 2G 到 4G但要注意 Windows 上 PostgreSQL 的shared_buffers設(shè)置得過(guò)高反而可能引起性能問(wèn)題。沒(méi)有清晰需求時(shí)保持默認(rèn)永遠(yuǎn)是最穩(wěn)的選擇。7. 個(gè)人實(shí)操體會(huì)我在 Windows 上裝 PostgreSQL 的次數(shù)少說(shuō)也有兩位數(shù)了踩過(guò)的坑基本都集中在剛裝完的階段。最大的體會(huì)是安裝本身并不復(fù)雜麻煩的是安裝時(shí)低估了后續(xù)連接配置的重要性。如果你一開(kāi)始就把密碼記清楚、數(shù)據(jù)目錄分盤(pán)存放、端口不沖突、pg_hba.conf 和防火墻提前想好后面所有的連接問(wèn)題起碼少一大半。還有一點(diǎn)PostgreSQL 跟 MySQL 的思路差別挺大尤其是數(shù)據(jù)庫(kù)、模式、表的三層結(jié)構(gòu)初次接觸的人容易在“我應(yīng)該連哪個(gè)庫(kù)”這個(gè)問(wèn)題上懵。我的經(jīng)驗(yàn)是先不要?jiǎng)?chuàng)建一堆數(shù)據(jù)庫(kù)而是就放在postgres庫(kù)里玩等你理解了模式的概念再按業(yè)務(wù)拆庫(kù)拆 schema改動(dòng)成本會(huì)低很多。最后分享一個(gè)小技巧連接 Navicat 的時(shí)候如果你有多個(gè)環(huán)境本地、測(cè)試、生產(chǎn)建議在連接名上加上環(huán)境后綴比如本地PG、測(cè)試PG、生產(chǎn)PG。聽(tīng)起來(lái)很蠢但真的能防止你手滑在生產(chǎn)庫(kù)上執(zhí)行危險(xiǎn)操作。別問(wèn)我怎么知道的。