资讯动态

PostgreSQL安装全攻略:Windows/macOS/Linux/Docker四大平台详解

发布时间:2026/9/20 18:13:13 来源:尧图企业网站定制
1. 安装之前先想清楚这三件事我装过几十次PostgreSQL从Windows到Mac再到各种Linux发行版都踩过一遍发现大多数人一上来就百度“postgresql安装教程”结果卡在半路还得回头查。其实安装本身不复杂真正麻烦的是装完之后连不上、起不来、密码忘了这类问题。所以这篇我直接按平台拆开讲把每个环节的“为什么”也顺手说清楚。先说三个最核心的决定它们直接影响后面好不好用第一是版本选择。PostgreSQL官方每一年左右发一个大版本目前主流生产环境跑的是16和1717在2024年发布性能、vacuum、wal等方面都有明显改进。如果你只是学习直接上最新稳定版如果是生产环境建议选16这个相对成熟的大版本。别去碰beta版那玩意是给勇士准备的。第二是平台差异。Windows下安装最简单几乎是“下一步下一步”点完就能用但坑藏在服务账户、环境变量和防火墙里。macOS有homebrew这个懒人神器Linux则要面对不同发行版包管理器带来的路径不一致问题。你得先想清楚自己的使用场景是本地开发还是服务器部署这两者的安装方式完全不同千万别混着来。第三是安装方式。如果只是自己电脑上做开发测试推荐用安装包或包管理器如果想要一个干净可控的环境或者以后要考虑部署到服务器Docker反而是更省心的选择。很多人一听Docker就头大但PostgreSQL官方镜像做得非常完善一条命令就能跑起来还能顺便解决跨版本切换的问题。我后面会单独把Docker方式讲透。这篇文章我会从Windows、macOS、Linux、Docker四条路线分别讲再把安装后的初始化配置、常见坑整理成速查表。不管你是第一次装PostgreSQL的纯新手还是准备从MySQL转过来的老手照着做基本不会翻车。2. 核心概念先打个底客户端、服务端和那些容易混淆的组件2.1 你装的到底是个什么东西很多人装完PostgreSQL之后压根分不清自己电脑上多了哪些东西。第一次在Windows上完成安装后你其实同时装了三个角色不同的组件一个是数据库服务端也就是真正干活的进程它在Windows下叫作postgresql-x64-17这样的服务在Linux下是postgres进程。数据文件、日志、配置全部由它管理你所有的表、索引、数据都归它管。它开机自启默默在5432端口上监听这个端口是PostgreSQL的默认端口和MySQL的3306、Redis的6379一样属于行内默认常识。另一个是命令行客户端最核心的就是psql。这个工具虽然长得朴素但它是所有管理操作的基础类似Oracle的sqlplus。你后面做备份恢复、执行脚本、查看运行状态全得靠它。很多教程让新手先去装Navicat或者pgAdmin这种图形界面工具我倒建议先学会psql因为图形界面隐藏了太多底层细节出了问题你根本不知道去哪里看日志。还有一类是可选的图形管理工具最常见的是官方自带的pgAdmin。这东西发展到第4版以后已经比较成熟界面虽然不算好看但功能全面。我个人的建议是pgAdmin可作为辅助工具但生产环境管理还是以psql和SQL脚本为主这样操作可审计、可追溯出了问题知道怎么排查。2.2 配置文件和数据目录这两个你必须知道PostgreSQL和MySQL在文件结构上一个很大的区别是它的配置文件、数据文件都集中在同一个数据目录下。默认情况下Windows是C:\Program Files\PostgreSQL\17\dataLinux是/var/lib/postgresql/17/mainmacOS如果用homebrew装路径是/opt/homebrew/var/postgresql17。在这个目录下你最先要认识的三个文件postgresql.conf主配置。端口、内存参数、日志策略、wal归档啥的全在这。pg_hba.conf访问控制白名单。你想让别的机器连上来、想改密码认证方式全得改它。pg_ident.conf用户名映射。一般用不到但偶尔做映射时会碰上。很多新手一上来就改postgresql.conf把shared_buffers调得老高结果数据库直接起不来。我建议安装阶段先别动这些参数等跑起来、数据备份好了再根据机器配置和实际负载慢慢调。2.3 超级用户postgres和那串密码安装过程中会让你设置一个数据库超级用户的密码这个超级用户默认叫postgres。注意这个用户和操作系统的用户是两个概念你在Windows下用postgres登系统和你用postgres身份去连数据库是两条完全独立的路径。Linux下同理很多人混淆了这一点以为改了系统用户的密码就是改了数据库密码结果折腾半天。密码这件事我多说一句一定要记住或者一定要把密码存在密码管理器里。PostgreSQL的密码忘了不像MySQL那样可以skip-grant-tables轻松绕过重置密码的方法绕来绕去对新手极不友好。我后面会在常见问题里写一个重置思路但最好的办法就是别忘。3. Windows平台安装全流程拆解3.1 下载安装包怎么选才不出错Windows下安装PostgreSQL首选的是EDBEnterpriseDB出品的安装包也就是大家常说的“PostgreSQL中文官网下载”那个。它的好处是集成度高服务、psql、pgAdmin一把梭全给你装好免去了自己配环境变量、初始化数据目录这些繁琐步骤社区版免费不用担心授权问题。下载的时候注意两个细节版本号要选对。目前稳定版是17.x如果你以后要接一些老项目可能还要装14或15版本不同数据目录格式也不同不能混用。另一个是位数现在基本都用64位版32位版只在老机器上才会遇到直接忽略。下载途径我推荐两个一个是官方https://www.postgresql.org/download/windows/进去之后点那个“Download the installer”的链接它会自动跳到EDB的页面。另一个是EDB官网直接下路径是https://www.enterprisedb.com/downloads/postgres-postgresql-downloads这里可以看到所有历史版本比在官方主站翻来翻去快得多。注意下载时如果遇到下载速度极慢的情况别硬等。EDB的安装包走的是自家CDN有时候在国内访问确实慢。可以考虑用镜像站或者下载工具多线程下载。但无论如何去官网下载永远比去所谓“绿色软件站”下载安全那些第三方打包的版本没准就让你吃个木马全家桶。3.2 安装界面里的每个选项到底该不该改下载完双击运行接下来是一路Next但有几个关键的界面我建议你停下来认真看看。第一个是选择组件界面。默认会勾选PostgreSQL Server、pgAdmin 4、Stack Builder、Command Line Tools。pgAdmin如果不想要可以取消勾选省几百MB空间Stack Builder完全不用装它只是引导你装一些附加组件基本用不上Command Line Tools建议保留因为你后面极有可能需要pg_dump、pg_restore、psql这些命令行工具。命令行工具不装你连环境变量都没得配。第二个是数据目录选择。默认是C:\Program Files\PostgreSQL\17\data。这里我建议改成非系统盘的目录比如D:\PostgreSQL\17\data。理由很简单系统盘万一崩溃重装数据目录能保住。虽然Windows不像Linux那样对路径权限那么敏感但提前分盘放数据是数据库运维的基本素养。没有第二个盘那就算了默认位置也行记得定期备份。第三个是超级用户密码。这个就是上面说的postgres用户的密码设一个你能记住但又不容易被别人猜到的。别用123456这种神仙密码。第四个是端口号。默认5432除非你机器已经被其他PostgreSQL实例占了否则别改。端口这东西默认值在生态里有一堆配置文件、连接串隐含依赖你改了端口等于给自己以后埋雷。第五个是初始化集群的locale和编码。默认值通常是[Default locale]。这里重点来了我建议在Windows上把它改成C或者English_United States.1252编码保持UTF8。为什么因为默认 locale 在Windows下容易带来排序和索引问题特别是在做中文全文检索或复杂排序时坑特别深。这不是说默认不行而是对开发者更友好的是保持简单的locale把复杂支持交给应用层。3.3 环境变量配置与验证安装安装完成后psql这个命令默认是不在全局PATH里的。如果你直接在cmd里敲psql大概率会提示找不到命令。解决办法一个把psql所在目录加入PATH。以PG17为例打开“系统属性 - 环境变量”在系统变量PATH里追加一行C:\Program Files\PostgreSQL\17\bin如果改了数据目录bin目录还是在这个默认位置不受影响。配置完之后重新打开一个cmd窗口验证一下psql --version如果有版本信息输出说明命令行工具OK。然后试着连一下数据库psql -U postgres -h localhost -p 5432输入你安装时设置的密码如果能看到类似postgres#的提示符说明服务端也正常。Windows下还有个快速验证服务是否跑起来的方法打开服务管理器WinR输入services.msc找到名字叫postgresql-x64-17版本号可能不同的服务看状态是否为“正在运行”。以后如果你哪天连不上了第一时间来这看服务挂了没有。实操心得Windows下千万别用管理员身份运行psql除非你有明确的权限调整需求。以管理员身份运行某些PSQL命令时会导致之后的文件权限错乱比如日志目录、备份目录在某些情况下会以管理员权限创建之后普通权限反而写不进去。4. macOS和Linux下安装的差异化方案4.1 macOS用Homebrew是最省心的路macOS下装PostgreSQL我首推Homebrew原因是它把编译、依赖、服务注册全都封装好了你几乎不用手动调什么东西。步骤很简单安装包管理的话先从官网装Homebrew不会的在终端里执行这行/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)然后搜一下有什么版本brew search postgresql你会看到postgresql14、postgresql15、postgresql16、postgresql17这些版本。Homebrew默认安装的通常是最新大版本比如17。安装命令brew install postgresql17这里有个非常重要的细节Homebrew安装的PostgreSQL默认是不自动启动的而且不像Windows安装包那样会顺手初始化一个数据目录。你得手动做两件事。第一件是初始化数据目录/opt/homebrew/opt/postgresql17/bin/initdb --localeC --encodingUTF8 /opt/homebrew/var/postgresql17第二件是启动服务brew services start postgresql17brew services这条命令会把PostgreSQL注册成后台服务开机自启。如果你只是临时用一次不想注册服务直接跑pg_ctl -D /opt/homebrew/var/postgresql17 start也行。macOS下连数据库有一个“福利”或者说“坑”默认情况下Homebrew初始化出来的数据库超级用户是你当前系统用户名而不是postgres。比如你的macOS账户叫zhangsan那psql默认连接的用户就是zhangsan。第一次用的时候别懵直接敲psql进到的库登录身份就是系统当前用户。这算是macOS本地开发时比较方便的做法但如果你习惯了Windows和Linux的postgres用户这里要适应一下。4.2 Linux各发行版的包管理与初始化细节Linux下安装最大的问题是发行版太多每条命令都不一样。我挑三个最常见的场景讲基本覆盖90%以上情况。对于Debian/Ubuntu系直接用apt装不过这里的版本通常不是最新比如Ubuntu 22.04的默认源里可能是14。想装新版本需要先添加PostgreSQL官方的APT源。以Ubuntu 22.04 PostgreSQL 17为例sudo apt update sudo apt install -y postgresql-common sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y sudo apt install postgresql-17装完之后服务默认是自动启动的数据目录在/var/lib/postgresql/17/main。Ubuntu系一个非常关键的点是默认情况下它创建了一个名为postgres的系统用户而数据库超级用户也恰好叫postgres。你用psql -U postgres连接前得先切换到postgres系统用户或者直接用sudo -u postgres psql来执行。这是新手常出错的地方——你以为你装了PostgreSQL结果根本连不上去原因就是身份没切换对。对于CentOS/RHEL系用dnf或yum但默认源里通常没有PostgreSQL或者版本太旧。推荐的做法是安装PostgreSQL官方提供的yum源sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo dnf install -y postgresql17-server sudo /usr/pgsql-17/bin/postgresql-17-setup initdb sudo systemctl enable --now postgresql-17重点来了CentOS/RHEL系的PostgreSQL安装后默认数据目录在/var/lib/pgsql/17/data但官方rpm包的执行文件在/usr/pgsql-17/bin/这个路径不在默认PATH里。你要用psql、pg_dump这些工具要么加进PATH要么直接用绝对路径。还有一点RHEL系默认启用SELinux如果之后跨机器访问出问题先排查SELinux再排查防火墙顺序别反了。至于arch系如果你在用arch那不用我教你也知道用pacman -S postgresql。装完手动执行initdb然后systemctl start postgresql即可。4.3 Linux下容易被忽略的权限与路径问题我发现很多教程都不会强调Linux版PostgreSQL的一个特殊之处不要用root用户去跑initdb和启动服务。PostgreSQL出于安全考虑禁止以root身份运行服务端进程。RPM系和Debian系的包管理机制都会自动创建postgres用户并让服务以该用户运行但如果你是从源码编译安装或者手动初始化数据目录就很容易踩这个雷。解决办法很简单所有数据库相关操作都切到postgres用户下做。用sudo -i -u postgres切身份然后在这个shell里执行initdb、psql、pg_ctl等命令。还有一个路径问题如果你手动指定数据目录比如放在/data/pgdata那么这个目录的属主和属组必须改成postgres否则服务一启动就会因为权限不足直接挂掉sudo mkdir -p /data/pgdata sudo chown -R postgres:postgres /data/pgdata我见过好几个把数据目录放在/home下的案例然后数据库起不来日志报的permission denied。查了一遍全是/home目录默认权限700导致postgres用户进不去。所以路径一定要选对权限一定要给对。5. Docker方式一条命令跑起来还能秒切版本5.1 为什么要推荐Docker方式如果仅仅是在本地电脑上做开发、写demo、跑一个小型应用我个人其实更推荐Docker方式而不是往系统里装一个完整的PostgreSQL服务。原因有四条第一干净。卸载不干净是Windows安装版的一大痛点注册表残留、服务残留、数据目录残留搞不好还影响下次安装。Docker里玩坏了直接docker rm -f一把梭删得干干净净。第二版本切换极方便。今天用PG16测东西明天想试试PG17的新特性一条docker run换个镜像tag就行。如果是本机安装版两个大版本共存是很麻烦的事情端口冲突、数据目录冲突、服务冲突全是坑。第三接近生产环境。生产环境的数据库绝大多数跑在Linux上Docker容器本质上就是Linux。在容器里练手pg_hba.conf、wal配置、备份恢复跟在生产环境的感觉是高度一致的。Windows本机版的很多行为和生产环境差异很大练完了到线上还是会懵。第四不污染开发机。跑起来是数据库用完了关掉CPU、内存该释放就释放不占系统服务名额。当然也有不适合用Docker的场景比如你需要在本地做非常底层的性能压测、或者物理机上还需要配合某个GUI工具做复杂的存储管理这时装本机版更合适。但这类场景属于少数大多数人用Docker省心得多。5.2 最省心的启动命令与参数解释前提是你已经装好了Docker Desktop。然后一行命令PostgreSQL就能跑起来docker run -d \ --name pg17 \ -p 5432:5432 \ -e POSTGRES_USERpostgres \ -e POSTGRES_PASSWORDmysecretpassword \ -e POSTGRES_DBmydb \ -v pgdata:/var/lib/postgresql/data \ postgres:17拆开解释一下每个参数的含义-d后台运行。--name pg17给容器起个名字方便之后start/stop/rm。-p 5432:5432宿主机5432端口映射到容器的5432端口。如果你本机已经有一个PostgreSQL占了5432很多Windows安装版就是这么干的这里改成-p 5433:5432然后用5433端口去连容器里依然是5432不冲突。-e POSTGRES_USERpostgres设置超级用户名。-e POSTGRES_PASSWORDmysecretpassword设置超级用户密码。注意这个环境变量只在首次初始化数据目录时生效如果你挂载的卷里已经初始化过了后面改密码要进容器里用ALTER USER。-e POSTGRES_DBmydb自动创建一个默认数据库。不设也没关系默认会创建一个和POSTGRES_USER同名的数据库。-v pgdata:/var/lib/postgresql/data把容器里的数据目录挂载到Docker卷中。这个极其关键。没有这个-v容器删了数据就全没了。本地开发图方便也可以直接映射到宿主机目录比如-v $HOME/pgdata:/var/lib/postgresql/data。然后验证一下docker ps docker exec -it pg17 psql -U postgres看到postgres#就成功了。Docker方式下无需自己初始化镜像的entrypoint脚本会自动处理initdb并读取上述环境变量完成初始配置。5.3 Docker安装时最容易忽略的时区与日志问题Docker容器默认时区是UTC数据库的now()函数返回的时间会和北京时间差8个小时。这个对纯本地开发影响不大但如果你的应用往库里写带时间戳的数据然后发现比预期时间少了8小时不用怀疑就是时区问题。解决办法很直接在run命令里加一个时区环境变量-e TZAsia/Shanghai或者在容器启动后执行ALTER DATABASE mydb SET timezone TO Asia/Shanghai;第二个常见问题是用docker logs看不到SQL查询日志。PostgreSQL默认只记录错误和启动信息不记录正常SQL。对开发调试来说你可能想看看应用到底执行了什么SQL这时可以临时打开日志docker exec -it pg17 psql -U postgres -c ALTER SYSTEM SET log_statement all; docker restart pg17log_statement all会让所有执行的SQL都打到日志里然后在宿主机上执行docker logs pg17就能看到。这个配置生产环境千万别开性能和日志量都扛不住仅限调试。6. 装完必须做的初始化配置与验证清单6.1 修改密码策略与创建普通用户无论你用哪种方式装好PostgreSQL超级用户postgres都只应作为管理用途日常业务操作应该用普通用户。这里有两条安全基线一是postgres用户密码必须强密码二是禁止应用直接使用postgres用户连接。第一次登录后先确认密码强度。Windows和Linux安装版在安装时已经设置过密码Docker方式通常也在环境变量里设过。如果你觉得密码不够强直接改ALTER USER postgres WITH PASSWORD 新密码;然后创建一个业务用户和一个业务数据库CREATE USER myapp WITH PASSWORD apppassword; CREATE DATABASE myappdb OWNER myapp;这里有个小细节CREATE DATABASE是不能在事务块里执行的所以如果你用的是psql直接执行没问题如果你用pgAdmin的查询工具里面不小心写了BEGIN; CREATE DATABASE ...; COMMIT;会报错。遇到这种情况不用慌拆出来单独执行即可。PostgreSQL的权限体系和MySQL差别很大CREATE DATABASE执行完之后myapp用户是该数据库的owner但并不意味着它对publicschema下的所有表都有权限。在PG15之后默认情况下新建的数据库对public schema的限制更严格了你执行一些建表操作时可能会遇到permission denied。遇到这个问题要么在创建完表之后给用户授权GRANT ALL PRIVILEGES ON DATABASE myappdb TO myapp; GRANT ALL ON SCHEMA public TO myapp;要么直接把某个schema的使用权限收回来再给出去。这个属于权限体系的基础操作新手容易在这里被卡住很久以为是安装没成功。6.2 查看日志、端口监听与pg_isready装完数据库之后怎么确认它是真正健康的我一般按顺序做三个检查。第一个用pg_isready。这个工具是PostgreSQL自带的轻量检查程序它做的唯一一件事就是尝试连接目标端口然后返回数据库是否在接受连接pg_isready -h localhost -p 5432输出localhost:5432 - accepting connections就说明服务正常。第二个看日志。日志是PostgreSQL排错的第一手信息源。Windows版日志在数据目录下的log文件夹里Linux版通常在/var/log/postgresql/下Docker方式直接docker logs pg17。日志里最关键的几类信息启动时的FATAL错误、连接认证失败、数据库崩溃恢复记录。如果数据库起不来第一个动作永远是看日志而不是瞎改配置。第三个看端口监听情况。Linux/macOS下用ss -lntp | grep 5432Windows下用netstat -ano | findstr 5432。如果你本机有多个PostgreSQL实例抢占5432端口这一步能最快定位问题。6.3 pg_hba.conf最小必要配置pg_hba.conf是PostgreSQL的访问控制核心文件它的全称是PostgreSQL Host-Based Authentication翻译过来就是“基于主机地址的认证”。文件里每一行代表一条认证规则从上到下依次匹配匹配到就停止不再往下执行。安装完成后默认配置在Linux上通常只允许本地连接Windows版默认配置相对宽松一些。如果你只是本机使用默认配置基本不用改。如果要让别人或别的机器访问你需要了解两种常见的认证方式一是scram-sha-256这是PG10之后默认的加密密码认证方式安全性最高推荐用于远程连接。改成这个之后你需要在连接串里指定密码。二是trust这个就是完全信任只要IP匹配谁连上来都是该用户本人不需要密码。这种配置只能用于内网开发环境千万不能暴露到公网。我经常看到一些人图省事把所有连接都设成trust然后放到云服务器上用不了几天数据库就会被入侵或锁死。典型的远程访问最小配置是在pg_hba.conf末尾追加host all all 192.168.1.0/24 scram-sha-256改完之后需要重载配置才生效pg_ctl reload -D 数据目录或者psql里执行SELECT pg_reload_conf();注意reload是平滑重载不需要重启服务已在运行的连接不会断。修改了pg_hba.conf但没reload就去测试大概率会一脸蒙圈然后怀疑自己改错了文件。6.4 防火墙与远程访问的联动配置远程访问除了数据库层要放行操作系统防火墙也得放行5432端口否则外部连接请求根本到不了PostgreSQL。这里说一个常见的坑你在云服务器上开了安全组规则也在pg_hba.conf里写了允许远程网段但忘了在系统防火墙里放行端口结果外面连不上。很多时候不是数据库配置错了是请求压根没进来。Debian/Ubuntu上放行方法sudo ufw allow 5432/tcpCentOS/RHEL上放行方法sudo firewall-cmd --permanent --add-port5432/tcp sudo firewall-cmd --reloadWindows上EDB安装包在安装过程中会弹出Windows防火墙的提示一般点允许即可。如果当时没点后面就得自己去“高级安全Windows Defender防火墙”里手动添加入站规则允许TCP端口5432。操作建议如果你是在云服务器上装PostgreSQL最稳妥的做法是——安全组只对可信IP段开放5432数据库绑定内网IP或回环地址不要让公网IP直接裸奔。很多云厂商的安全组默认规则是“允许所有来源”你创建规则时一定要选“指定IP”只添加自己办公室或家宽的公网IP。配置完成后用另一个网络的机器测一下连接确认认证与防火墙都生效。7. 常见问题与排查技巧实录7.1 服务启动失败日志永远排第一Windows下最常见的报错是打开服务管理器发现postgresql-x64-17状态是已停止手动点启动就弹出“本地计算机上的postgresql-x64-17服务启动后停止”。这种提示基本等于什么都没说真正的原因必须看日志。Windows下打开事件查看器WinR输入eventvwr.msc在Windows日志-应用程序里面找来源为PostgreSQL的Information或Error条目这里会写明具体的错误原因。常见原因有这么几类数据目录权限不对postgres服务账户无法访问。postgresql.conf里配置了错误的参数比如shared_buffers设得过大。端口被占用服务绑定5432失败。数据目录损坏启动时WAL重放失败。Linux也一样直接看journalctl或日志文件journalctl -u postgresql17-main --no-pager -n 50总结一句话遇到启动失败别瞎猜先看日志把错误信息贴进搜索引擎基本都能找到答案。7.2 忘记密码不是死刑但很麻烦PostgreSQL忘了超级用户密码虽然理论上有办法重置但确实比MySQL麻烦。因为PG默认不允许你在免认证模式下操作必须通过单用户模式修改密码。如果你用的是Linux重置步骤比你想象的要简单先停掉服务sudo systemctl stop postgresql17-main版本不同名字不同。以postgres用户身份进入单用户模式sudo -u postgres /usr/lib/postgresql/17/bin/postgres --single -D /var/lib/postgresql/17/main注意是postgres二进制不是psql。在单用户模式下执行ALTER USER postgres PASSWORD newpassword;然后按CtrlD退出。重启服务sudo systemctl start postgresql17-main。Windows下想进单用户模式比较麻烦因为服务账户和文件权限的隔离做得比较严格实际操作起来成功率不高。最靠谱的办法是如果之前配置过trust认证临时把pg_hba.conf里的认证方式改成trust重启服务后免密登录进去改密码改完再改回原来的认证方式。不过这个操作只对本地连接有效远程连接的方式改起来更麻烦。所以密码问题最好的方案永远是别忘或者把密码记录在安全的地方。7.3 Navicat/pgAdmin连不上认证方式与驱动问题很多人在命令行psql里连得好好的换成Navicat或者pgAdmin却连不上主要就三个原因第一密码认证方式不匹配。某些图形工具用的驱动版本太老只支持md5认证而PostgreSQL新版默认用scram-sha-256。解决办法是在pg_hba.conf里把该客户端的认证方式改为md5注意这个兼容性已经不太建议用于生产环境。更推荐的解法是升级图形工具的驱动版本现在Navicat和DBeaver都已经支持scram认证。第二端口没填对。特别是你用Docker方式的时候容器内部是5432宿主机映射到5433你填连接信息的时候必须填宿主机的映射端口5433而不是5432。我见过太多人在这里反复折腾。第三pgAdmin默认要求你设置一个主密码来保护本地保存的连接凭据这个主密码和数据库密码是两回事。如果一直提示主密码不对最简单的办法是删掉pgAdmin的本地配置目录重新初始化Windows下是C:\Users\你的用户名\AppData\Roaming\pgAdmin删掉后重新打开pgAdmin会要求重新设置主密码。7.4 64位vs 32位、18.1这种版本号到底怎么理解有读者在下载页面看到PostgreSQL 18.1又看到别人说的16和17就开始困惑。这里统一解释一下PostgreSQL大版本号演进是15、16、17这样递增的每隔一年左右出一个新的大版本。所谓18.1是18这个未来大版本的第一个Minor Release属于beta或RC阶段软件。普通用户和生产环境都不建议使用大版本号带小数的预发布版本除非你是极客发烧友专门想尝鲜。官方稳定版的选择策略偶数版本通常是社区口口相传的“稳”版本比如14和16都在生产环境里被大量使用。如果你不想折腾就在偶数大版本里选最新的Minor Release比如16.6。如果你的代码或应用依赖某个老版本比如某些扩展只支持14或15那老老实实用对应版本别强行升级。每个版本的数据目录格式和系统表结构在跨大版本时不兼容升级数据库大版本不是替换安装包那么简单需要走pg_upgrade或逻辑备份恢复的流程。7.5 Windows下装pgvector失败不是你的问题顺着热搜词再提一嘴pgvector。这个扩展在Windows平台上的安装确实比Linux麻烦得多。postgresql官方其实提供了一些扩展的Windows预编译包但pgvector在Windows上要么用Visual Studio自己编译要么依赖EDB的Application Stack Builder提供经常有人卡在这里很久。如果你在Windows下急着用pgvector做向量检索我的建议是直接用Docker方式跑一个PostgreSQL加pgvector的镜像这类镜像在Docker Hub上已经很成熟比如pgvector/pgvector:pg17拉下来直接用省掉编译的苦。等真到了部署阶段Linux服务器上安装pgvector也就是执行几条编译命令而已比Windows省心十倍。8. 不同安装方式速查对比表为了让你能快速判断自己该选哪种方式我整理了一张表格把四个平台/方式的差异放在一起对比维度Windows安装包macOS HomebrewLinux包管理器Docker方式安装难度最低点鼠标即可低一条命令中需处理仓库和权限中需理解镜像和卷概念数据目录默认位置C:\Program Files\PostgreSQL\17\data/opt/homebrew/var/postgresql17/var/lib/postgresql/17/main容器内/var/lib/postgresql/data服务管理Windows服务brew servicessystemctldocker start/stop版本切换麻烦多实例冲突一般用版本号管理一般最方便换镜像tag即可卸载干净程度较差有注册表残留好brew uninstall即可较好最好rm容器和卷即可生产环境契合度低中高高说句实在话。如果你只是在自己笔记本上搭个环境练手Windows安装包或者Docker都行如果你以后要面向Linux服务器部署Docker方式玩一遍会让你后面少踩很多部署的坑如果你在macOS上做日常开发Homebrew那套配上psql的体验最顺滑。9. 装完数据库后的第一周建议你做这几件事数据库装好只是第一步真正巩固掌握的是装完之后的练习。我每次新环境搭好都会按这个顺序跑一遍你也可以照着做第一创建三张带主外键关联的业务表随便什么主题都行比如订单、用户、商品这种经典组合。建表过程中感受一下PostgreSQL的SERIAL或GENERATED AS IDENTITY主键自增方式跟MySQL的自增差异一下就出来了。第二把pgAdmin或者命令行里的\dt、\d 表名这些元命令用熟。PostgreSQL的psql里有很多方便的元命令\l列出数据库、\du列出用户、\conninfo查看当前连接信息这些工具用好了比图形界面还高效。第三在机器上导出和恢复一次你的数据。用pg_dump和pg_restore分别做一次逻辑备份恢复。很多人在删库跑路之后才发现自己没验证过备份这个流程提前演练一遍出问题时不至于慌了神。第四看一下pg_stat_activity这个视图SELECT pid, usename, application_name, client_addr, state, query FROM pg_stat_activity;这条SQL能帮你理解当前有哪些连接、谁在跑什么、有没有锁等待。后面做故障排查和性能优化都要频繁用到这个视图。10. 最后分享一点安装之外的感悟PostgreSQL的安装本身真的不难难的是你对这堆装完的东西有没有建立起一个正确的心理模型。我从MySQL转过来的时候最大的不习惯是路径不统一、权限体系复杂、配置文件分散在不同位置。但用了一段时间之后才意识到这些“不习惯”恰恰是PostgreSQL在设计上更规范、更安全的表现。装完数据库之后的头几天你可能会遇到各种预料之外的连接报错、权限报错、认证报错。不要沮丧也不要急着装回MySQL。绝大多数问题都是配置层面的小问题而不是数据库本身有什么大毛病。把日志打开、把配置文件的注释读一遍问题的答案往往就在里面。我个人还有一个建议无论你在哪个平台安装的都用Docker在本机额外拉一个PostgreSQL容器放着不启动也行。一方面当本机安装版遇到需要跨版本测试时Docker容器能帮你快速切换另一方面当你需要给别人提供数据库测试环境时一条docker run命令搞定不用让对方在自己的机器上折腾安装。你在安装这件事上踩过的坑终究都会变成你带别人入坑时的经验值。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价