一、以docker快速部署pgsql
docker run -d \ -p 5432:5432 \ --name pgsql \ -e POSTGRES_PASSWORD=123456 \ -v /home/docker/timescaledb/data:/var/lib/postgresql/data \ --restart=always \ postgres:12
二、以docker快速部署pgsql + timescaledb
docker run -d \ -p 5432:5432 \ --name timescaledb \ -e POSTGRES_PASSWORD=123456 \ -v /home/docker/timescaledb/data:/var/lib/postgresql/data \ --restart=always \ timescale/timescaledb:latest-pg11
三、pgsql的简单使用(pgsql的使用与我们习惯的mysql相差很大)
1、docker部署的pgsql操作:
# 进入容器 docker exec -it xxxxxxx /bin/bash # 切换用户(pgsql的操作都需要切换到postgres用户) su postgres # 连接pgsql: psql -Upostgres # 创建数据库: CREATE DATABASE jiguiquan; # 查看数据库: \l # 删除数据库: drop database jiguiquan; # 断开退出: \q 1
2、非docker部署的pgsql操作:
# 本机无密码直接登录: sudo -u postgres psql # 或 su postgres psql -Upostgres # 登录其它机器: psql -h 10.206.73.150 -p 5432 -U postgres -d postgres -W ## -W: 表示控制台输入密码登录 # 修改密码: ALTER USER postgres WITH PASSWORD 'Haier2022!@#';
补充一:postgresql部署后,用户无法通过其它机器登录
原因是因为没有在配置文件中允许对应的IP的用户接入:
# 找到配置文件pg_hba.conf [root@master ~]# find / -name pg_hba.conf /var/lib/pgsql/13/data/pg_hba.conf # 修改配置,允许指定ip段的用户连接 host all all 10.206.73.0/24 trust
修改后,对pgsql服务进行重启:
[root@master ~]# su - postgres Last login: Wed Jul 6 16:41:13 CST 2022 on pts/0 -bash-4.2$ pg_ctl restart
补充二:对于允许的IP段的用户,输入任意密码都可以连接数据库,很不安全
同样是修改上面的配置文件pg_hba.conf:
host all all 0.0.0.0/0 md5 ## 我这么配置就是,允许所有的ip的用户以密码的方式连接
补充三:使用pg_dump对Postgresql数据的备份和恢复
我将使用pg_dump命令,将testtb中的数据copy到copytb的数据库中,使用Navicat实操不可行(某些行数据过长)
1、数据库的备份:
# pg_dump --host hostname --port 5432 --username username -t tablename -f d://test.sql dbname hostname:主机名称 username:用户名 tablename:导出的表名 daname:使用的数据库名 # 实操: pg_dump --host localhost --port 5432 --username postgres -f /var/lib/postgresql/data/testtb.sql testtb #查看 postgres@7bd21c826f4e:~/data$ ls -alh total 7.3M drwx------ 19 postgres postgres 4.0K Sep 13 02:19 . drwxr-xr-x 1 postgres postgres 27 Sep 13 02:17 .. drwx------ 9 postgres postgres 93 Sep 13 01:59 base drwx------ 2 postgres postgres 4.0K Sep 13 02:23 global ... -rw-r--r-- 1 postgres postgres 7.2M Sep 13 02:19 testtb.sql
2、恢复至copytb数据库中:
psql -d dbname --username username -f D://test.sql #实操 psql -d copytb --username postgres -f /var/lib/postgresql/data/testtb.sql
成功后,校验,数据库正常可用,数据正常!
3、如果是docker中部署的postgresql,并且没有挂载的话,那就docker cp出来:
docker cp pgsql:/var/lib/postgresql/data/testtb.sql ~/testtb.sql