2012-07-06 7 views
17

Używam framework (Jodd), który dodaje alias tabeli do nazw kolumn w SQL Select. Wygląda na dobrze uformowany SQL, ale Postgres dławi go.Postgres nie zaakceptuje aliasu tabeli przed nazwą kolumny

update GREETING Greeting 
    set Greeting.ID=5, 
     Greeting.NAME='World', 
     Greeting.PHRASE='Hello World!' 
where (Greeting.ID=5) 

daje błąd:

Error: ERROR: column "greeting" of relation "greeting" does not exist 
SQLState: 42703 

Czy istnieje sposób, aby przyjąć, że Postgres SQL? Moją drugą alternatywą jest zhackowanie frameworka, którego nie chcę robić.

+1

Czy próbowałeś już ustawić tryb aliasingu kolumn? (Http://jodd.org/doc/db/sqlgenerator.html#Column-name-aliasing)? Domyślnie ustawiono TABLE_REFERENCE - dodają aliasy tabel dla kolumn, ale możesz wypróbować inne dwa. Można to ustawić za pomocą metody DbOomManager # setDefaultColumnAliasType(), gdzieś podczas uruchamiania aplikacji. Nie wahaj się też skontaktować z Jodders przy pomocy prawdziwego fragmentu kodu, chętnie pomogą :) – igr

Odpowiedz

26

Problem polega na tym, że w kolumnie należy uwzględnić alias tabeli w klauzuli SET. Zobacz dokumentację UPDATE in Postgres docs:

column

The name of a column in table. The column name can be qualified with a subfield name or array subscript, if needed. Do not include the table's name in the specification of a target column — for example, UPDATE tab SET tab.col = 1 is invalid.

Dotyczy to w PostgreSQL:

update GREETING Greeting 
set 
    NAME='World', 
    PHRASE='Hello World!' 
where Greeting.ID=5 ; 
3

Sprawdź dokumentację dotyczącą UPDATE oświadczeniu, specjalnie dla kolumnowej części: nielegalne jest prefiks kolumny z tabeli alias w klauzuli SET.

UPDATE GREETING Greeting 
    SET ID=5, NAME='World', PHRASE='Hello World!' 
WHERE (Greeting.ID=5); 
4

Spróbuj użyć najnowszego Jodd, v3.3.7. gdzie ten problem został rozwiązany.

Problem dotyczył biblioteki Jodd: metody aktualizacji jednostek generowały instrukcję aktualizacji za pomocą aliasów tabel. Nowa wersja po prostu nie wstawia aliasów; działa dla PostgreSQL i innych baz danych.

Powiązane problemy