尝试向 table 插入新值时列不存在错误(在使用 nodejs 和 pg 库的 heroku 上)

Column doesn't exist error when trying to insert new value to table (on heroku using nodejs and pg library)

我正在玩 heroku 上的一个应用程序。它使用 heroku postgresql 但我无法向其插入数据。 代码如下所示:

const { Client } = require('pg');

function connect2DB(){
  const client = new Client({
    connectionString: process.env.DATABASE_URL,
    ssl: {
      rejectUnauthorized: false
    }
  });
  client.connect();
  return client;
}

function createLastUseTableIfNotThere(){
  try{
    const client = connect2DB();
    client.query('CREATE TABLE IF NOT EXISTS "lastUse" ("clientKey" VARCHAR(255), "lastDate" date, PRIMARY KEY ("clientKey"));', (err, res) => {
      if(err){
        console.error(`createLastUseTableIfNotThere db query failed!`);
        console.error(err);
      }else{
        console.log(res);
      }
      client.end();
    });
  } catch(e){
    console.error(`createLastUseTableIfNotThere failed!`);
    console.error(e);
  }
}

function lastUseMiddleware(req, res, next){
  const clientKeyValue = req.context.clientKey;
  try{
    if(clientKeyValue != undefined){
      console.log(`lastUseMiddleware: upserting clientKey ${clientKeyValue}`);
      const client = connect2DB();
      client.query(`
        INSERT INTO "lastUse"("clientKey","lastDate")
        VALUES("${clientKeyValue}",now())
        ON CONFLICT ("clientKey")
        DO UPDATE SET "lastDate" = now();`,
        (err, res) => {
          if(err){
            console.error(`lastUseMiddleware: upserting failed!`);
            console.error(err);
          }
          client.end();
      });
    }else{
      console.warn(`lastUseMiddleware: clientKey is undefined: ${clientKey}`);
    }
  }catch(e){
    console.error(`lastUseMiddleware thrown`);
    console.error(e);
  }
  next();
}

调用 createLastUseTableIfNotThere 函数正常工作,我可以看到在 heroku 上创建的 table。 调用 lastUseMiddleware 函数会在日志中生成以下错误:

lastUseMiddleware: upserting clientKey 3f825846-791c-3c5b-8916-4e2c827165b2

lastUseMiddleware: upserting failed!

error: column "3f825846-791c-3c5b-8916-4e2c827165b2" does not exist.

我的意图是使用给定的 clientKey 和当前日期向 table 添加新行。 看起来 clientKey 被视为列标识符。 知道为什么会这样吗? 也许 clientKey 字段不应该用作 table 中的主键?

Postgres 将双引号视为列。您可以使用单列。

喜欢,

VALUES('${clientKeyValue}',now())