首页 / PostgreSQL 入门教程 / 连接数据库与创建第一个数据库

PostgreSQL 入门教程

连接数据库与创建第一个数据库

本教程共 50 篇 · 第 5 篇 · 更新于 2026-07-31 · 约 6 分钟阅读

PostgreSQLPostgreSQL 入门教程创建数据库createdbCREATE DATABASE切换数据库

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)

template0template1 是系统模板库。新建库时,默认是以 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 建库(补充)

图形界面里,右键 DatabasesCreateDatabase...,填个名字点 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 保留字(比如 userorderselect)。虽然用双引号裹起来也能用,但每次写查询都得带引号,极其别扭。用 usersorders 这种复数形式,既清楚又避开了坑。

Warning

别用 user 当表名,它是保留字。本书示例表用 users 正是这个原因。踩过一次你就懂了。

环境就绪自检清单

装好、连上、建好库后,按这张清单过一遍,确认环境真的能用了:

  1. psql --version 显示 18.x。
  2. SELECT version(); 能返回版本信息。
  3. \l 能看到你建的 mydb
  4. \c mydb 能切进去,提示符变成 mydb=#
  5. mydb 里建张测试表能成功。

五条全过,说明从安装到建库这条路你已经完全走通,可以放心进入后面的学习。

Tip

这个自检清单我每次换新机器装 Postgres 都会过一遍。它帮你把「装、连、建」三个最容易出问题的环节一次性验证掉,后面卡住时至少能确定不是环境问题。

下一章我们系统讲数据库的各种操作:建、改、删。