从数据库中错误地删除了表的行。我们有一个数据库备份,它会产生一个sql文件,可以像这样恢复:
psql -h localhost -d proddump -f /Users/U/Desktop/prod_db_backup/PostgreSQL/site_prod.sql这最终会在本地执行完全恢复。但我们需要的是将单个表的行恢复到生产环境。关于如何在PostgreSQL 9.1中实现这一点有什么建议吗?
谢谢
发布于 2013-02-12 17:19:53
不要做SQL备份,如果你需要单表恢复等。Use pg_dump's -Fc option -“自定义”格式。这可以使用pg_restore恢复。选择性恢复是可能的,就像其他各种方便的功能一样。如果需要,pg_restore可以稍后将自定义格式的转储文件转换为SQL转储文件。
如果你坚持使用现有的转储,你唯一的选择是:
pg_dump进行选择性转储,仅包括该表。因为它是一次性的,你可以在一些卸载的快速但不安全的机器上使用一个单独的Pg实例,在那里你可以打开所有的“让它变快,但如果你喜欢吃我的数据”选项,比如fsync=off。您永远不应该在生产环境中设置它。发布于 2014-02-26 00:15:15
我不知道有什么工具可以做到这一点,但是下面这行代码从my_backup.sql文件中提取precious_table:
sed -n '/^COPY precious_table /,/^\\\.$/p' my_backup.sql发布于 2013-02-12 17:55:07
您可以在roder中使用grep + sed来获取表数据:
首先,您需要确定边界:
$ 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的数据:
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并恢复所需的数据。现在,您可以将数据装载到新表中
https://stackoverflow.com/questions/14826862
复制相似问题