安装 PostgreSQL

261
2023/07/28 14:34:26

安装

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