postgresql 是否可以在不插入hypertable的情况下从Timescale转储?

a64a0gku  于 4个月前  发布在  PostgreSQL
关注(0)|答案(2)|浏览(68)

我按照手册上:https://docs.timescale.com/v1.0/using-timescaledb/backup
当我把它转储到一个二进制文件中时,一切都按预期进行(可以轻松恢复)。
但是,当我把它转储到纯文本SQL中时,将创建到超表的插入。
假设我有一个'Auto'表,其中包含id、brand、speed列,并且只有一行:1,Opel,170
转储到SQL会导致这样的结果:

INSERT INTO _timescaledb_catalog.hypertable VALUES ...
INSERT INTO _timescaledb_internal._hyper_382_8930_chunk VALUES (1, 'Opel',170);

字符串
我需要的是这个(让TS在后台做工作):

INSERT INTO Auto VALUES (1,'Opel',170);


这可能吗?(我知道我可以从pg_dump中排除表,但这不会创建所需的插入)

yrefmtwq

yrefmtwq1#

Beatrice。不幸的是,pg_dump将转储反映Timescale底层实现的命令。例如,_hyper_382_8930_chunk是您拥有的auto超表的底层块。
我可以问一下为什么你不希望pg_dump这样做吗?Postgres在转储上创建的SQL文件是供pg_restore使用的。所以只要你转储和恢复并看到正确的状态,转储/恢复就没有问题。
也许你在问一个不同的问题。

hkmswyz6

hkmswyz62#

你可以使用Node.js中的child_process模块来运行shell命令。下面是一个运行pg_dump命令的简单脚本:

const { exec } = require('child_process');

const user = 'user';
const host = 'host';
const port = '5433';
const database = 'dbname';
const filename = 'dbname.dump';

const command = `pg_dump -U ${user} -h ${host} -p ${port} -d ${database} -F c -b -v -f "${filename}"`;

exec(command, (error, stdout, stderr) => {
    if (error) {
        console.error(`Error: ${error.message}`);
        return;
    }

    if (stderr) {
        console.error(`Stderr: ${stderr}`);
        return;
    }

    console.log(`Stdout: ${stdout}`);
});

字符串
此脚本使用提供的参数构造pg_dump命令,然后使用exec运行它。命令的输出(或任何错误)将记录到控制台。

相关问题