【发布时间】:2021-03-23 22:55:33
【问题描述】:
在 PostgreSQL 中,我已将表 users 的记录备份到 users.sql。
在我对数据库中其他表中的数据进行了一些更改后,PostgreSQL 不允许我从 users.sql 恢复数据。
现阶段我唯一可用的解决方法是将 users.sql 转换为 .csv 文件,然后将数据复制并粘贴到表 users 中。
有没有办法将 PostgreSQL 备份文件 users.sql 转换为 users.csv?
【问题讨论】:
-
你没有指定你得到了什么错误,但由于它是由于对 other 表所做的更改,它可能是被违反的外键约束。如果是这样,转换为 CSV 将无济于事 - 当您尝试恢复该数据时,它仍然会遇到相同的约束违规。
-
是的,你说的是对的。我无法返回并撤消在其他表中所做的更改。所以现在最好的解决方案是将
users.sql转换为users.csv。因此,寻找一种解决方案来理解PostreSQL.sql文件的文件格式或将其转换为.csv文件格式或.txt文件格式的工具。那么有没有办法呢? -
不是没有恢复表,没有。也就是说,将 .sql 转换为 .csv 的方法是“恢复 SQL,然后进行 CSV 导出”。如何手动编辑 .sql 以:A)删除任何 CREATE TABLE/ALTER TABLE 语句,B)更改要恢复的表名(例如 users_no_fks),然后在数据库中创建一个与用户具有相同列的表,但没有限制?此时,您可以恢复到该无 FK 表,然后恢复到
COPY users_no_fks to /path/to/users.csv CSV HEADER;。 -
users.sql转储文件是二进制格式。如果是文本,则根本没有问题。 -
哦,那很简单!使用
pg_restore --section=data -f /path/to/new_users.sql /path/to/existing/users.sql,它将创建一个new_users.sql,其中只有一个包含表数据的COPY 语句。在那里编辑表名,在您的数据库中创建相应的无 FK 表,恢复并重新导出,然后您就拥有了 CSV。 (pg_restore 无法直接转换为 CSV;您可以做的最好的事情是 --section=data 在继续加载和重新导出步骤之前获取表数据的纯文本转储。)
标签: postgresql