Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用环境变量使用PostgreSQL创建转储?我找到了解决办法,但我没有';我不知道为什么它没有';我不能反其道而行之_Linux_Postgresql_Docker_Docker Compose_Environment Variables - Fatal编程技术网

Linux 如何使用环境变量使用PostgreSQL创建转储?我找到了解决办法,但我没有';我不知道为什么它没有';我不能反其道而行之

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

我想创建我的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 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