如何从 Postgres 转储中pg_restore一个表及其架构?



我在恢复表的架构时遇到了一些困难。我转储了我的 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

作为一个更一般的答案(我需要从一个巨大的备份中恢复一个表(,你可能想看看这篇文章: 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

还原单个架构限定表

基于 @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文档。

来自 Heroku DevCenter 这里

Heroku

Postgres直接集成到Heroku CLI中并提供 许多简化常见数据库任务的有用命令

您可以在此处检查您的环境是否已正确配置。

通过这种方式,您可以使用 Heroku CLI pg:pull 命令将远程数据从 Heroku Postgres 数据库拉取到计算机上的本地数据库。

例如:

$ heroku pg:pull HEROKU_POSTGRESQL_MAGENTA mylocaldb --app sushi

相关内容

  • 没有找到相关文章

最新更新