尝试向 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())
我正在玩 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())