连接数据库与创建第一个数据库
本教程共 50 篇 · 第 5 篇 · 更新于 2026-07-31 · 约 6 分钟阅读
5. 连接数据库与创建第一个数据库
本节目标:学完你能自己建一个数据库,并用 psql 连进去、在库之间自由切换。
装好 Postgres 后,里面其实已经有几个系统库了。但那不是你的地盘,我们要建一个自己的库来练手。
先看看已有哪些库
用 psql 连上默认的 postgres 库,列出全部数据库:
psql -U postgres -d postgres
\l
你会看到类似:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres | postgres | UTF8 | C | C |
template0 | postgres | UTF8 | C | C | =c/postgres
template1 | postgres | UTF8 | C | C | =c/postgres
(3 rows)
template0 和 template1 是系统模板库。新建库时,默认是以 template1 为模板复制出来的。你暂时不用动它们。
Note为什么新库要从模板复制?因为建库本质是「照着模板库,复制一份空架子」。模板库里有什么,新库就有什么。你可以自己建一个
template_xxx当专属模板,新库就会带上你预设的表,这是进阶玩法。
创建第一个数据库
建库有两种常用方式:命令行工具 createdb,和 SQL 语句 CREATE DATABASE。效果一样,后者更通用,也更容易写进脚本。
方式一:createdb 命令
在系统命令行(不是 psql 里)直接敲:
createdb mydb
没有报错就说明建成功了。这个命令其实就是 CREATE DATABASE 的封装。
Tip如果只敲
createdb不带名字,它会建一个和当前系统用户名同名的库。很多工具默认连同名库,所以这么起名能少打点字。
方式二:CREATE DATABASE 语句
在 psql 里执行:
CREATE DATABASE mydb;
结尾分号别忘了。成功会显示 CREATE DATABASE。
Note数据库名必须以字母开头,最长 63 字节。习惯上用小写加下划线,比如
order_system,避免和关键字冲突。如果你用了大写或中文名,Postgres 会自动转小写;想强制保留大小写,得用双引号裹起来,但不建议,后面会讲坑。
连接参数也能顺手指定
建库时还能带上编码、模板等选项,比如:
CREATE DATABASE mydb
WITH TEMPLATE = template0
ENCODING = 'UTF8'
LC_COLLATE = 'C'
LC_CTYPE = 'C';
日常大多直接 CREATE DATABASE mydb; 就够了,UTF8 是默认且最推荐的选择。这里先见一面,知道「还能这么写」即可。
连接到新建的库
建好库后,怎么进去?有两种办法。
办法一:用 \c 在 psql 里切换
postgres=# \c mydb
You are now connected to database "mydb" as user "postgres".
mydb=#
提示符从 postgres=# 变成 mydb=#,说明当前已经站在 mydb 里了。后面的操作都作用于这个库。
办法二:连库时直接指定
退出 psql 再连,或者新开一个命令行:
psql -U postgres -d mydb
这样就一步到位连进了 mydb。
Tip如果连库时既不写
-d也不写库名,psql 会默认连和用户名同名的库。所以以postgres用户连、又没指定库,进的就是postgres库。记住这条默认规则,能少踩很多「怎么连错了库」的坑。
确认当前在哪个库
怕自己迷路?用这条 SQL 看当前库名:
SELECT current_database();
也可以看提示符最前面的名字,那永远是当前库。两者对照着看,绝不会搞错。
用 pgAdmin 建库(补充)
图形界面里,右键 Databases → Create → Database...,填个名字点 Save 即可。建完双击就能进去。和 psql 是同一套逻辑,只是换成了点鼠标。
Warning一个 Postgres 服务实例(叫一个「数据库集群」)可以管很多个库。库与库之间是隔离的:在
mydb里建的表,不会出现在别的库。想换库必须重新连接或用\c。我之前一度以为「切了库表没同步」是 bug,其实是隔离机制在起作用。
顺手建几个练手库
建议你现在就建两个库,后面章节会反复用到:
CREATE DATABASE mydb;
CREATE DATABASE testdb;
mydb 当主练习库,testdb 随便折腾,错了直接删掉重建,不影响主库。养成「有个专门试错的小库」的习惯,能少很多心理负担。
小结
建库就两条路:createdb 命令或 CREATE DATABASE 语句。进库用 \c 库名 切换,或在连接时指定 -d 库名。记住库之间是隔离的,这很重要。
用连接串(URI)连接
除了 -h -p -U -d 一套参数,psql 也接受一条连接串(URI)一次写全:
psql "postgresql://postgres@localhost:5432/mydb"
格式是 postgresql://用户@主机:端口/库名。远程连、或者把连接信息写进配置时,用串更紧凑。带密码的话可以 postgresql://用户:密码@主机/库名,但密码明文写在命令行有泄露风险,不建议。
Note连接串里特殊字符(比如密码里的
@、:)要转义或放进环境变量PGPASSWORD,别直接裸写,容易被终端历史记录截到。
指定库的属主
建库时顺手把主人指定好,省得后面再 ALTER:
CREATE DATABASE mydb OWNER = appuser;
这样 appuser 对这个库有完全控制权,团队协作时分工清晰。前提是 appuser 这个角色已经存在,角色管理后面有专门章节讲。
远程连接初探
连本机用 localhost 就行。连别的机器,把 -h 换成对方 IP 或域名:
psql -h 192.168.1.100 -p 5432 -U postgres -d mydb
但光改 -h 不够,对方服务器的访问控制(pg_hba.conf)得放行你的来源,防火墙端口也得通。本机练习阶段用 localhost 即可,远程连接等讲到权限和网络那章再细说。
Warning千万不要把数据库的 5432 端口直接暴露在公网、还用弱密码的
postgres超级用户。网上有机器人专门扫这种裸库,一夜之间数据就被拖走或加密勒索。练习就在本机localhost跑。
连错了库怎么脱身
万一连进了不该连的库,别慌:用 \c 正确库名 切过去,或者直接 \q 退出来重新连。连错库本身不会破坏数据,只要没在里面执行建表、删表之类的写入操作就没事。
一个起名的小提醒
库名、表名尽量避开 SQL 保留字(比如 user、order、select)。虽然用双引号裹起来也能用,但每次写查询都得带引号,极其别扭。用 users、orders 这种复数形式,既清楚又避开了坑。
Warning别用
user当表名,它是保留字。本书示例表用users正是这个原因。踩过一次你就懂了。
环境就绪自检清单
装好、连上、建好库后,按这张清单过一遍,确认环境真的能用了:
psql --version显示 18.x。SELECT version();能返回版本信息。\l能看到你建的mydb。\c mydb能切进去,提示符变成mydb=#。- 在
mydb里建张测试表能成功。
五条全过,说明从安装到建库这条路你已经完全走通,可以放心进入后面的学习。
Tip这个自检清单我每次换新机器装 Postgres 都会过一遍。它帮你把「装、连、建」三个最容易出问题的环节一次性验证掉,后面卡住时至少能确定不是环境问题。
下一章我们系统讲数据库的各种操作:建、改、删。