从 sql 文件恢复单表转储

Posted

技术标签:

【中文标题】从 sql 文件恢复单表转储【英文标题】:restore single table dump from a sql file 【发布时间】:2014-02-19 15:58:47 【问题描述】:

我有完整的 sql 文件转储,例如 dump_full.sql,大小为 1.3GB

它有一些表格,例如

dancing_core_spice
dancing_sea_beast

forde_clear_one
forde_super_now

现在我需要从dump_full.sqlfile 中恢复/获取/转储only data 这些表

psql -U postgres --table=dancing_core_spice dump_full.sql > dancing_core_spice.sql

我试过上面的命令,但它不起作用

那么任何人都可以告诉我如何从 sql 文件中提取单个表的转储(完整转储)

【问题讨论】:

【参考方案1】:

对于这些类型的操作,转储文件应采用使用pg_dump 创建的 postgresql 自定义格式:

pg_dump -Fc

然后你可以用pg_restore恢复单个表

pg_restore --table=dancing_core_spice dump_full.sql > dancing_core_spice.sql

This question 提供处理您实际案例的提示:

从文件中提取 sql 代码。使用编辑器、脚本或其他任何东西 将转储恢复到临时数据库并使用 pg_dump 再次转储

【讨论】:

您不能将 pg_restore 与 SQL 文件一起用作输入。 它给了我pg_restore: [archiver] input file appears to be a text format dump. Please use psql. 我们可以通过三个步骤从脚本中恢复删除的表。首先从 sql dump 中提取表结构,然后从 sql 文件中提取数据。第三步是运行 sql 以创建表和恢复。 a) sed -n '/CREATE TABLE tblname/,/);/p' /tmp/dump.sql >/tmp/ct.sql b)sed -n '/COPY tblnamel/,/\\./p' / tmp/dump.sql > /tmp/cv.sql c)psql -U postgres >\i /tmp/ct.sql >\i /tmp/cv.sql >\q 感谢您的提示。随意打开一个新的答案。但请注意,有时转储不是使用 COPY 而是使用 INSERT 语句甚至每行语句一个 INSERT 来完成

以上是关于从 sql 文件恢复单表转储的主要内容,如果未能解决你的问题,请参考以下文章

恢复 sql 转储文件时得到 errno 150

使用命令行恢复 MYSQL 转储文件

使用命令行恢复 MYSQL 转储文件

使用命令行恢复 MYSQL 转储文件

使用命令行恢复 MYSQL 转储文件

如何从 mysqldump 恢复转储文件?