$ tar -tf dvdrental.tar
toc.dat
2163.dat
...
2189.dat
restore.sql
提取后
$ file *
2163.dat: ASCII text
...
2189.dat: ASCII text
restore.sql: ASCII text, with very long lines
toc.dat: PostgreSQL custom database dump - v1.12-0
restore.sql
的目的是什么? toc.dat
是二进制的,但我可以打开它,它看起来像一个sql
脚本也是。 restore.sql
的目的有何不同
和toc.dat
?
文件中的以下引用并未回答我的问题:
每个表和一个blob被转储一个文件,加上一个描述转储对象的所谓的目录文件 以pg_restore可读取的机器可读格式。
restore.sql
文件之外,tar转储包含.dat
,
tar转储中的sql脚本文件restore.sql
和toc.dat
之间有什么区别?
plain dump(只有一个sql脚本文件)?感谢。
答案 0 :(得分:2)
restore.sql
未使用 pg_restore
。请参阅src/bin/pg_dump/pg_backup_tar.c
的评论:
* The tar format also includes a 'restore.sql' script which is there for
* the benefit of humans. This script is never used by pg_restore.
toc.dat
是目录。它包含用于创建和删除转储中的每个对象的命令,pg_restore
使用该命令来创建对象。它还包含COPY
条语句,这些语句从*.dat
文件中加载数据。
您可以使用pg_restore -l
以易于理解的形式提取目录,还可以编辑结果以使用pg_restore -L
仅还原特定对象。
<number>.dat
文件是包含表数据的文件,它们由COPY
和toc.dat
中的restore.sql
语句使用。
答案 1 :(得分:1)
这看起来是一个将数据恢复到PostgresQL的脚本。该脚本是使用pg_dump创建的。
如果您想要恢复,请查看pg_restore。
dat文件包含要在sql脚本中的\copy
命令中恢复的数据。
sql文件中未引用toc.dat
文件。如果您尝试使用cat toc.dat|strings
查看内部,您会发现它包含的数据与sql文件非常相似,但还有一些internal ids。
我认为它可能是在某些时候没有SQL的情况下工作,但这不是它现在的工作方式。请参阅生成toc here的代码。