Postgresql
前言
为了跨平台操作数据库,docker必须学
使用 Dokcer 安装 Postgresql
首先,从 Docker Hub 拉取官方的 PostgreSQL 镜像。可以使用以下命令:
bash
docker pull postgres
为了实现数据持久化,需要在宿主机上创建一个本地数据卷,并将其挂载到容器中。可以使用以下命令创建一个数据卷:
bash
docker volume create pgdata
可以通过 docker volume ls
查看是否创建了 volume
使用 docker run
命令创建并运行 PostgreSQL 容器,并将之前创建的数据卷挂载到容器中。可以使用以下命令:
bash
docker run --name pgsql -p 5432:5432 -e POSTGRES_PASSWORD=abc123 -v pgdata:/var/lib/postgresql/data -d postgres
--name pgsql
:容器的名称-p 5432:5432
:容器的端口,这里不写默认为 5432-e POSTGRES_PASSWORD=abc123
:环境变量POSTGRES_PASSWORD-v pgdata:/var/lib/postgresql/data
:将容器中的 data 与宿主机(本机)相关联(挂载到本机上)
进入容器中
bash
docker exec -it pgsql bash
bash
# 查看 postgres 版本
psql --version
# 进入 pgsql 容器中的 postgres 数据库中
psql -U postgres -W
# 创建 blog 数据库
CREATE DATABASE blog;
# 查看已经存在的数据库
\l
# \c + 数据库名 进入数据库
\c blog
以上步骤ok,说明我们的初始化是ok 的,此时不要关闭终端,
用 Navicat 连接 docker 启的 postgresql,并创建表格
sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(255) NOT NULL, -- 使用 VARCHAR 类型存储密码,并添加 NOT NULL 约束
realname VARCHAR(50)
);
回到终端使用 \d
查看表格是否创建成功
bash
blog=# \d
List of relations
Schema | Name | Type | Owner
--------+--------------+----------+----------
public | users | table | postgres
public | users_id_seq | sequence | postgres
(2 rows)
\d tablename
查看表格信息:
bash
blog=# \d users
Table "public.users"
Column | Type | Collation | Nullable | Default
----------+------------------------+-----------+----------+-----------------------------------
id | integer | | not null | nextval('users_id_seq'::regclass)
username | character varying(50) | | |
password | character varying(255) | | not null |
realname | character varying(50) | | |
Indexes:
"users_pkey" PRIMARY KEY, btree (id)
为了验证数据是否持久化,可以停止并删除容器,然后重新创建并启动一个新的容器。如果数据仍然存在,则说明数据持久化成功。
bash
docker stop pgsql
docker rm pgsql
docker run --name pgsql -p 5432:5432 -e POSTGRES_PASSWORD=abc123 -v pgdata:/var/lib/postgresql/data -d postgres
PS:
docker ps
查看容器是否启动,虽然名字都为 pgsql,但是哈希值是不同的
接下来,可以刷新 Navicat 查看数据库是否能连接,并且是否有 blog 数据库;也可以进入容器中的 postgresql,用命令行查看数据是否还存在
Postpresql 数据库
bash
postgres://username:password@host:port/database_name