gpt4 book ai didi

javascript - 在 node.js 中导入 sql 文件并针对 PostgreSQL 执行

转载 作者:IT老高 更新时间:2023-10-28 22:13:01 26 4
gpt4 key购买 nike

我正在寻找一种有效的方法来获取原始 sql 文件并使其与 postgres 数据库同步执行,类似于通过 psql 运行它。

我有一个创建所有数据库、导入数据等的 sql 文件。我需要使用 node.js 执行此操作,但找不到任何自动执行此操作的模块。对于 node.js 应用程序本身,我们使用 node-postgres ('pg')、knex.js 和 bookshelf.js。我认为 pg 最适合这个。

我能想到的另一种选择是读取整个文件,用分号分隔,用空格替换换行符, trim 任何重复的空格,然后以顺序执行的方式将其逐个输入 pg,而不是异步。如果这确实是最有效的方法,并且如果还没有库可以解决这个问题,我会感到有点惊讶。我有点犹豫要不要跳进去,因为 SQL 语法本身可能有点挑战性,我可能会不小心把它混在一起。

提前说明一下:

  • psql 无法使用,因为它没有安装在目标机器上
  • 我选择以 sql 原生形式开发和源代码控制 sql 语句,因为 DBA 更容易使用和操作它

最佳答案

您可以在传递给 client.query

时用分号分隔后续查询

有效:

var pg = require('pg');

pg.connect('postgres://test:test@localhost/test', function(err, client, done){
client.query('CREATE TABLE test (test VARCHAR(255)); INSERT INTO test VALUES(\'test\') ');
done();
});

因此,这也有效:

var pg = require('pg');
var fs = require('fs');

var sql = fs.readFileSync('init_database.sql').toString();

pg.connect('postgres://test:test@localhost/test', function(err, client, done){
if(err){
console.log('error: ', err);
process.exit(1);
}
client.query(sql, function(err, result){
done();
if(err){
console.log('error: ', err);
process.exit(1);
}
process.exit(0);
});
});

关于javascript - 在 node.js 中导入 sql 文件并针对 PostgreSQL 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com