# PostgreSQL 初始化脚本说明 ## 目录说明 `./postgresql/init/` 目录下的脚本会在 PostgreSQL 容器**首次启动**时自动执行。 ## 执行规则 1. **仅执行一次**:只有当数据目录为空时才会执行 2. **执行顺序**:按文件名字母顺序执行 3. **支持格式**: - `.sh` - Shell 脚本 - `.sql` - SQL 脚本 - `.sql.gz` - 压缩的 SQL 脚本 ## 用户说明 ### postgres 用户 - **默认超级用户**,总是存在,无法删除 - 拥有所有权限 - 用于数据库管理操作 ### iotmanage 用户 - **应用程序用户**,通过初始化脚本创建 - 拥有指定数据库的权限 - 用于应用程序连接 ## 文件命名建议 建议使用数字前缀来确保执行顺序: - `01-create-user.sql` - 创建用户 - `02-create-schema.sql` - 创建 schema - `03-create-tables.sql` - 创建表结构 - `04-insert-data.sql` - 插入初始数据 ## 注意事项 1. 如果数据目录已有数据,这些脚本**不会再次执行** 2. 如果需要重新初始化,需要删除数据目录:`rm -rf ./postgresql/data/*` 3. 脚本中的密码建议使用环境变量,不要硬编码 4. 确保脚本具有幂等性(可以安全地重复执行) ## 示例:使用环境变量 ```sql -- 从环境变量读取密码(需要在脚本中处理) CREATE USER iotmanage WITH PASSWORD :'IOTMANAGE_PASSWORD'; ``` ## 验证用户 ```bash # 查看所有用户 docker exec -it postgres psql -U postgres -c "\du" # 测试 iotmanage 用户连接 docker exec -it postgres psql -U iotmanage -d jisheiotprodb -c "SELECT current_user;" ```