postgresql 如何从Postgres转储中pg_restore一个表及其模式?

k75qkfdt  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(3)|浏览(211)

我在恢复表的模式时遇到了一些困难。我转储了我的Heroku Postgres数据库,我使用pg_restore将其中的一个表还原到我的本地数据库(它有超过20个表)。它已成功还原,但当我尝试将新数据插入表时遇到问题。
当我使用 psql 打开我的数据库时,我发现恢复的表可以使用所有数据,但是它的模式没有行。是否可以从转储中同时导入表及其模式?非常感谢。
这就是我如何将表还原到本地数据库中的方法:

pg_restore -U postgres --dbname my_db --table=message latest.dump

编辑:
我试过这样的东西之后官方文档,但它只是被阻止,什么也没有发生。我的数据库很小,不超过几兆字节,我试图恢复的表的模式不超过100行。

pg_restore -U postgres --dbname mydb --table=message --schema=message_id_seq latest.dump
cnh2zyt3

cnh2zyt31#

作为一个更一般的答案(我需要从一个 * 巨大的 * 备份中恢复一个表),你可能想看看这篇文章:https://thequantitative.medium.com/restoring-individual-tables-from-postgresql-pg-dump-using-pg-restore-options-ef3ce2b41ab6

# run the schema-only restore as root
pg_restore -U postgres --schema-only -d new_db /directory/path/db-dump-name.dump

# Restore per table data using something like
pg_restore -U postgres --data-only -d target-db-name -t table_name /directory/path/dump-name.dump
wr98u20j

wr98u20j2#

恢复单个schema限定表

基于@Haroldo_OK的答案;要指定表所属的架构,请在还原数据时使用--schema选项:

# Restore only the schema (data definitions), not data into the database new_db
# which is assumed to already exist
pg_restore -U postgres --schema-only -d new_db /directory/path/db-dump-name.dump

# Restore the data for the schema_name.table_name table in the new_db database
pg_restore -U postgres --data-only -d new_db --schema schema_name --table table_name /directory/path/dump-name.dump

如果要还原到的Postgres群集与进行备份的群集不同,则要还原到的群集可能不具有进行备份的群集的组/登录角色。在这种情况下,您可以选择指定--no-owner--no-privileges选项,以防止恢复对象所有权和访问权限(授予/撤销命令)。
pg_restore documentation

cvxl0en2

cvxl0en23#

来自Heroku DevCenter
Heroku Postgres直接集成到Heroku CLI中,并提供了许多有用的命令来简化常见的数据库任务
您可以在此处检查您的环境是否已正确配置。
通过这种方式,您可以使用Heroku CLI pg:pull命令将远程数据从Heroku Postgres数据库拉取到计算机上的本地数据库。
例如:

$ heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi

相关问题