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


person woozyking    schedule 13.06.2017    source источник
comment
Хотя я понимаю ваш вопрос из ссылки, было бы хорошо, если бы вы могли уточнить и предоставить все подробности прямо здесь, чтобы и вопрос, и ответы могли быть полезны другим, без необходимости переходить к другому вопросу. Плюс это поможет поисковому индексу найти по ключевым словам.   -  person vitaly-t    schedule 13.06.2017
comment
Во-первых, важно показать, что представляет собой ваша модель данных, чтобы иметь возможность показать, как данные могут быть сопоставлены со значениями запроса. Я бы предположил, что вы не используете Date, Hour как свойства, что-то еще, но я бы просто предположил.   -  person vitaly-t    schedule 13.06.2017
comment
Структура данных может не иметь значения, но я обновил запрос в вопросе и добавил объяснение структуры данных, что, надеюсь, сделает вопрос более сосредоточенным на заголовке.   -  person woozyking    schedule 13.06.2017


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

  • as.format — используется всеми методами запросов для форматирования запросы
  • ColumnSet.table – дает вам специализированный объект таблицы
  • ColumnSet.names — дает вам все отформатированные столбцы
  • helpers.values — выдает все значения в формате
person vitaly-t    schedule 13.06.2017
comment
Без псевдонима запрос будет ERROR: column reference "TimeSpent" is ambiguous. Второй подход лучше, небольшая разница в том, что я просто использовал pgp.helpers.values в строке шаблона. - person woozyking; 13.06.2017
comment
@woozyking Я обновил ответ. И да, вы можете решить эту проблему разными способами, helpers API максимально гибок для этого. Пример, который я привел, является лишь одним из таких подходов. - person vitaly-t; 14.06.2017