Как вставить имя таблицы в качестве псевдонима с помощью помощника вставки pg-обещания?

Это дополнительный вопрос из этого комментария

Вариант использования для такого запроса ниже:

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 ответ

Решение

Вы можете использовать гибкие типы в пространстве имен помощников, чтобы сгенерировать свою собственную вставку:

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, используемый в примере:

  • as.format - используется всеми методами запросов для форматирования запросов
  • ColumnSet.table - предоставляет вам специализированный табличный объект
  • ColumnSet.names - выдает все отформатированные столбцы
  • helpers.values - выдает все отформатированные значения
Другие вопросы по тегам