场景1:查看和操作 PostgreSQL 数据库
步骤1:检查容器状态
查看所有正在运行的容器
sudo docker ps
查看所有容器(包括停止的)
sudo docker ps -a
判断标准:
✅ 如果 STATUS 列显示 Up → 容器正在运行
❌ 如果 STATUS 列显示 Exited → 容器已停止,需要启动
步骤2:启动容器(如果未运行)
使用容器名启动
sudo docker start xxxxx(容器名)
或使用容器ID启动
sudo docker start e4502ea68146
验证启动成功:
sudo docker ps | grep xxxxx(容器名)
应该看到 STATUS 为 "Up"
步骤3:进入容器并连接数据库
进入容器的 bash shell
sudo docker exec -it xxxxx(容器名) bash
在容器内连接 PostgreSQL(默认用户:postgres)
psql -U postgres
连接成功后,你会看到:
psql (16.2 (Debian 16.2-1.pgdg110+2))
Type "help" for help.
postgres=#
步骤4:查看所有数据库:\l
步骤5:切换到目标数据库
例如:切换到 xxxxx 数据库
\c xxxxx
成功后提示:
You are now connected to database "xxxxx" as user "postgres".
xxxxx =#
步骤6:查看数据库中的所有表
-- 列出当前数据库的所有表
\dt
步骤7:查看表结构
-- 查看 tb_farm 表的结构
\d tb_farm
步骤8:查询表数据
查询 tb_farm 表的所有数据
SELECT * FROM tb_farm;
查询前10条数据(避免数据太多)
SELECT * FROM tb_farm LIMIT 10;
查询特定字段
SELECT id, name, address FROM tb_farm;
条件查询
SELECT * FROM tb_farm WHERE id = 1;
SELECT * FROM tb_farm WHERE name LIKE '%测试%';
SELECT * FROM tb_farm WHERE status = 1;
步骤9:退出数据库和容器
退出 psql 客户端
\q
步骤10:退出容器(回到宿主机)
exit
场景2:查看和管理后端服务容器
步骤1:查看所有容器,找到后端服务
查看所有正在运行的容器
sudo docker ps
查看所有容器(包括停止的)
sudo docker ps -a
注意: 你的后端服务容器名可能是 xxxxx_services,也可能是其他名字,以 docker ps 输出为准。
步骤2:查看后端服务日志
显示最近1000行日志
sudo docker logs -f --tail 1000 xxxxx_services
显示最近100行日志(推荐,避免太多)
sudo docker logs -f --tail 100 xxxxx_services
只显示日志,不实时跟踪(去掉 -f)
sudo docker logs --tail 100 xxxxx_services
参数说明:
-f:实时跟踪日志(类似 tail -f)
--tail N:显示最近 N 行
容器名:替换成你的实际容器名
步骤3:重启后端服务
重启容器
sudo docker restart xxxxx_services
验证重启成功
sudo docker ps | grep xxxxx_services
步骤4:停止/启动后端服务
停止容器
sudo docker stop xxxxx_services
启动容器
sudo docker start xxxxx_services
重新创建并启动容器(如果配置有修改)
sudo docker-compose restart xxxxx_services
场景3:常用数据库操作速查
快速查询(不进入 psql)
直接执行单条 SQL 命令
sudo docker exec xxxdata psql -U postgres -d xxxxxx_services -c "SELECT * FROM tb_farm LIMIT 5;"
统计行数
sudo docker exec xxxdata psql -U postgres -d xxxxxx_services -c "SELECT COUNT(*) FROM tb_farm;"
查看所有表
sudo docker exec xxxdata psql -U postgres -d xxxxxx_services -c "\dt"
数据库备份
备份整个数据库到文件
sudo docker exec xxxdata pg_dump -U postgres xxxxxx_services > /tmp/xxxxxx_services_backup_$(date +%Y%m%d).sql
备份并压缩
sudo docker exec xxxdata pg_dump -U postgres xxxxxx_services | gzip > /tmp/xxxxxx_services_backup_$(date +%Y%m%d).sql.gz
查看备份文件
ls -lh /tmp/xxxxxx_services_backup_.sql
数据库恢复
从备份文件恢复(需要先创建数据库)
sudo docker exec xxxdata psql -U postgres -c "CREATE DATABASE xxxxxx_services_new;"
恢复数据
sudo docker exec -i xxxdata psql -U postgres -d xxxxxx_services_new < /tmp/xxxxxx_services_backup_20240421.sql
查看数据库大小
进入数据库后执行
SELECT pg_size_pretty(pg_database_size('xxxxxx_services'));
查看所有数据库大小
SELECT datname, pg_size_pretty(pg_database_size(datname)) FROM pg_database;
重要安全提醒
1、不要在生产环境随意执行 DELETE 或 DROP 命令
2、操作前先备份数据:
sudo docker exec xxxdata pg_dump -U postgres xxxxxx_services_new > /tmp/backup_$(date +%Y%m%d).sql
3、使用事务保护重要操作:
BEGIN;
DELETE FROM tb_farm WHERE id = 1;
-- 确认无误后
COMMIT;
-- 如果有误
ROLLBACK;
4、不要在命令行中明文显示密码,使用环境变量或配置文件
完整命令速查表
| 操作 | 命令 | 说明 |
|---|---|---|
| 容器管理 | ||
| 查看运行容器 | sudo docker ps |
显示正在运行的容器 |
| 查看所有容器 | sudo docker ps -a |
显示所有容器 |
| 启动容器 | sudo docker start xintadata |
启动指定容器 |
| 停止容器 | sudo docker stop xintadata |
停止指定容器 |
| 重启容器 | sudo docker restart xintadata |
重启指定容器 |
| 进入容器 | sudo docker exec -it xintadata bash |
进入容器bash |
| 数据库连接 | ||
| 连接数据库 | psql -U postgres |
以postgres用户连接 |
| 切换数据库 | \c graziery_sd |
切换到指定数据库 |
| 退出psql | \q |
退出数据库客户端 |
| 数据库查询 | ||
| 列出数据库 | \l |
显示所有数据库 |
| 列出表 | \dt |
显示当前数据库所有表 |
| 查看表结构 | \d tb_farm |
显示表结构 |
| 查询数据 | SELECT * FROM tb_farm LIMIT 10; |
查询表数据 |
| 统计行数 | SELECT COUNT(*) FROM tb_farm; |
统计表行数 |
| 日志查看 | ||
| 查看日志 | sudo docker logs --tail 100 container_name |
查看最近100行日志 |
| 实时日志 | sudo docker logs -f container_name |
实时跟踪日志 |
| 备份恢复 | ||
| 备份数据库 | sudo docker exec xintadata pg_dump -U postgres db_name > backup.sql |
备份数据库 |
| 恢复数据库 | sudo docker exec -i xintadata psql -U postgres -d db_name < backup.sql |
恢复数据库 |
psql 客户端常用命令
| 命令 | 含义 | 示例 |
|---|---|---|
\l |
列出所有数据库 | postgres=# \l |
\c <数据库名> |
切换数据库 | \c graziery_sd |
\dt |
列出当前数据库所有表 | graziery_sd=# \dt |
\dt+ |
详细列出所有表(含大小) | graziery_sd=# \dt+ |
\d <表名> |
查看表结构 | \d tb_farm |
\d+ <表名> |
详细查看表结构 | \d+ tb_farm |
\du |
列出所有用户/角色 | postgres=# \du |
\dv |
列出所有视图 | graziery_sd=# \dv |
\df |
列出所有函数 | graziery_sd=# \df |
\x |
切换扩展显示模式(适合查看长数据) | graziery_sd=# \x |
\q |
退出 psql | graziery_sd=# \q |
\? |
查看所有 psql 命令帮助 | postgres=# \? |
\h |
查看 SQL 命令帮助 | postgres=# \h SELECT |