带有pg-promise

时间:2016-11-28 08:43:21

标签: node.js postgresql pg-promise

我有一个大型数据集,我想插入到postgres db中,我可以使用像这样的pg-promise实现这个

function batchUpload (req, res, next) {
    var data = req.body.data;
    var cs = pgp.helpers.ColumnSet(['firstname', 'lastname', 'email'], { table: 'customer' });
    var query = pgp.helpers.insert(data, cs);
    db.none(query)
    .then(data => {
        // success;

    })
    .catch(error => {
        // error;
        return next(error);
    });
}

数据集是一个像这样的对象数组:

           [
                {
                    firstname : 'Lola',
                    lastname : 'Solo',
                    email: 'mail@solo.com',
                },
                {
                    firstname : 'hello',
                    lastname : 'world',
                    email: 'mail@example.com',
                },
                {
                    firstname : 'mami',
                    lastname : 'water',
                    email: 'mami@example.com',
                }
            ]

挑战是我有一个列added_at,它不包含在数据集中,不能是null。如何为查询添加每个记录插入的时间戳。

1 个答案:

答案 0 :(得分:0)

根据ColumnConfig语法:

const col = {
    name: 'added_at',
    def: () => new Date() // default to the current Date/Time
};

const cs = pgp.helpers.ColumnSet(['firstname', 'lastname', 'email', col], { table: 'customer' });

或者,您可以通过许多其他方式对其进行定义,因为ColumnConfig非常灵活。

示例:

const col = {
    name: 'added_at',
    mod: '^', // use raw-text modifier, to inject the string directly
    def: 'NOW()' // use NOW() for the column
};

或者您可以使用属性init动态设置值:

const col = {
    name: 'added_at',
    mod: '^', // use raw-text modifier, to inject the string directly
    init: () => {
        return 'NOW()';
    }
};

有关详细信息,请参阅ColumnConfig语法。

P.S。我是pg-promise的作者。