我按照手册进行操作: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 中排除表,但这不会创建所需的插入)
比阿特丽斯。不幸的是,
pg_dump
将转储反映 Timescale 底层实现的命令。例如, _hyper_382_8930_chunk
是您拥有的 auto
超表下的一个块。
我可以问你为什么不希望
pg_dump
这样做吗? Postgres 在转储上创建的 SQL 文件旨在供 pg_restore
使用。所以只要你转储和恢复并看到正确的状态,转储/恢复就没有问题。
也许你问的是不同的问题?
您可以使用 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 运行它。命令的输出(或任何错误)都会记录到控制台。