如何解决bash脚本在docker容器中有一个postgres数据库 解决方案说明
使用此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
特别是创建数据库,创建用户,创建表,但是... 它不在coverage数据库中,而在postgres数据库中。
我尝试添加“ CREATE TABLE coverage.postal_codes” ,但是coverage是db而不是模式,因此无效。
我尝试使用: psql -U coverage_user ,但是系统告诉我数据库coverage_user不存在。
因此,我当然认为“我必须指定数据库!”。然后,我尝试使用: psql -U coverage 作为数据库的名称,但是这次,系统取笑了我,改变主意,告诉我 role coverage不存在。
我尝试了一种解决方法:在命令-c“ \ c coverage coverage_user”中,我以这种方式连接了其他命令:
-c "\c coverage coverage_user; CREATE TABLE...; CREATE UNIQUE INDEX...;"
但是,当然,这都不起作用。
我作一个前提:我知道还有其他方法可以做到这一点,但我想了解这些特定命令所缺少的内容。
解决方法
解决方案
# @package _global_
num_layers: 8
embedding_size: 1024
learning_rate: 2.0
说明
https://www.postgresql.org/docs/9.2/app-psql.html
psql [选项...] [dbname [用户名]]
只需在选项后添加#! /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
。并将用户更改为dbname
选项。您也可以将-U
作为参数dbname
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。