Postgresql docker compose,多个数据库,从shell执行postgres sql文件
我正在使用docker compose创建多个postgres数据库,我能够创建它们,但我还需要在每个数据库上执行一个sql文件,我在create-multiple-postgresql-databases.sh文件中使用了“\I db/app.sql”,但启动docker compose时会显示此错误Postgresql docker compose,多个数据库,从shell执行postgres sql文件,postgresql,docker,shell,docker-compose,Postgresql,Docker,Shell,Docker Compose,我正在使用docker compose创建多个postgres数据库,我能够创建它们,但我还需要在每个数据库上执行一个sql文件,我在create-multiple-postgresql-databases.sh文件中使用了“\I db/app.sql”,但启动docker compose时会显示此错误 db/app.sql: No such file or directory 这是文件结构: ├── dbscripts │ └── postgres │ └── db │
db/app.sql: No such file or directory
这是文件结构:
├── dbscripts
│ └── postgres
│ └── db
│ └── app.sql
├── docker-compose.yml
这是我的docker-compose.yml
version: '3'
services:
postgres-service:
image: postgres:latest
container_name: postgres-container
ports:
- 55432:5432/tcp
volumes:
- /var/lib/postgres
- ./dbscripts/postgres:/docker-entrypoint-initdb.d
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_MULTIPLE_DATABASES: app,app_test
POSTGRES_HOST_AUTH_METHOD: trust
创建-multiple-postgresql-databases.sh
#!/bin/bash
set -e
set -u
function create_user_and_database() {
local database=$1
echo " Creating user and database '$database'"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER $database;
CREATE DATABASE $database;
GRANT ALL PRIVILEGES ON DATABASE $database TO $database;
\connect $database;
\i db/app.sql;
EOSQL
}
if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES"
for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do
create_user_and_database $db
done
echo "Multiple databases created"
fi
#/bin/bash
set-e
set-u
函数create_user_和_database(){
本地数据库=$1
echo“正在创建用户和数据库“$database”
psql-v ON_ERROR_STOP=1——用户名“$POSTGRES_USER”找到db/app.sql文件了吗?可能是相对路径关闭了?@Ruchi是的,实际上是路径问题,正确的是docker-entrypoint-initdb.d/db/app.sql