tar转储中sql脚本文件的用途是什么?

时间:2018-06-18 14:10:39

标签: postgresql dump

a tar dump

$ 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
  1. restore.sql的目的是什么?
  2. toc.dat是二进制的,但我可以打开它,它看起来像一个sql 脚本也是。 restore.sql的目的有何不同 和toc.dat

    文件中的以下引用并未回答我的问题:

      

    每个表和一个blob被转储一个文件,加上一个描述转储对象的所谓的目录文件   以pg_restore可读取的机器可读格式。

  3. 由于除了restore.sql文件之外,tar转储包含.dat, tar转储中的sql脚本文件restore.sqltoc.dat之间有什么区别? plain dump(只有一个sql脚本文件)?
  4. 感谢。

2 个答案:

答案 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文件是包含表数据的文件,它们由COPYtoc.dat中的restore.sql语句使用。

    < / li>

答案 1 :(得分:1)

这看起来是一个将数据恢复到PostgresQL的脚本。该脚本是使用pg_dump创建的。

如果您想要恢复,请查看pg_restore

dat文件包含要在sql脚本中的\copy命令中恢复的数据。

sql文件中未引用toc.dat文件。如果您尝试使用cat toc.dat|strings查看内部,您会发现它包含的数据与sql文件非常相似,但还有一些internal ids

我认为它可能是在某些时候没有SQL的情况下工作,但这不是它现在的工作方式。请参阅生成toc here的代码。