https://hub.docker.com/r/_/postgres/
https://hub.docker.com/r/pgvector/pgvector
https://hub.docker.com/r/dpage/pgadmin4/
https://hub.docker.com/r/prodrigestivill/postgres-backup-local
docker run -d -p 5432:5432 --name postgres --hostname postgres --restart=always --network mgr --ip 172.18.0.32 -v /etc/localtime:/etc/localtime:ro -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='WdqOpt' -e TZ='Asia/Shanghai' -e LANG='en_US.utf8' -e PGDATA=/var/lib/postgresql/data/pgdata -v /data/site/docker/db/postgres:/var/lib/postgresql/data -v /data/file:/data/file postgres:16.4-bookworm
-
docker run -d --name postgres --hostname postgres --restart=always --network mgr --ip 172.18.0.32 -v /etc/localtime:/etc/localtime:ro -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='WdqOpt' -e TZ='Asia/Shanghai' -e LANG='en_US.utf8' -e PGDATA=/var/lib/postgresql/data/pgdata -v /data/site/docker/db/postgres:/var/lib/postgresql/data -v /data/file:/data/file postgres:16.4-bookworm
docker run -d -p 5431:5432 --name postgres1 --restart=always -v /etc/localtime:/etc/localtime:ro -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='WdqOpt' -e TZ='Asia/Shanghai' -e LANG='en_US.utf8' -v /data/file:/data/file postgres:16.4-bookworm
docker run -d -p 5432:5432 --name postgres2 --restart=always -v /etc/localtime:/etc/localtime:ro -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='WdqOpt' -e TZ='Asia/Shanghai' -e LANG='en_US.utf8' -v /data/file:/data/file postgres:16.4-bookworm
docker exec -it postgres /bin/bash
which pg_config
apt-get install -y wget vim net-tools curl git iproute2 procps telnet inetutils-ping zip unzip
apt-get install -y build-essential autoconf automake libtool gcc make gdb
# 编译和安装pgVector
-基于PostgreSQL的向量搜索引擎,用于高效地处理大规模向量数据
git clone --branch v0.7.4 https://github.com/pgvector/pgvector.git
cd pgvector
apt install -y postgresql-server-dev-16
make && make install
-配置pgVector
find / -name postgresql.conf
vim /var/lib/postgresql/data/pgdata/postgresql.conf
...
shared_preload_libraries = 'pgvector'
-启用pgVector
CREATE EXTENSION IF NOT EXISTS vector;
docker restart postgres
docker pull postgres:16.4-bookworm
docker save postgres:16.4-bookworm | gzip > /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/db-postgres-16.4.tar.gz
# pgvector
docker run -d --name pgvector --hostname pgvector --restart=always --network mgr --ip 172.18.0.33 -v /etc/localtime:/etc/localtime:ro -e POSTGRES_USER='root' -e POSTGRES_PASSWORD='WdqOpt' -e TZ='Asia/Shanghai' -e LANG='en_US.utf8' -e PGDATA=/var/lib/postgresql/data/pgdata -v /data/site/docker/db/pgvector:/var/lib/postgresql/data -v /data/file:/data/file -e HTTP_PROXY="http://g.htmltoo.com:7778" -e HTTPS_PROXY="http://g.htmltoo.com:7778" -e NO_PROXY="localhost,127.0.0.1,192.168.0.0/16,172.17.0.0/16,172.18.0.0/16,172.19.0.0/16,172.20.0.0/16" pgvector/pgvector:0.7.4-pg16
docker pull pgvector/pgvector:0.7.4-pg16
docker save pgvector/pgvector:0.7.4-pg16> /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/db-pgvector-0.7.4-pg16.tar.gz
#pgadmin
docker run -d -p 8085:80 --name pgadmin --hostname pgadmin --restart=always --network mgr --ip 172.18.0.85 -v /etc/localtime:/etc/localtime:ro -e PGADMIN_DEFAULT_EMAIL='ihunter@vip.qq.com' -e PGADMIN_DEFAULT_PASSWORD='wdqdmm@0' -v /data/file:/data/file dpage/pgadmin4:8.12.0
http://g.htmltoo.com:8085
docker pull dpage/pgadmin4:8.12.0
docker save dpage/pgadmin4:8.12.0> /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/db-pgadmin4-8.12.0.tar.gz
# PostgreSQL backup/restore
docker run -d --name pgbackup --hostname pgbackup --restart=always --network mgr --ip 172.18.0.86 -v /etc/localtime:/etc/localtime:ro -e POSTGRES_HOST='172.18.0.32' -e POSTGRES_USER='root' -e POSTGRES_DB='joplin' -e POSTGRES_PASSWORD='WdqOpt' -e POSTGRES_EXTRA_OPTS='-Z6 --schema=public --blobs' -e SCHEDULE='@daily' -e BACKUP_KEEP_DAYS='7' -e BACKUP_KEEP_WEEKS='4' -e BACKUP_KEEP_MONTHS='6' -v /data/site/htmltoo.f/htmltoo.backup:/backups -w /backups prodrigestivill/postgres-backup-local:16-alpine
docker exec -it pgbackup /bin/bash
-backup script
/backup.sh
-backup
ls -la /backups
---Restore using the same container
-replace $BACKUPFILE, $CONTAINER, $USERNAME and $DBNAME
docker exec --tty --interactive $CONTAINER /bin/sh -c "zcat $BACKUPFILE | psql --username=$USERNAME --dbname=$DBNAME -W"
---Restore using a new container
-Replace $BACKUPFILE, $VERSION, $HOSTNAME, $PORT, $USERNAME and $DBNAME
docker run --rm --tty --interactive -v $BACKUPFILE:/tmp/backupfile.sql.gz postgres:$VERSION /bin/sh -c "zcat /tmp/backupfile.sql.gz | psql --host=$HOSTNAME --port=$PORT --username=$USERNAME --dbname=$DBNAME -W"
docker pull prodrigestivill/postgres-backup-local:16-alpine
docker save prodrigestivill/postgres-backup-local:16-alpine > /data/site/htmltoo.f/htmltoo.up/soft/docker.tar/db-pgbackup-16.tar.gz
---postgresSQL 备份数据的命令,可以使用pg_dumpall 和pg_dump
pg_dumpall 可以备份全库数据,但是不建议每天使用pg_dumpall备份。因为pg_dumpall仅支持导出为SQL文本格式,而这种庞大的文本备份来进行全库级别的数据库恢复时及其耗时,另外也更加占用空间,所以,一般只建议使用pg_dumpall来备份全局对象,而非全库数据。
-pg_dumpall可实现仅备份角色和表空间定义:
pg_dumpall -h localhost -U postgres --port=5432 -f myglobals.sql --globals-only
-如果仅需备份角色定义而无需备份表空间,那么可以加上--roles-only选项:
pg_dumpall -h localhost -U postgres --port=5432 -f myroles.sql --roles-only
-
如果需要备份表结构:
pg_dumpall -h localhost -U postgres --port=5432 -f myglobals_schema.sql -s
-如果导出时不希望输入密码,可以设置环境变量PGPASSWORD来设置密码
PGPASSWORD="Somepassword" pg_dumpall -h hostnameOrIp -U postgres --port=5432 -f myglobals.sql -s
pg_dump
-pg_dump仅导出数据库结构:
pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1
-备份某个database,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -f mydb.backup mydb
-备份某个database,备份结果以SQL文本方式输出,输出结果中需包括CREATE DATABASE语句:
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb
-备份某个database中所有名称以“pay”开头的表,备份结果以自定义压缩个数输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *.pay* -f pay.backup mydb
-备份某个database中所有名称为“test,abc"的表,备份结果以自定义压缩个数输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t "(tests|abc)" -f pay.backup mydb
-备份某个database中hr和payroll这两个schema中的所有数据,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -n hr -n payroll -f hr_payroll.backup mydb
-备份某个database中除了public schema中的数据以外的所有数据,备份结果以自定义压缩格式输出:
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -N public -f all_sch_except_pub.backup mydb
-pg_dump 也可以使用 PGPASSWORD="Somepassword" 在命令行前面的设置环境变量的方式执行。
PGPASSWORD="Somepassword" pg_dump -h localhost -p 5432 -U someuser -j 3 -Fd -f /somepath/a_directory mydb
cat >>~/.pgpass <<EOF
127.0.0.1:port:database:username:password
EOF
docker exec postgres pg_dump –h 127.0.0.1 -U root -W wdq2023 -c -C –f /data/site/htmltoo.f/htmltoo.backup/postgres-joplin-$(date +%Y%m%d).sql joplin
-备份
pg_dump -U postgres laozuo> ~/dbbackups/laozuo.org.bak
-恢复
# ON_ERROR_STOP的作用: 遇到一个SQL错误后让psql退出
psql --set ON_ERROR_STOP=on dbname < infile
-转储恢复一体化
# pg_dump和psql使用管道结合,直接从一个服务器转储一个数据库到另一个服务器
pg_dump -h host1 dbname | psql -h host2 dbname
-a
--data-only
只转储数据,不转储模式(数据定义)。
-c
--clean
包括在重建数据库之前清除(移除)它们的 SQL 命令。角色和表空间的DROP命令也会被加入进来。
-c, --clean clean (drop) database objects before recreating
-C, --create include commands to create database in dump
-f filename
--file=filename
将输出发送到指定的文件中。如果省略,将使用标准输出。
-g
--globals-only
只转储全局对象(角色和表空间),而不转储数据库。
-h host
--host=host
指定服务器正在运行的机器的主机名。如果该值开始于一个斜线,它被用作一个 Unix 域套接字的目录。默认是从PGHOST环境变量中取得(如果被设置),否则将尝试一次 Unix 域套接字连接。
-l dbname
--database=dbname
指定要连接到哪个数据库转储全局对象以及发现要转储哪些其他数据库。如果没有指定,将会使用postgres数据库,如果postgres不存在,就使用 template1。
-p port
--port=port
指定服务器正在监听连接的 TCP 端口或本地 Unix 域套接字文件扩展名。默认是放在PGPORT环境变量中(如果被设置),否则使用编译在程序中的默认值。
-U username
--username=username
要作为哪个用户连接。
-W
--password
---pg_dump命令处理大型数据库
# 处理大型数据库时,可以压缩存储
pg_dump dbname | gzip > filename.gz
# 此时的恢复:
gunzip -c filename.gz | psql dbname
# 或者
cat filename.gz | gunzip | psql dbname
# 大型数据库,分割存储
# 让每一块的大小为1兆字节
pg_dump dbname | split -b 1m - filename
# 恢复
cat filename* | psql dbname
# 自定义转储格式
# 如果PostgreSQL所在的系统上安装了zlib压缩库,
# 自定义转储格式将在写出数据到输出文件时对其压缩。这
# 将产生和使用gzip时差不多大小的转储文件,
# 但是这种方式的一个优势是其中的表可以被有选择地恢复。
pg_dump -Fc dbname > filename
# 恢复
# 自定义格式的转储不是psql的脚本,只能通过pg_restore恢复
pg_restore -d dbname filename
# 使用并行模式转储
# 使用-j参数控制并行度,并行转储只支持“目录”归档格式
pg_dump -j num -F d -f out.dir dbname
#目录格式备份:
pg_dump -h localhost -p 5432 -U someuser -F d -f /somepath/a_directory mydb
# 从9.3版本开始支持并行备份选项--jobs (-j),
# 此选项只有在按目录格式进行备份时才会生效,每个写线程只负责写一个单独的文件,
# 因此一定是输出结果为多个独立的文件时才可以并行。
pg_dump -h localhost -p 5432 -U someuser -j 3 -Fd -f /somepath/a_directory mydb
---备份全部数据库,有几个库就要输入几次密码
pg_dumpall -h192.168.57.110 -U postgres -f /backup/full_backup.sql
恢复
psql -h192.168.57.110 -U postgres -f /backup/full_backup.sql
---使用pg_archivecleanup备份对象,pg_archivecleanup可以清理掉该数据库不再需要的旧备份文件,以释放更多的存储空间。
pg_archivecleanup -h localhost -U username "/var/lib/postgresql/archive" keep-min 8
应用: db -> 添加服务: postgres
镜像: postgres:latest
环境变量:
POSTGRES_USER=root
POSTGRES_PASSWORD=wdqdmm@p
卷:
/etc/localtime:/etc/localtime:ro
/data/file:/data/file
/data/db/postgresql:/var/lib/postgresql/data
端口:5432-5432
保存ip: 升级或替换 不变
主机名: 使用容器名称
========pgadmin-web管理=======
应用: db -> 添加服务: pgadmin
镜像: dpage/pgadmin4:latest
环境变量:
PGADMIN_DEFAULT_EMAIL=admin@cndo.org
PGADMIN_DEFAULT_PASSWORD=0
卷:
/etc/localtime:/etc/localtime:ro
/data/file:/data/file
端口(http):8085-80
保存ip: 升级或替换 不变
主机名: 使用容器名称
---安装postgis扩展模块
CREATE EXTENSION postgis;
SELECT PostGIS_full_version();
---验证:执行下面语句不报错即可
SELECT ST_SetSRID(ST_Point(-87.71,43.741),4326),ST_GeomFromText('POINT(-87.71 43.741)',4326);