记录一下在命令行下对 PostgreSQL 数据库的一些常用操作。
假设 PostgreSQL 容器名称是 my_postgres_container。
进入容器:
docker exec -it my_postgres_container bash
进入 PostgreSQL 命令行终端
在容器的 shell 中输入以下命令(默认用户通常是 postgres):
psql -U postgres
- 如果你的数据库有密码且没有配置免密,它会提示你输入密码。
- 由于容器内本地连接免密,这里不需要输入密码。
- 如果你要连接特定的数据库,可以使用:
psql -U postgres -d 数据库名
查看数据库和表(常用命令)
进入 psql(看到 postgres=# 或类似提示符)后,使用以下元命令(以反斜杠 \ 开头):
- 列出所有数据库:
\l
- 切换/连接到指定数据库
\c 你的数据库名
- 查看当前数据库下的所有表:
\dt
- 查看某个表的结构(字段、类型、主键等):
\d 表名
数据的增删改查 (CRUD)
使用标准的 SQL 语句操作数据。注意:SQL 语句必须以分号 ; 结尾。
假设你有一个表叫 users,字段有 id, name, email。
- 查询数据 (Read)
查询所有数据:
SELECT * FROM users;
带条件查询:
SELECT * FROM users WHERE name = '张三';
- 插入数据 (Create)
插入一条数据:
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');
- 修改数据 (Update)
UPDATE users SET email = 'new_email@example.com' WHERE name = '李四';
- 删除数据 (Delete)
DELETE FROM users WHERE name = '李四';
退出
当你操作完成后,输入以下命令退出 psql 终端:
\q
备份和恢复
备份和恢复推荐在宿主机完成。
- 备份
备份整个数据库:
# 格式:docker exec -t [容器名] pg_dump -U [用户名] [数据库名] > [宿主机保存路径]
docker exec -t my_postgres_container pg_dump -U postgres my_db_name > my_backup.sql
备份单张表:
# 加上 -t 参数指定表名
docker exec -t my_postgres_container pg_dump -U postgres -t table_name my_db_name > table_name_backup.sql
- 备份选项
只备份表结构(不包含数据):-s (schema-only)
docker exec -t my_postgres_container pg_dump -U postgres -s my_db_name > schema.sql
只备份数据(不包含建表语句):-a (data-only)
docker exec -t my_postgres_container pg_dump -U postgres -a my_db_name > data.sql
携带清理语句: -c (clean)
# -c 会在备份文件中自动插入 DROP TABLE IF EXISTS 语句
docker exec -t my_postgres_container pg_dump -U postgres -c -t users my_db_name > users_full_backup.sql
- 恢复
有了备份文件(.sql),恢复数据通常使用 psql命令。
恢复整个数据库:
# 格式:cat [备份文件] | docker exec -i [容器名] psql -U [用户名] -d [数据库名]
cat my_backup.sql | docker exec -i my_postgres_container psql -U postgres -d my_db_name