如何使用pg-promise insert helper将表名作为别名插入?

时间:2017-06-13 14:45:05

标签: node.js postgresql pg-promise

这是comment

的后续问题

用例适用于以下查询:

INSERT INTO "GamingLogs" AS GL ("GameName", "TimeSpent")
VALUES ('LOL', '2'),
    ('DOTA2', '1'),
    ('Mobius Final Fantasy', '3')
ON CONFLICT ("GameName") DO UPDATE
SET "TimeSpent" = GL."TimeSpent" + EXCLUDED."TimeSpent"

假设数据表包含GameName上的主字符串键和整数列TimeSpent。我们的目的是假设它在给定的GameName上记录了我一生中的总游戏时间。

更新:简化了查询并添加了数据结构。

1 个答案:

答案 0 :(得分:1)

您可以使用helpers命名空间中的灵活类型来生成您自己的自定义插入内容:

const pgp = require('pg-promise')(/*initialization options*/);

// data = either one object or an array of objects;
// cs = your ColumnSet object, with table name specified
// alias = the alias name string
function createInsertWithAlias(data, cs, alias) {
    return pgp.as.format('INSERT INTO $1 AS $2~ ($3^) VALUES $4^', [
        cs.table, alias, cs.names, pgp.helpers.values(data, cs)
    ]);
}

然后你只需将冲突解决条款附加到它,因为它是静态的。

示例中使用的API: