作为一个纯 Windows 开发者(不用 WSL,不用 Docker),去年我想给自己的博客项目配个正经数据库。听说 PostgreSQL 比 SQLite 强,比 MySQL “更严谨”,那就试试吧。
结果光是安装就让我重装了三次。
第一次安装:官网下载,但卡在“创建超级用户”
我去了 www.postgresql.org/download/wi…
点进去,它推荐用 EnterpriseDB 安装包(也就是 www.enterprisedb.com/downloads/p…)。
下载的是个 .exe 文件,双击运行,图形化安装界面,看着挺友好。
一路下一步,直到这一步:
Password for superuser 'postgres':
(请输入超级用户 postgres 的密码)
我随便输了个 123456,继续。
然后它开始安装,进度条走完,最后弹出一个框:
Failed to load SQL modules into the database cluster
我傻了。重试?不行。卸载重装?还是这个错。
后来才知道——Windows 防火墙或杀毒软件(比如 360、Defender)可能阻止了 PostgreSQL 初始化数据库。
✅ 正确做法(亲测有效):
- 关闭所有杀毒软件(临时禁用 Windows Defender 实时保护)
- 右键安装程序 → “以管理员身份运行”
- 密码别太简单(我后来改成
Postgres@2024,带大小写+符号) - 安装路径不要有中文或空格(比如别装在
D:\我的软件)
第二次安装,成功了!
启动 pgAdmin:终于看到图形界面
安装完成后,开始菜单里多了两个东西:
- SQL Shell (psql) → 命令行
- pgAdmin 4 → 图形管理工具(浏览器打开)
我点了 pgAdmin 4,自动弹出浏览器,地址是 http://127.0.0.1:5050。
第一次登录要设 pgAdmin 的登录账号(不是数据库账号!),我又输了个邮箱和密码。
进去后,左边有个 Servers → PostgreSQL 16,点开要输刚才设的 数据库超级用户密码(就是安装时那个 postgres 的密码)。
输对了,就能看到数据库列表。
💡 提醒:pgAdmin 账号 ≠ 数据库账号,很多人在这里混淆。
用 psql 命令行:黑窗口其实挺好用
虽然 pgAdmin 很直观,但我还是想试试命令行——因为部署时服务器上只有命令行。
在开始菜单搜 “SQL Shell (psql)” ,点开,会弹出几个配置:
text
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Password for user postgres:
全部默认回车,最后输密码(就是安装时设的那个)。
成功进入后,看到:
text
postgres=#
这时候就可以敲 SQL 了!
常用命令(注意前面是反斜杠 ``,不是 /):
表格
| 命令 | 作用 |
|---|---|
\l | 列出所有数据库 |
\c xuebi | 连接到叫 xuebi 的数据库 |
\dt | 显示当前数据库所有表 |
\d users | 查看 users 表结构 |
\q | 退出 |
⚠️ 注意:这些命令不能加分号!
\l;是错的,必须\l
建数据库和表:踩了字段命名的坑
我想建个自己的数据库:
sql
CREATE DATABASE xuebi WITH OWNER postgres ENCODING 'UTF8';
然后 \c xuebi 切过去。
接着建 users 表:
sql
CREATE TABLE users (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
没问题。
但建 posts 表时,我写了:
sql
CREATE TABLE posts (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
userId BIGINT NOT NULL, -- 这里埋雷了!
FOREIGN KEY (userId) REFERENCES users(id)
);
插入数据时出错:
sql
INSERT INTO posts (title, content, userId) VALUES ('测试', '内容', 1);
报错:
text
ERROR: column "userid" does not exist
为什么?因为 PostgreSQL 在没加引号的情况下,会把字段名自动转成小写!
你写 userId,它存成 userid;但插入时又按 userId 找,找不到。
✅ 解决方案(二选一):
方案一(推荐):全用下划线命名(Windows 开发者最省心)
sql
-- 建表
CREATE TABLE posts (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
user_id BIGINT NOT NULL, -- 全小写 + 下划线
FOREIGN KEY (user_id) REFERENCES users(id)
);
-- 插入
INSERT INTO posts (title, content, user_id) VALUES ('测试', '内容', 1);
方案二:加双引号保留大小写(麻烦,但能匹配前端字段)
sql
-- 建表
CREATE TABLE posts (
"userId" BIGINT NOT NULL, -- 必须加引号
FOREIGN KEY ("userId") REFERENCES users(id)
);
-- 插入也得加引号(其实在 INSERT 里不用,但 SELECT 要)
SELECT "userId" FROM posts;
🙅♂️ 我的建议:在 Windows + Node.js 项目里,直接用
user_id。前端拿到 JSON 后,用 Axios 的transformResponse或 TypeScript 类型映射转成userId就行,数据库层保持简洁。
连接数据库:Node.js 里怎么配?
我在项目里装了 pg(node-postgres):
bash
npm install pg
然后写连接代码:
js
const { Client } = require('pg');
const client = new Client({
host: 'localhost',
port: 5432,
user: 'postgres',
password: '你安装时设的密码',
database: 'xuebi'
});
client.connect();
第一次跑,报错:
text
password authentication failed for user "postgres"
查了半天,发现是 pg_hba.conf 配置问题。但作为新手,我不敢乱改配置文件。
✅ 最简单的办法:
在 pgAdmin 里:
- 右键你的数据库 → Properties
- 看 Connection 标签页,确认端口是 5432
- 确保你用的密码就是安装时设的那个
或者,直接在 psql 里改密码:
sql
ALTER USER postgres PASSWORD '新密码';
总结:Windows 上用 PostgreSQL 的真心话
- ✅ 用 EnterpriseDB 安装包,别自己编译
- ✅ 关杀毒软件 + 管理员运行,避免初始化失败
- ✅ 字段名全用小写+下划线(
user_id),省掉引号烦恼 - ✅ pgAdmin 看结构,psql 跑脚本,两者配合
- ❌ 别信网上那些
sudo service postgresql start—— 这是 Linux 命令,Windows 用不了
现在,我的博客后台稳稳跑在 PostgreSQL 上。虽然只是本地开发,但每次 \dt 看到那几张表,就觉得——数据是真的,不是内存里的幻觉。
如果你也在 Windows 上起步,别怕。装一次,错几次,改几次,就成了。
加油,兄弟。