当前位置: 首页 > 面试题库 >

如何使用node-postgres将多行正确插入PG?

太叔凌龙
2023-03-14
问题内容

可以这样插入一行:

client.query("insert into tableName (name, email) values ($1, $2) ", ['john', 'john@gmail.com'], callBack)

这种方法会自动注释掉任何特殊字符。

如何一次插入多行?

我需要实现这一点:

"insert into tableName (name, email) values ('john', 'john@gmail.com'), ('jane', 'jane@gmail.com')"

我可以只使用js字符串运算符手动编译此类行,但是随后我需要以某种方式添加特殊字符转义符。


问题答案:

下面这篇文章:性能提升,从PG-承诺库,其建议的方法:

// Concatenates an array of objects or arrays of values, according to the template,
// to use with insert queries. Can be used either as a class type or as a function.
//
// template = formatting template string
// data = array of either objects or arrays of values
function Inserts(template, data) {
    if (!(this instanceof Inserts)) {
        return new Inserts(template, data);
    }
    this._rawDBType = true;
    this.formatDBType = function () {
        return data.map(d=>'(' + pgp.as.format(template, d) + ')').join(',');
    };
}

完全按照您的情况使用的示例:

var users = [['John', 23], ['Mike', 30], ['David', 18]];

db.none('INSERT INTO Users(name, age) VALUES $1', Inserts('$1, $2', users))
    .then(data=> {
        // OK, all records have been inserted
    })
    .catch(error=> {
        // Error, no records inserted
    });

它也将与一系列对象一起工作:

var users = [{name: 'John', age: 23}, {name: 'Mike', age: 30}, {name: 'David', age: 18}];

db.none('INSERT INTO Users(name, age) VALUES $1', Inserts('${name}, ${age}', users))
    .then(data=> {
        // OK, all records have been inserted
    })
    .catch(error=> {
        // Error, no records inserted
    });

更新1

有关通过单个INSERT查询的高性能方法,请参见使用pg-promise进行多行插入。

更新2

现在,这里的信息已经很老了,请参阅“自定义类型格式化”的最新语法。过去_rawDBType是现在rawType,并formatDBType已重命名为toPostgres



 类似资料:
  • 我正在努力将JSON对象插入我的postgres v9.4 DB。我已经将名为“evtjson”的列定义为类型json(而不是jsonb)。 我试图在Java(jdk1.8)中使用准备好的语句将Json对象(使用JEEjavax.json库构建)插入到列中,但我一直遇到SQLException错误。 我使用以下方法创建JSON对象: 然后,我将这个对象作为参数传递给另一个方法,以使用准备好的语句将

  • 问题内容: 我想进行批量插入事务,但是我不太确定如何使用CTE或更有效的方法来执行此操作。这是我到目前为止的内容: 我的CTE的问题是我不知道如何从要插入的第一条插入语句中获取单个ID到第二条具有“ product_id”外键的语句的相应记录中。 我将如何构造该语句以使其起作用?我对其他解决方案持开放态度,这些解决方案提供了更有效的方法来实现相同的结果。 问题答案: 以下是您要做什么的合理解释:

  • 问题内容: 我正在循环列表并将其插入数据库中,但它得到的更新记录一个接一个。最后我只在列表中的数据库最后一条记录中看到。 输入名称:Linux,Windows,Mac hibernate.cfg.xml: 这里有3次获得循环并插入数据库。但是以某种方式覆盖了这些值。因为我看到sql插入和更新在控制台中运行。 请帮助我将多个行插入数据库。 问题答案: Hibernate文档中有一章非常好的关于批处理

  • 问题内容: 我想知道使用Node.js将大量插入Mongodb(尽管可能是任何其他数据库)的正确方法是什么 我以下面的代码为例,尽管我相信它是底层的,因为db.close()可以在所有异步collection.insert调用完成之前运行。 问题答案: 如果您的MongoDB服务器是2.6或更高版本,最好利用写命令 Bulk API 来执行大容量插入操作,这些操作只是服务器顶部的抽象,以便于构建大

  • 我在PostgreSql中创建了一个表books。 我的Json: 如何通过java代码将json插入Postgres?

  • 问题内容: PostgreSQL 9.5的upsert的正确语法,下面的查询显示错误,为什么? 我尝试更改为 然后显示错误,但是 我不想将gallery_id或category_id设置为唯一, 因为我想确保两列都相同然后进行更新.... 如何正确地在postgres 9.5中进行upsert? 如果需要唯一列,我应该使用其他方法,怎么办? 我想确保多列都冲突然后进行更新,正确的用法是什么 表(c