bash脚本在docker容器中有一个postgres DB



我在使用以下bash脚本创建Postgres数据库时遇到了问题:

#! /bin/bash
docker pull postgres
docker run --name coverage-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres 
export CONTAINER_ID=$(sudo docker ps -a | grep coverage-postgres | head -c12)
sleep 2s
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "create user coverage_user with password 'password';"
sleep 0.5
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "create database coverage owner coverage_user;"
sleep 0.5
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "grant all privileges on database coverage to coverage_user;"
sleep 0.5
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "c coverage coverage_user" # it seems useless...
sleep 0.5
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "CREATE TABLE IF NOT EXISTS postal_codes (id,...;"
sleep 0.5
sudo docker exec -it $CONTAINER_ID psql -U postgres -c "CREATE UNIQUE INDEX ... ;"
# exit from container
exit
# restart container
docker start $CONTAINER_ID

特别是,数据库被创建,用户被创建,表被创建,但是它不在覆盖数据库中,而是在postgres数据库中

我尝试添加"CREATE TABLE coverage.postal_codes">但是覆盖率是一个数据库而不是一个模式,它不起作用。

我曾尝试使用:psql-U coverage_user,但系统告诉我数据库coverage_uuser不存在

所以我当然认为";我当然要指定数据库&";。然后我尝试使用:psql-U覆盖率作为数据库的名称,但这一次,系统取笑我,并改变主意,告诉我角色覆盖率不存在

我尝试了一种变通方法:在命令-c";\c覆盖范围_ user";我用这种方式连接了其他命令:

-c "c coverage coverage_user; CREATE TABLE...; CREATE UNIQUE INDEX...;"

但是,当然,这两者都不起作用。

我提出了一个前提:我知道还有其他方法可以做到这一点,但我想了解这些特定命令缺少了什么。

解决方案

#! /bin/bash
docker pull postgres
docker run --name coverage-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres 
export CONTAINER_ID=$(sudo docker ps -a | grep coverage-postgres | head -c12)
sleep 2s
docker exec -it $CONTAINER_ID psql -U postgres -c "create user coverage_user with password 'password';"
sleep 0.5
docker exec -it $CONTAINER_ID psql -U postgres -c "create database coverage owner coverage_user;"
sleep 0.5
docker exec -it $CONTAINER_ID psql -U postgres -c "grant all privileges on database coverage to coverage_user;"
sleep 0.5
docker exec -it $CONTAINER_ID psql -U coverage_user -c "CREATE TABLE IF NOT EXISTS postal_codes (id int)" coverage

解释

https://www.postgresql.org/docs/9.2/app-psql.html

psql〔option…〕〔dbname〔username〕〕

只需在选项后添加dbname。并将用户更改为-U选项。您也可以将dbname作为参数-d传递

相关内容

最新更新