2011-07-11 10 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

の代わりにINを使用する必要があります。**完全**エラーメッセージ(不満を言っているキャストを示すものがあるはずです)と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

どのようにこれをしようとしていますか?経由で? 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