Linux 如何使用环境变量使用PostgreSQL创建转储?我找到了解决办法,但我没有';我不知道为什么它没有';我不能反其道而行之
我想创建我的psql数据库的转储。我尝试了以下代码Linux 如何使用环境变量使用PostgreSQL创建转储?我找到了解决办法,但我没有';我不知道为什么它没有';我不能反其道而行之,linux,postgresql,docker,docker-compose,environment-variables,Linux,Postgresql,Docker,Docker Compose,Environment Variables,我想创建我的psql数据库的转储。我尝试了以下代码 sudo docker exec -t db pg_dump -c -U "$DATABASE_USER" > $BACKUP_DIR/backup$DATE.sql 但我只得到一个错误,它无法连接到数据库“root” 这很好,但我没有在$DATABASE_USER中定义root,所以我想知道它来自哪里。 经过一点尝试和错误,我发现了一个工作代码 sudo docker exec -t db pg_dump -c -U $(sudo d
sudo docker exec -t db pg_dump -c -U "$DATABASE_USER" > $BACKUP_DIR/backup$DATE.sql
但我只得到一个错误,它无法连接到数据库“root”
这很好,但我没有在$DATABASE_USER中定义root,所以我想知道它来自哪里。
经过一点尝试和错误,我发现了一个工作代码
sudo docker exec -t db pg_dump -c -U $(sudo docker exec -it db /bin/sh -c 'printf $DATABASE_USER') > $BACKUP_DIR/backup$DATE.sql
我在.env文件中定义了$DATABASE_USER,并将其放在我的compose文件中
env_file:
./.env
编辑:
我稍微修改了我的代码,所以我可以在不切换数据库的情况下更改用户名
sudo docker exec -t db pg_dump -c -U $(sudo docker exec -it db /bin/sh -c 'printf $DATABASE_USER') -d $(sudo docker exec -it db /bin/sh -c 'printf $DATABASE_NAME') > $BACKUP_DIR/backup$DATE.sql
发生这种情况的原因是,在主机(即笔记本电脑)上,您的环境中没有定义
数据库\u USER
。因此,当您转到类型时:
docker exec -t db <blah> "$DATABASE_USER"
同样地,我相信如果你逃过$
,你的pg_dump
调用应该会起作用
披露:我为工作,你能在你的
.env
文件中共享数据库用户
的内容吗?目前它是“数据库用户=开放用户”
docker exec -t db <blah> "$DATABASE_USER"
$ cat .env
DATABASE_USER=foo
$ docker exec -it mycontainer echo "$DATABASE_USER"
$ docker exec -it mycontainer bash -c "echo $DATABASE_USER"
$ docker exec -it mycontainer bash -c "echo \$DATABASE_USER"
foo