2011-07-11 135 views
-1

我试图更新Postgres数据库设置一个布尔值,但我发现了以下错误Postgres的 - 转换成布尔

没有运营商匹配指定名称和参数类型。您可能需要 才能添加显式类型转换。

我已经减少了表格描述以显示它的结构。

 Column  |   Type    | Modifiers 
--------------------+-----------------------------+----------- 
archived   | boolean      | 

db中的列当前为空,所以我没有其他人可以用作比较。

我已经试过如下:

UPDATE table_name SET archived=TRUE WHERE id=52; 
UPDATE table_name SET archived='t' WHERE id=52; 
UPDATE table_name SET archived='1' WHERE id=52; 
UPDATE table_name SET archived='t'::boolean WHERE id=52; 

这些都不工作过。

如何将我的UPDATE转换为布尔值?

UPDATE:

play_mercury=# UPDATE opportunities SET archived=TRUE WHERE id=(52,55,35,17,36,22,7,2,27,15,10,9,13,5,34,40,30,23,21,8,26,18,3,42,25,20,41,28,19,14,39,44,16,24,4,33,54,47,29,38,64); 
ERROR: operator does not exist: bigint = record 
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts. 
+4

请张贴** **完全错误消息(应该有一些指示其丢在抱怨)和ID列的定义。 'UPDATE table_name SET archived = TRUE ..'完全有效 –

+0

所有的UPDATE格式在Postgres 8.3中都能正常工作。 – Flimzy

+0

是'id'整数吗? –

回答

5

的问题是在WHERE id=(52,55,...)

用途:WHERE id IN (52,55,...)

+0

完美,非常感谢:-) – Shaun

+4

很明显,你从来没有尝试'UPDATE ... WHERE ID = 52;'请下一次,试着张贴你尝试的确切声明和错误给你。否则,你会让事情变得更难以帮助你。 –

+0

没问题。谢谢你的时间:-) – Shaun

0

你怎么想这个完全错误的信息?通过plsql? 按照docs这些应该是有效的,这也为我工作:

tmp=# create table bar (a boolean, b int); 
CREATE TABLE 
tmp=# insert into bar values (TRUE, 1); 
INSERT 0 1 
tmp=# update bar set a=false where b=1; 
UPDATE 1 
tmp=# \d bar 
     Table "public.bar" 
Column | Type | Modifiers 
--------+---------+----------- 
a  | boolean | 
b  | integer | 
3

WHERE条件是错误的。需要在使用的,而不是=

UPDATE opportunities 
    SET archived=TRUE 
WHERE id IN (52,55,35,17,36,22,7,2,27,15,10,9,13,5,34,40,30,23,21,8,26,18,3,42,25,20,41,28,19,14,39,44,16,24,4,33,54,47,29,38,64); 
+0

Tjat很棒,谢谢。 – Shaun