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

What is the purpose of the sql script file in a tar 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?

    文档中的以下引述没有回答我的问题:

    with one file for each table and blob being dumped, plus a so-called Table of Contents file describing the dumped objects in a machine-readable format that pg_restore can read.

  3. 因为 tar 转储包含 restore.sql 除了 .dat 文件, sql 脚本文件 restore.sqltoc.dat 在 tar 转储和 普通转储(只有一个 sql 脚本文件)?

谢谢。

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

创建的

如果您想恢复,请查看pg_restore

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

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

我认为它可能本来打算在某个时候没有 SQL 的情况下工作,但现在不是这样工作的。查看生成 toc here.

的代码
  • 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是内容的table。它包含在转储中创建和删除每个对象的命令,pg_restore 使用它来创建对象。它还包含从 *.dat 文件加载数据的 COPY 语句。

    您可以使用 pg_restore -l 以人类可读的形式提取内容的 table,并且您可以使用 pg_restore -L 编辑结果以仅恢复特定对象。

  • <em><number></em>.dat 文件是包含 table 数据的文件,它们由 toc.datrestore.sql 中的 COPY 语句使用。