从 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.sql
file 中恢复/获取/转储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 文件恢复单表转储的主要内容,如果未能解决你的问题,请参考以下文章