给定以下架构(例如)
CREATE TABLE "test" (
"id" int,
"title" varchar
);
在 NodeJS 中,我尝试使用以下内容进行更新
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=nv.id;',
[1,'test'],
function(err, res){ ... }
);
它给了我以下错误:'错误:运算符不存在:整数=文本'
好的,让我们尝试停止使用"t"."id"=nv.id
并重用一个可用参数:
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=$1;',
[1,'test'],
function(err, res){ ... }
);
仍然'error: operator does not exist: integer = text'。
好的,现在让我们添加另一个$3
占位符:
client.query(
'WITH new_vals ("id","title") AS (VALUES($1,$2)) ' +
'UPDATE "test" "t" SET "id"=nv.id, "title"=nv.title ' +
'FROM new_vals nv ' +
'WHERE "t"."id"=$3;',
[1,'test',1],
function(err, res){ ... }
);
另一个错误:'错误:列“id”是整数类型,但表达式是文本类型'
我完全迷路了。为什么不使用int
WHERE 中的操作符类?这里有什么问题?
奇怪的是,UPDATE
没有子句的标准形式WITH
工作得很好......
如果您需要使用代码:https ://gist.github.com/kolypto/7455957