【问题标题】:PostgreSQL Convert .sql file to .csv filePostgreSQL 将 .sql 文件转换为 .csv 文件
【发布时间】: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


【解决方案1】:

感谢AdamKG。 AdmKG 已经给了我解决方案。

pg_restore --section=data -f /path/to/new_users.sql /path/to/existing/users.sql

对于那些不了解/path/to/的人,它是新目标文件的路径,/path/to/existing是保存PostgreSQLusers.sql文件到硬盘或任何其他文件的路径存储介质。

这个解决方案不是我的,而是 AdamKG 的。

这篇文章是为了方便像我这样的其他用户。

【讨论】:

  • 将“自定义”转储文件 (pg_dump -Fc ...) 的结果扩展名为 .sql 是非常不寻常的。
  • Postrgres 9.6.6 附带的 pg4Admin 提供了BackUp.sql.bak。下载后,@AdamKG 提供的解决方法有助于生成一个.sql 文件,其中数据为Tab Separated。可以搜索Tab 值并用命令替换,将数据转换为.csv 格式并轻松恢复数据。它对我很有效。最好的部分是我还对我的专业软件开发人员进行了这种从.sqldump 恢复数据的方法的培训。
猜你喜欢
  • 2013-11-17
  • 2021-12-12
  • 2013-06-21
  • 2013-02-03
  • 2015-07-14
  • 2021-01-31
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
相关资源
最近更新 更多