首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从.sql postgresql备份中恢复单个表?

如何从.sql postgresql备份中恢复单个表?
EN

Stack Overflow用户
提问于 2013-02-12 14:37:21
回答 7查看 44.5K关注 0票数 19

从数据库中错误地删除了表的行。我们有一个数据库备份,它会产生一个sql文件,可以像这样恢复:

代码语言:javascript
复制
psql -h localhost -d proddump -f /Users/U/Desktop/prod_db_backup/PostgreSQL/site_prod.sql

这最终会在本地执行完全恢复。但我们需要的是将单个表的行恢复到生产环境。关于如何在PostgreSQL 9.1中实现这一点有什么建议吗?

谢谢

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-02-12 17:19:53

不要做SQL备份,如果你需要单表恢复等。Use pg_dump's -Fc option -“自定义”格式。这可以使用pg_restore恢复。选择性恢复是可能的,就像其他各种方便的功能一样。如果需要,pg_restore可以稍后将自定义格式的转储文件转换为SQL转储文件。

如果你坚持使用现有的转储,你唯一的选择是:

  • 使用文本编辑器将目标表数据提取到一个单独的文件中,然后将其恢复;或者
  • 将转储文件恢复到一次性数据库,然后使用pg_dump进行选择性转储,仅包括该表。因为它是一次性的,你可以在一些卸载的快速但不安全的机器上使用一个单独的Pg实例,在那里你可以打开所有的“让它变快,但如果你喜欢吃我的数据”选项,比如fsync=off。您永远不应该在生产环境中设置它。
票数 13
EN

Stack Overflow用户

发布于 2014-02-26 00:15:15

我不知道有什么工具可以做到这一点,但是下面这行代码从my_backup.sql文件中提取precious_table

代码语言:javascript
复制
sed -n '/^COPY precious_table /,/^\\\.$/p' my_backup.sql
票数 22
EN

Stack Overflow用户

发布于 2013-02-12 17:55:07

您可以在roder中使用grep + sed来获取表数据:

首先,您需要确定边界:

代码语言:javascript
复制
$ fgrep -Ehn '^(COPY |CREATE TABLE )' db.sql
49:CREATE TABLE test (
60:CREATE TABLE test2 (
71:CREATE TABLE test3 (
82:COPY test (i) FROM stdin;
100090:COPY test2 (i) FROM stdin;
200098:COPY test3 (i) FROM stdin;

为了提取表test2的数据:

代码语言:javascript
复制
sed -n '100090,200097p' < db.sql | sed -e 's/^COPY test2/COPY new_table_name/' > new_table_name.sql

请注意,您需要从第二个数字中减去1(即排除下一个拷贝stmt)

现在,您可以加载new_table_name.sql并恢复所需的数据。现在,您可以将数据装载到新表中

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14826862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档