首页 > 解决方案 > 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 中删除引号?

标签: node.jspostgresqlpgpg-promise

解决方案


试试这样:

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 }
);

更多信息在这里


推荐阅读