安装
docker 安装无疑是最简单、最方便的安装方式:
docker run --name axum_rs_postgres -e POSTGRES_PASSWORD=axum_rs -p 5432:5432 -d postgres
--name
:取个名字吧,别到时候自己都不知道这是什么-e POSTGRES_PASSWORD=axum_rs
:设置环境变量POSTGRES_PASSWORD
,它将是超级管理员的密码(PostgreSQL的超级管理员的用户名是postgres
)-p 5432:5432
:端口映射。PostgreSQL 默认端口是5432
对于本地开发来说,上述 docker 命令已经足矣。但是,如你所知,站长是个负责任的站长,往往会告诉你如何尽可能的“压榨”各工具,让其能尽可能地以最优的状态来服务:
docker run \
--name axum_rs_postgres \
-e POSTGRES_PASSWORD=axum_rs \
-e POSTGRES_USER=axum_rs \
-e POSTGRES_DB=axum_rs \
-e TZ=PRC \
--restart=always \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /var/docker/axum_rs_postgres:/var/lib/postgresql/data \
-p 127.0.0.1:5432:5432 \
-d postgres:alpine
多了几个选项,我们来看一下:
-e POSTGRES_USER=axum_rs
:设置环境变量POSTGRES_USER
,它将创建一个新用户,本例中为axum_rs
-e POSTGRES_PASSWORD=axum_rs
:设置环境变量POSTGRES_PASSWORD
,它将为上面创建的新用户(axum_rs
)设置密码。本例为axum_rs
(用户名和密码一样,不奇怪吧。当然,在实际生产环境,建议把密码设置复杂点)-e POSTGRES_DB=axum_rs
:设置环境变量POSTGRES_DB
,它将创建一个新数据库axum_rs
,并把该数据的所有者设置为上面创建的新用户-e TZ=PRC
:将时区设置为中国标准时间--restart=always
:设置无论何种原因导致实例停止,都进行重启。当然包括开机自动运行。-e PGDATA=/var/lib/postgresql/data/pgdata
:该环境变量用于设置 PostgreSQL 实例的数据存储目录。通常来说,默认值就是/var/lib/postgresql/data/pgdata
,但为了避免版本差异,这里显式设置一下-v /var/docker/axum_rs_postgres:/var/lib/postgresql/data
:将本地/var/docker/axum_rs_postgres
目录映射到 docker 容器的/var/lib/postgresql/data
目录-p 127.0.0.1:5432:5432
:端口映射。注意,我们只映射到了本地的端口,所以外部是无法通过公网IP:5432
来访问该实例的。这在实际生产环境中非常有用-d postgres:alpine
:我们使用的镜像不再是postgres
,而是postgres:alpine
。如果你了解过alpine,那你应该知道这个 Linux 发行版是如何丧心病狂地节省资源的。
连接
直接使用 docker
你可以使用 docker 来连接:
docker exec -it axum_rs_postgres psql -U axum_rs
docker exec
:docker 提供的命令,用于执行容器内部的命令-it
:开启交互式终端axum_rs_postgres
:容器实例的名字psql
:PostgreSQL 的命令行工具-U axum_rs
:指定 执行psql
的用户名
- 如未指定
-U axum_rs
,将使用默认用户名。PostgreSQL 的用户有两种
- 一是和 Linux 当前用户名相同的用户,docker 中默认用户名是
root
- PostgreSQL 的超级管理员的用户名是
postgres
,有些 Linux 发行版会将 Linux 的root
用户和 PostgreSQL 的postgres
进行映射;有些则不会- 另一种是通过 SQL 语句创建的用户,我们将在后续章节进行讲解。本例中的
axum_rs
正是通过 SQL 语句创建——我们在docker run
时,通过POSTGRES_USER
指定的,这是自动创建的,不需要手动创建- 我们相当于在本地运行
psql
,所以大部分情况下,不需要输入密码
- 这不是 PostgreSQL 的默认特性,而是 docker 镜像帮我们做的
- 有关用户和角色,我们将在后续章节介绍
axum_rs=# \d
Did not find any relations.
如果你看到类似上面的输出,说明你的 docker PostgreSQL 已经成功运行。此时,你可以输入 \q
退出。
如果你是使用简单的
docker run --name axum_rs_postgres -e POSTGRES_PASSWORD=axum_rs -p 5432:5432 -d postgres
来创建容器实例,那么,你应该使用如下命令进行连接:docker exec -it axum_rs_postgres psql -U postgres
嗯,就这么简单。
你甚至可以:
docker exec -it axum_rs_postgres psql
使用 GUI 工具连接
当然你完全不必用这么原始的方式连接 PostgreSQL,官方推荐的PgAdmin是一个由 Python 和 Flask 开发的、开源的、Web 形式的 GUI工具(它也有 docker 版本,你可以自己去试试)。
这边推荐DBeaver Community,它是一个跨平台(基于Java)的、支持多种数据库的 GUI 工具。
其它安装方式
在线免费实例
ElephantSQL 提供了免费的 PostgreSQL 实例,对于普通开发以及学习来说足够了,重点是,它提供了香港节点,对于国内用户来说,连接香港节点可能会比较快。
你可以使用 DBeaver 来连接 ElephantSQL 的免费实例
二进制安装
- 官网提供了各平台的二进制安装包,这应该是最“正规”的安装方式。
- 各 Linux 发行版同样提供了基于各自包管理机制的安装,比如 debian/ubuntu 的 apt:
apt install postgresql