部署容器
docker版本
部署脚本
postgresql:
image: postgres:12-alpine
container_name: postgresql
restart: always
user: 1026:100
network_mode: host
environment:
POSTGRES_DB: postgres
POSTGRES_USER: "root"
POSTGRES_PASSWORD: "123456"
volumes:
- ./postgresql/data:/var/lib/postgresql/data
- ./postgresql/custom.conf:/etc/postgresql/custom.conf:ro
command: postgres -c config_file=/etc/postgresql/custom.conf
容器相关操作
- 从宿主机登录容器数据库
# psql -h <HOST> -U <USER> -d <DBNAME> docker exec -it <容器Id> psql -U root -d postgres
数据库操作
数据库操作
-
查看数据库
\l -
退出数据库
\q -
创建用户
# <user_demo> 替换为自己的用户名
# '123456' 替换为自己的密码
CREATE ROLE <user_demo> LOGIN PASSWORD '123456';
- 创建数据库
# <db_name> 替换为数据库名称
# <user> 替换为用户名
CREATE DATABASE <db_name> OWNER <user>;
- 切换数据库
\c 库名
- 查看表
\dn -- 看有哪些 schema \dt *.* -- 列出所有 schema 的所有表 \dt myschema.* -- 只看指定 schema
常用操作
- 查询
SELECT * FROM 表名 WHERE 条件;
- 删除
DELETE FROM 表名 WHERE 条件;
- 修改
UPDATE 表名
SET status = 'done'
WHERE id = 123;
操作示例
数据库迁移
导出数据库
pg_dump -U postgres -d ledger_db \
-n public \
--no-owner \
--no-privileges \
--no-acl \
> ledger_export.sql
转换Schema名称
# 创建新 schema 版本(public → ledger)
sed 's/public\./ledger./g; s/SCHEMA public/SCHEMA ledger/g' ledger_export.sql > ledger_final.sql
# 验证
grep -n "CREATE TABLE" ledger_final.sql | head -5
# 应显示:CREATE TABLE ledger.xxx
目标库初始化
-- 以管理员执行
\c postgres
-- 创建数据库
DROP DATABASE IF EXISTS ledger_new;
CREATE DATABASE ledger_new;
-- 连接新库
\c ledger_new
-- 创建专用 schema(不用 public)
CREATE SCHEMA ledger;
-- 创建应用用户(非超级用户)
CREATE USER ledger_app WITH PASSWORD 'YourStrongPassword123!';
-- 权限配置
GRANT USAGE ON SCHEMA ledger TO ledger_app;
GRANT CREATE ON SCHEMA ledger TO ledger_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA ledger GRANT ALL ON TABLES TO ledger_app;
ALTER DEFAULT PRIVILEGES IN SCHEMA ledger GRANT ALL ON SEQUENCES TO ledger_app;
-- 设置默认搜索路径
ALTER USER ledger_app SET search_path TO ledger, public;
导入数据
psql -U ledger_app -d ledger_new < ledger_final.sql