Sam*_*Sam 5 postgresql parameters go martini
我正在设置一个数据库,构建一个自定义Upsert,因为Postgresql显然还没有.无论如何,我的参数不是很好玩.
我正在使用Martini.
这段代码:
func CreateBook(ren render.Render, r *http.Request, db *sql.DB) {
_, err := db.Query("INSERT INTO books (title, first, last, class) SELECT $1, $2, $3, $4 WHERE NOT EXISTS (SELECT * FROM books WHERE title = $1)",
r.FormValue("title"),
r.FormValue("first"),
r.FormValue("last"),
r.FormValue("class"))
PanicIf(err)
Run Code Online (Sandbox Code Playgroud)
抛出此错误:
pq: inconsistent types deduced for parameter $1
Run Code Online (Sandbox Code Playgroud)
我相当肯定这是第二个$ 1的某种类型转换问题,但没有一个合理的解决方案似乎有意义.
这是一个愚蠢的问题,希望是一个简单的答案,但我无法在其他任何地方找到任何答案.
Ale*_*hov 17
由于数据库结构未知,很难确切地知道发生了什么.但是在sqlfiddle中尝试此查询会显示以下内容:
create table books (
id serial,
title varchar
);
PREPARE booksplan AS
INSERT INTO books (title)
SELECT $1 WHERE NOT EXISTS (SELECT * FROM books WHERE title = $1);
>> ERROR: inconsistent types deduced for parameter $1
>> Detail: text versus character varying Position: 59
Run Code Online (Sandbox Code Playgroud)
所以我怀疑当第一次使用$ 1时,文本被推断,但是varchar是为第二个$ 1推导的(因为它与title相比,即varchar).
作为解决方法,您可以尝试
_, err := db.Query(`INSERT INTO books (title, first, last, class)
SELECT CAST($1 AS VARCHAR), $2, $3, $4
WHERE NOT EXISTS (SELECT 1 FROM books WHERE title = $1)`,
Run Code Online (Sandbox Code Playgroud)