pg_restore using improper database name

huangapple go评论54阅读模式
英文:

pg_restore using improper database name

问题

I want copy a 'local' postgres database, which living in docker, into remote machine. Local docker's database have default name postgres, and remote have proddb. I run following command:

pg_dump --format=custom --dbname=postgresql://postgres:postgres@localhost:5432/postgres | PGPASSWORD=pa$$word pg_restore -v --clean --create --host=production.local --username=swasher --dbname=proddb

In the terminal, i see that this command creating postgres database instead proddb:

pg_restore: connecting to database for restore
pg_restore: dropping DATABASE postgres
pg_restore: creating DATABASE "postgres"
pg_restore: connecting to new database "postgres"
pg_restore: creating COMMENT "DATABASE postgres"
pg_restore: creating EXTENSION "hstore"
pg_restore: creating COMMENT "EXTENSION hstore"
pg_restore: terminated by user

Why pg_restore ignored specified dbname key?

英文:

I want copy a 'local' postgres database, which living in docker, into remote machine. Local docker's databse have default name postgres, and remote have proddb. I run following command:

pg_dump --format=custom --dbname=postgresql://postgres:postgres@localhost:5432/postgres | PGPASSWORD=pa$$word pg_restore -v --clean --create --host=production.local --username=swasher --dbname=proddb

In the terminal, i see that this command creating postgres database instead proddb:

pg_restore: connecting to database for restore
pg_restore: dropping DATABASE postgres
pg_restore: creating DATABASE "postgres"
pg_restore: connecting to new database "postgres"
pg_restore: creating COMMENT "DATABASE postgres"
pg_restore: creating EXTENSION "hstore"
pg_restore: creating COMMENT "EXTENSION hstore"
pg_restore: terminated by user

Why pg_restore ignored specified dbname key?

答案1

得分: 2

If you use the --create option with pg_restore, the restore process will first execute:

使用 `pg_restore` 的 `--create` 选项,还原过程将首先执行:

CREATE DATABASE postgres;

then connect to the new database with:

然后连接到新数据库:

\c postgres

and proceed to restore the dump.

然后继续还原备份。

If you additionally add --clean, pg_restore will first execute:

如果您另外添加 --cleanpg_restore 将首先执行:

DROP DATABASE postgres;

So the database you connect to with pg_restore is irrelevant, because pg_restore will create and connect to database postgres anyway.

因此,您连接到的数据库与 pg_restore 无关,因为 pg_restore 无论如何都会创建并连接到数据库 postgres

If you want to restore the dump to a different database, omit the --create option, so that pg_restore connects to proddb and restores the dump to that database.

如果您想将备份还原到不同的数据库,请省略 --create 选项,这样 pg_restore 将连接到 proddb 并还原备份到该数据库。

英文:

If you use the --create option with pg_restore, the restore process will first execute

CREATE DATABASE postgres;

then connect to the new database with

\c postgres

and proceed to restore the dump.

If you additionally add --clean, pg_restore will first execute

DROP DATABASE postgres;

So the database you connect to with pg_restore is irrelevant, because pg_restore will create and connect to database postgres anyway.

If you want to restore the dump to a different database, omit the --create option, so that pg_restore connects to proddb and restores the dump to that database.

huangapple
  • 本文由 发表于 2023年5月17日 16:19:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/76269945.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定