pg-обещание. Запрос работает при использовании необработанного запроса, но не при использовании помощников

Я получаю сообщение об ошибке, когда использую следующий код:

  var rows = [{"alex", "matos"},{"john","carmack"}]
  const cs = pg.pgp.helpers.ColumnSet(
    ["name","lastname"],
    { table: "user.user_data" }
  );

  const query = pg.pgp.helpers.insert(rows, cs);

  pg.db
    .none(query)
    .then(data => {
      console.log("success");
      res.status(200).send("OK");
    })
    .catch(err => {
      res.status(400).send("error");
    });

error: relation "user.user_data" does not exist.

однако, если я использую необработанный запрос, он обнаруживает таблицу:

var sql =
    "insert into user.user_data(name, lastname)" +
    "values($1,$2)";
    var values = [{"alex", "matos"},{"john","carmack"}];

    pg.db
    .none(sql, values)
    .then(data => {})
    .catch(err => {
        console.log(err);
        res.status(400).send("Error");
    });

вот мой файл конфигурации, откуда я получаю переменные pg и db:

const options = {
  promiseLib: promise,
  capSQL: true
};

//Postgres Connection
var pgp = require("pg-promise")(options);
var connectionString = `pg://${config.db.user}:${config.db.pass}@${
  config.db.url
}/${config.db.dbname}`;

var db = pgp(connectionString);

db.connect()
  .then(function(obj) {
    obj.done();
    console.log("connected");
  })
  .catch(err => {
    throw err;
  });


monitor.attach(options);

module.exports = {
  pgp: pgp,
  db: db
};

Как я могу решить эту проблему? Я хочу использовать первый код, потому что он быстрее.

Спасибо

редактировать: ЖУРНАЛЫ

INSERT INTO "user.user_data"("name","lastname") VALUES("alex", "matos")

как удалить кавычки из user.user_data?


person Blinhawk    schedule 14.08.2018    source источник


Ответы (1)


Попробуйте это так:

const cs = pg.pgp.helpers.ColumnSet(
    ['name', 'lastname'], { table: { table: 'user_data', schema: 'user' } }
);

Или вы можете попробовать так:

const table = new pgp.helpers.TableName('user_data', 'user');
const cs = pg.pgp.helpers.ColumnSet(
    ['name', 'lastname'], { table }
);

Подробнее здесь.

person Sookie Singh    schedule 14.08.2018
comment
Я автор pg-promise, и мне тут добавить нечего, хороший ответ. Оба варианта хороши. - person vitaly-t; 15.08.2018
comment
Благодарю вас! Это сработало. Быстрый вопрос, это должно быть быстрее? Потому что на вставку 70 тыс. строк ушло около 30 минут. - person Blinhawk; 15.08.2018
comment
@vitaly-t Спасибо и вау! Не ожидал увидеть ваш комментарий к моему ответу! Blinhawk - я думаю, что сам автор может дать вам больше информации о тестах. - person Sookie Singh; 15.08.2018
comment
@SookieSingh Чтобы вставить 70 тыс. записей, требуется около 1 секунды. Вы, должно быть, делаете что-то очень неправильно здесь... если только вы не вставляете огромные двоичные столбцы. - person vitaly-t; 15.08.2018