pg_restore失败,缺少表空间eventHough --no-tablespaces

时间:2017-11-17 11:46:03

标签: postgresql

我尝试使用以下命令将数据库导入postgres:

public function get_class_name()
        {
            $id=$this->input->post('c');
            echo json_encode($id);

        }

精美的手册说:

  

- 无表空间

     

不要输出命令来选择表空间。使用此选项,将在还原期间的任何表空间中创建所有对象。

我认为这意味着我不必创建名称空间,转储起始点。由于导入失败,

"C:\Program Files\PostgreSQL\9.5\bin\pg_restore.exe" --dbname=postgres --clean --create --format=d --jobs=16 --no-tablespaces --host=localhost --username=postgres "S:\Directory-Dump_Inn"

我猜,这个假设是错误的。那么手册中的解释是什么意思呢? 如果我事先创建表空间,导入工作正常。

编辑:导入服务器版本为9.5.4,导出服务器版本为9.6.3。可能导出命令也很重要:

ERROR: tablespace "ts_inn" does not exist 

导出是否遗漏了"C:\Program Files\PostgreSQL\9.6\bin\pg_dump.exe" --host localhost --port 5432 --username "postgres" --no-password --format directory --section pre-data --section data --section post-data --compress 0 --jobs 4 --verbose --file "F:\Postgres-Backup\Directory-Dump_Inn" "inn" 2>> %logfile% 的罪魁祸首?如果是,如果我将--no-tablespaces作为参数添加到pg_dump,那么为什么我会在导入期间使用--no-tablespaces?显然,转储文件中不会有任何--no-tablespaces

1 个答案:

答案 0 :(得分:1)

2016年9月在this提交中修复了与您的问题非常相似的问题以修复bug #14315,因此请确保您拥有PostgreSQL 9.5或更高版本的最新修补程序。

但即使使用这些补丁,您的示例也会失败,因为您没有将--no-tablespaces添加到pg_dump的调用中。

这有点令人惊讶,但是为了抑制转储中TABLESPACE的{​​{1}}子句,仅仅调用CREATE DATABASE是不够的。必须使用该选项创建转储。