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

标签 javascript sql node.js postgresql node-postgres

我正在寻找一种有效的方法来获取原始 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/

相关文章:

javascript - position:fixed 用于 float 的 div

php - 获取某个日期范围内的所有表格

sql - 通过 Min/Max/Avg 操作对表中的值进行分组

node.js - 无法杀死 Windows 上的子进程

javascript - 使用图像删除表中的空白

javascript - onclick 向按钮输入值

javascript - 使用 React 和 axios 进行简单的表单传输

php - 使用 MySQL 和 PHP 对 2 个表的结果进行分组

node.js - 如何使用csv-parse的读写流

node.js - 在没有 $unwind 的情况下 $lookup 多个级别?