2013-04-07 23 views
6

Basit bir sorgu yaparken bir operatör uyuşmazlığı hatası alınıyor. Bunun nedeni nedir?PostgreSQL Hata: operatör mevcut değil: name = tamsayı

 
dev_db=# `select * from registrants where user=1;` 
ERROR: operator does not exist: name = integer 
LINE 1: select * from registrants where user=1; 
              ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

Tablo tanım:

 
dev_db=# \d+ registrants 
           Table "public.registrants" 
    Column |   Type   |  Modifiers  | Storage | Description 
--------------+--------------------------+--------------------+----------+------------- 
user   | integer     | not null   | plain | 
degree  | text      |     | extended | 
title  | text      |     | extended | 
organization | text      |     | extended | 
address  | text      |     | extended | 
city   | text      |     | extended | 

Indexes: 
    "registrants_pkey" PRIMARY KEY, btree ("user") 
Foreign-key constraints: 
    "registrants_country_fkey" FOREIGN KEY (country) REFERENCES countries(id) 
    "registrants_user_fkey" FOREIGN KEY ("user") REFERENCES users(id) 
Referenced by: 
    TABLE "class_evaluations" CONSTRAINT "class_evaluations_registrant_fkey" FOREIGN KEY (registrant) REFERENCES registrants("user") 

Triggers: 
    archive_registrants BEFORE DELETE OR UPDATE ON registrants FOR EACH ROW EXECUTE PROCEDURE archive_reg_table() 
Has OIDs: no 

cevap

7

kılavuzuna göre, USER ayrılmış bir anahtar kelimedir. Sözdizimi hatasını önlemek için alıntı yapmalısınız.

PostgreSQL Reserved Keyword List

Eğer veritabanını değiştirmek ayrılmış bir anahtar kelime değildir birine sütun adını değiştirmek için zamanın varsa

SELECT * FROM registrants WHERE "user" = 1 
. Bu gelecekte baş ağrısı önlemek için yardımcı olacaktır.

+3

@ user2254435: Başlamak için ayırt edici kelimeleri tanımlayıcılar olarak kullanmayın. –

+0

Hızlı yanıt için teşekkür ederiz. Bu büyük bir mevcut uygulamadan ve değiştirmek için çok kolay değil. – DevR

İlgili konular