postgresql - docker-compose.yml,postgress,如何在 init.sql 文件中设置 db、tables 和 prepop?
问题描述
我想添加一个数据库、表并使用某种 init.sql 文件进行预填充。不确定 init.sql 文件是什么样的。也不确定我会将 ADD 命令放在哪里。
这个 docker-compose.yml 文件有效
version: '3.6'
services:
postgre:
image: postgres:11.1-alpine
ports:
- "5432"
environment:
POSTGRES_USER: 'user'
POSTGRES_PASSWORD: 'password'
POSTGRESS_DB: 'db_amex01'
volumes:
- ./init:/docker-entrypoint-initdb.d/
解决方案
您可以将*.sh
脚本和/或*.sql
指令添加到/docker-entrypoint-initdb.d/
目录(基本上是您在docker-compose.yml
文件中的内容)。
创建用户的 shell 脚本示例:
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
您可以.sql
通过“转储”数据从现有数据库生成文件psql -U <username> -d <dbname> -1 -f <filename>.sql
。然后,您可以将.sql
文件添加到您的./init/
目录。
这记录在https://github.com/docker-library/docs/tree/master/postgres#how-to-extend-this-image。