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

问题描述 投票:0回答:2

我按照手册进行操作:https://docs.timescale.com/v1.0/using-timescaledb/backup

当我将其转储到二进制文件中时,一切都会按预期进行(可以轻松恢复)。

但是,当我将其转储为纯文本 SQL 时,将创建对超级表的插入。是否可以对表本身创建 INSERTION?

假设我有一个“自动”表,其中包含 id、brand、speed 列 并且只有一排:1,欧宝,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 中排除表,但这不会创建所需的插入)

postgresql pg-dump timescaledb
2个回答
1
投票

比阿特丽斯。不幸的是,

pg_dump
将转储反映 Timescale 底层实现的命令。例如,
_hyper_382_8930_chunk
是您拥有的
auto
超表下的一个块。

我可以问你为什么不希望

pg_dump
这样做吗? Postgres 在转储上创建的 SQL 文件旨在供
pg_restore
使用。所以只要你转储和恢复并看到正确的状态,转储/恢复就没有问题。

也许你问的是不同的问题?


0
投票

您可以使用 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 运行它。命令的输出(或任何错误)都会记录到控制台。

© www.soinside.com 2019 - 2024. All rights reserved.