【问题标题】:What is the purpose of the sql script file in a tar dump?tar 转储中的 sql 脚本文件的用途是什么?
【发布时间】:2018-11-27 09:55:48
【问题描述】:

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. 由于 tar 转储除了 .dat 文件之外还包含 restore.sql, tar 转储中的 sql 脚本文件 restore.sqltoc.dat 和 普通转储(只有一个 sql 脚本文件)?

谢谢。

【问题讨论】:

    标签: postgresql dump


    【解决方案1】:
    • 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 使用它来创建对象。它还包含从*.dat 文件加载数据的COPY 语句。

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

    • <em>&lt;number&gt;</em>.dat文件是包含表数据的文件,它们被toc.datrestore.sql中的COPY语句使用。

    【讨论】:

    • 谢谢。如果是目录,为什么toc.dat 看起来像包含CREATE DATABASE 和其他SQL 命令的SQL 脚本?
    • 看了代码,原来我的回答大错特错。查看更新的答案。
    • 再次感谢。 restore.sqltoc.dat都是SQL脚本,它们有什么区别?
    • PostgreSQL 使用一个,如果你想用tar 提取转储并用psql 恢复它,一个对你来说很好。
    • 哪个是哪个? toc.dat 用于 postgresql,而 restore.sql 用于 psql?
    【解决方案2】:

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

    如果您想恢复,请查看pg_restore

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多