原文链接
Postgres
PostgreSQL: The World's Most Advanced Open Source Relational Database
Deepin
deepin20 官方仓库中默认的是 postgres11 版本
deepin20
postgres11
安装 postgres
postgres
# 首先卸载旧版本或配置错误的版本sudo apt remove postgresql --purge # purge 连同配置文件一起删除sudo apt install postgresql# psql version 检查安装是否成功 # service psotgresql status 检查 postgres 状态
连接
postgres 安装完成默认存在一个 postgres 数据库
psql -U postgres -h 127.0.0.1 -p 5432 -d postgres# -U 用户名 -h 连接地址 -p 端口 -d 数据库名
如果连接失败或者说用户不存在则使用 postgres 用户登录
sudo su - postgres # 切换到 postgres 用户psql # 登录\password postgres # 更改 postgres 用户的密码,然后输入两次密码\q # 退出控制台
再次连接
这时,我们再通过上面的命令或者使用 dbeaver 进行连接都可以连接成功了。
dbeaver
新建用户
adduser dbuser # 系统中新建一个用户psql -U postgres -h 127.0.0.1 -p 5432 -d postgres # 登录进控制台CREATE USER dbuser WITH PASSWORD 'dbuser'; # 创建数据库用户 dbuser 为密码CREATE DATABASE mydb OWNER dbuser; # 创建数据库,并指定所有者为 dbuserGRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser # 将 mydb 的所有权限赋予 dbuser 用户\q # 退出psql -U dbuser -h 127.0.0.1 -p 5432 -d mydb # 登录验证
此时我们可以使用 dbeaver 连接,使用 dbuser 用户名 mydb 数据库。
dbuser
mydb
导入 sql 文件
sql
导出 sql 文件
pd_dump -U postgres -h 127.0.0.1 -p 5432 -d postgres > ./postgres.sql
psql -U postgres -d postgres -h 127.0.0.1 -p 5432 < ./postgres.sql
postgres12
首先卸载旧版本或配置错误的版本
sudo apt remove postgresql --purge # purge 连同配置文件一起删除
创建官方源配置文件
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
导入签名
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
更新本地软件仓库
sudo apt update
安装
apt-get install postgresql-12
postgres 官方的仓库包含下面的一些软件
postgresql-client-12
postgresql-12
postgresql-contrib-9.x
libpq-dev
postgresql-server-dev-12
pgadmin4
pgadmin 是 postgres 的一个客户端,可以在 deepin 中使用。不过推荐一个 linux 上更好用的数据库管理软件 dbeaver ,可以连接大多数关系型数据库跟非关系型数据库,但是对于导入导出自我感觉没有 navicat 好用,不过可以使用命令行的导入导出来代替是一样的。
pgadmin
deepin
linux
navicat
Docker
拉取 postgres 镜像
docker pull postgres# 检查镜像是否拉取docker images # 或者 docker image ls
运行
docker run -d --name postgres-server -p 5432:5432 -e "POSTGRES_PASSWORD=progres" postgres# --name 容器运行的名称 -p 端口映射 -e 环境变量 postgres 镜像名
停止 | 重启
docker stop postgres-serverdocker restart postgres-server
持久化
如果容器被删除,那么容器中 postgres 的数据也会一并被删除,所以我们要将数据保存到本机中,方便数据的备份与恢复。
验证如果不开启持久化是否会丢失数据
4.1 首先以交互模式进入 docker 中的 postgres ,以上文运行的容器为依据。
docker
docker exec -it postgres-server bash
此时已经进入了容器中的 postgres ,使用的是 bash 这个shell ,接下来我们使用命令行进入数据库中,并添加几条数据,然后将容器停止运行,查看数据是否还在,如果数据还在,那么删除掉这个镜像再查看数据是否还在,如果不在则恰恰说明了容器中的数据并没有被持久化,所以我们需要配置本地的文件对应到容器中的数据存放文件,来实现持久化,保护我们的数据。
bash
shell
# 我们进入 docker 中的 bash, 登录到 postgres数据库psql # 输入这个命令会报错,说没有 root 用户,跟上面在本机上安装是一样的。我们直接切换到 postgres 用户,然后登录,密码是 镜像 -e配置的那个环境变量。su - postgrespsql # 此时可以进入到数据库,此时会提醒我们使用 help 查看帮助命令\l # 查看当前的所有数据库\c postgres # 进入到 postgres 数据库中\dt # 查看所有的表,第一次查询为空CREATE TABLE first (id int,name char(50)); # 创建一张表\dt # 现在可以查询到存在一张 first 表select tabelname form pg_tables where schemaname='public' # 同样查询 public 下的表,更加直观insert into first (id,name) values (1,'lili'); # 插入一条记录
现在镜像中已经存在了一个表,其中有一条数据,我们可以在宿主机使用命令登录进去查询,也可以使用可视化工具,如 dbeaver,pgadmin 等。
dbeaver,pgadmin
现在停止掉运行的容器
docker stop postgres-server docker ps -a # 检查所有的容器, exited说明已经停止,通过命令或者可视化工具也会连接失败。
现在重新启动容器
docker start postgres-server
此时发现,数据跟表都还在。所以容器的停止并不会丢失数据,现在我们将容器删除掉试试,因为当前容器被创建后有自己的存储位置,而这些文件的生命周期是与 docker 容器相同的,即时被停止也依旧报存在容器中,当容器被销毁则数据也被删除。所以对于临时的应用使用默认的存储方式即可,对于要求数据的完整及稳定性的应用,应当使用持久化的方式进行报存。
# 删除运行的容器会报错,首先将容器停止docker stop postgres-serverdocker rm postgres-server # 删除容器docker ps -a # 发现 postgres-server 没有了,说明删除成功。
这次我们重新运行一个新容器,再次查看容器內数据,进而验证标题。
docker run -d --name postgres-server -p 5432:5432 -e "POSTGRES_PASSWORD=progres" postgres # 返回一串 id 说明运行成功
此时,我们使用可视化工具或者命令行,又或者进入 docker 的交互 bash ,都可以看到创建的数据不在了,因为容器已经改变了。是一个新的容器。
持久化数据也就是使用本地的一个目录来存放容器中的数据,因为数据在本地,所以容器的删除不会影响本地的数据,但是如果本地文件删除掉那就没办法了,所以对于重要数据要定时进行备份。
创建本地卷
docker volume create pgdata
启动容器
docker run -d --name postgres-server -v pgdata:/var/lib/postgresql/data -p 5432:5432 -e "POSTGRES_PASSWORD=root" postgres# -v 指定本地卷,用容器中的 /var/lib/postgresql/data 目录来盛放数据,因为这是 postgres 的数据存放文件,我们需要将这个文件映射到我们的主机上,实现持久化。docker volume inspect pgdata # 使用这个命令我们可以查看 pgdata 卷的详细信息# 一下是输出[ { "CreatedAt": "2020-11-26T22:03:19+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/pgdata/_data", "Name": "pgdata", "Options": null, "Scope": "local" }]# Mountpoint 就是我们主机上的目录,与 docker 容器共享,并且当容器被删除,主机上的数据依旧存在,我们可以在主机中查看 /var/lib/docker/volumes/pgdata/_data 文件中的内容,我们对此目录內进行文件的操作在容器中是会同步更新的。所以可以实现容器內数据库操作,删除容器数据保留。
测试持久化
docker exec -it postgres-server bashsu - postgres\c postgrespostgres=# create table test1(id int,name char(50));postgres=# insert into test1 (id,name) values (1,'lisa');
现在跟上面测试一样,添加了数据。然后继续删除容器。
这时容器已经被删除了,但是我们发现主机上的文件依旧是存在的,所以我们运行新容器时指定这个卷就可以使用以前的数据了。
然后使用指定卷持久化的方式进行运行容器
docker run -d --name postgres-server -v pgdata:/www/docker/volumes/pgdata -p 5432:5432 -e "POSTGRES_PASSWORD=root" postgres
哇塞,数据库跟文件又回来了 😄。 it 's 😎
对数据进行持久化后,我们可能已经备份了数据,想要删除到主机上的文件,可以执行下面的命令
在 docker 中 卷 volume 是一等公民,可以直接使用命令操作。
volume
docker volume rm pgdata
这个时候主机上的目录也没有了,数据就被删除了。 😓
我们如果需要使用持久化的方式复原一个容器是可以实现的,但是不要删除卷 volume 否则持久化的数据就会丢失。
原文链接贴错了,不知道怎么改。真正的原文链接在这 原文链接
什么时候能支持 markdown 呢
点击帖子右下角回复右边的三个点,里面有编辑
多谢
请问此错误怎么处理,统信系统可用,我理解深度和debian高度兼容的。PG数据库官网的源也不可用
Featured Collection
Popular Events
原文链接
PostgresPostgreSQL: The World's Most Advanced Open Source Relational Database使用
Deepin本机安装deepin20官方仓库中默认的是postgres11版本安装
postgres连接
postgres安装完成默认存在一个postgres数据库如果连接失败或者说用户不存在则使用
postgres用户登录再次连接
这时,我们再通过上面的命令或者使用
dbeaver进行连接都可以连接成功了。新建用户
此时我们可以使用
dbeaver连接,使用dbuser用户名mydb数据库。导入
sql文件导出
sql文件pd_dump -U postgres -h 127.0.0.1 -p 5432 -d postgres > ./postgres.sql导入
sql文件psql -U postgres -d postgres -h 127.0.0.1 -p 5432 < ./postgres.sql使用
postgres官方源安装postgres12首先卸载旧版本或配置错误的版本
sudo apt remove postgresql --purge # purge 连同配置文件一起删除创建官方源配置文件
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt buster-pgdg main" > /etc/apt/sources.list.d/pgdg.list'导入签名
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -更新本地软件仓库
sudo apt update安装
apt-get install postgresql-12postgres官方的仓库包含下面的一些软件postgresql-client-12postgresql-12postgresql-contrib-9.xlibpq-devpostgresql-server-dev-12pgadmin4pgadmin是postgres的一个客户端,可以在deepin中使用。不过推荐一个linux上更好用的数据库管理软件dbeaver,可以连接大多数关系型数据库跟非关系型数据库,但是对于导入导出自我感觉没有navicat好用,不过可以使用命令行的导入导出来代替是一样的。使用
Docker安装拉取
postgres镜像运行
停止 | 重启
持久化
如果容器被删除,那么容器中
postgres的数据也会一并被删除,所以我们要将数据保存到本机中,方便数据的备份与恢复。验证如果不开启持久化是否会丢失数据
4.1 首先以交互模式进入
docker中的postgres,以上文运行的容器为依据。docker exec -it postgres-server bash此时已经进入了容器中的
postgres,使用的是bash这个shell,接下来我们使用命令行进入数据库中,并添加几条数据,然后将容器停止运行,查看数据是否还在,如果数据还在,那么删除掉这个镜像再查看数据是否还在,如果不在则恰恰说明了容器中的数据并没有被持久化,所以我们需要配置本地的文件对应到容器中的数据存放文件,来实现持久化,保护我们的数据。实验
docker容器的非持久化现在镜像中已经存在了一个表,其中有一条数据,我们可以在宿主机使用命令登录进去查询,也可以使用可视化工具,如
dbeaver,pgadmin等。现在停止掉运行的容器
现在重新启动容器
docker start postgres-server此时发现,数据跟表都还在。所以容器的停止并不会丢失数据,现在我们将容器删除掉试试,因为当前容器被创建后有自己的存储位置,而这些文件的生命周期是与
docker容器相同的,即时被停止也依旧报存在容器中,当容器被销毁则数据也被删除。所以对于临时的应用使用默认的存储方式即可,对于要求数据的完整及稳定性的应用,应当使用持久化的方式进行报存。这次我们重新运行一个新容器,再次查看容器內数据,进而验证标题。
docker run -d --name postgres-server -p 5432:5432 -e "POSTGRES_PASSWORD=progres" postgres # 返回一串 id 说明运行成功此时,我们使用可视化工具或者命令行,又或者进入
docker的交互bash,都可以看到创建的数据不在了,因为容器已经改变了。是一个新的容器。进行持久化
持久化数据也就是使用本地的一个目录来存放容器中的数据,因为数据在本地,所以容器的删除不会影响本地的数据,但是如果本地文件删除掉那就没办法了,所以对于重要数据要定时进行备份。
创建本地卷
docker volume create pgdata启动容器
测试持久化
现在跟上面测试一样,添加了数据。然后继续删除容器。
这时容器已经被删除了,但是我们发现主机上的文件依旧是存在的,所以我们运行新容器时指定这个卷就可以使用以前的数据了。
然后使用指定卷持久化的方式进行运行容器
docker run -d --name postgres-server -v pgdata:/www/docker/volumes/pgdata -p 5432:5432 -e "POSTGRES_PASSWORD=root" postgres哇塞,数据库跟文件又回来了 😄。 it 's 😎
删除持久化文件
对数据进行持久化后,我们可能已经备份了数据,想要删除到主机上的文件,可以执行下面的命令
在
docker中 卷volume是一等公民,可以直接使用命令操作。docker volume rm pgdata这个时候主机上的目录也没有了,数据就被删除了。 😓
我们如果需要使用持久化的方式复原一个容器是可以实现的,但是不要删除卷
volume否则持久化的数据就会丢失。