2013-04-07 10 views
6

Uzyskiwanie błędu niezgodności operatora podczas wykonywania prostego zapytania. Co to powoduje?Błąd PostgreSQL: operator nie istnieje: name = integer

 
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. 

definicja Tabela:

 
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 

Odpowiedz

7

Według instrukcji, USER jest zarezerwowanym słowem kluczowym. Musisz zacytować, aby uniknąć błędu składni.

SELECT * FROM registrants WHERE "user" = 1 

PostgreSQL Reserved Keyword List

Jeśli masz czas, aby zmienić bazę danych, należy zmienić nazwę kolumny do jednego, który nie jest zastrzeżony słów kluczowych. To pomoże ci uniknąć przyszłych bólów głowy.

+3

@ user2254435: Nie używaj słów zastrzeżonych jako identyfikatorów. –

+0

Dziękuję za szybką odpowiedź. To jest z dużej istniejącej aplikacji i nie tak łatwo zmienić. – DevR

Powiązane problemy