missing FROM clause entry for table...?

Hallo,
bei einem Import meiner Daten bekomme die Fehlermeldung “missing FROM clause entry for table

Hier mal der genaue Befehl: *psql -h localhost database -c " update data set … where data… notnull"
*

Was heisst das bzw. was kann ich darunter verstehen…

Danke & Schoene Gruesse

Laß mich raten: beim Import einer Tabelle von vermutlich 8.1 nach 8.1 oder höher.

Hier mal der genaue Befehl: > psql -h localhost database -c " update data set … where data… notnull"

geht es noch etwas ungenauer?

****> Was heisst das bzw. was kann ich darunter verstehen…

Danke & Schoene Gruesse

Deine Syntax wird ab 8.1 als flasch angesehen. Du kannst in der postgresql.conf einen Schalter setzen:

add_missing_from = on

aber Du solltest besser die Syntax verbessern.


Andreas

Um das mal noch a bissl genauer zu zeigen, was vermutlich bei Dir falsch ist und wie man das lösen kann:

test=# select slave.*;
ERROR:  missing FROM-clause entry for table "slave"
test=!# rollback;
ROLLBACK
test=# set add_missing_from = on;
SET
test=*# select slave.*;
NOTICE:  adding missing FROM-clause entry for table "slave"
 master_id |  val
-----------+-------
         1 | value
(1 row)

test=*# rollback;
ROLLBACK
test=# select slave.* from slave;
 master_id |  val
-----------+-------
         1 | value
(1 row)

Andreas

Hallo Andreas,

Danke erstmal fuer dein Feedback.
Das aendern der Postgresql.conf hat leider kein Erfolg gebracht.

Leider finde ich auch keine Loesung wie ich es umschreiben koennte. Daher poste ich mal die gesamten String: Mit der hoffnung das Du mir einen Tip geben kannst.

Befehl:
psql -h localhost bayelva -c
“update data set battery_ws=temptable_climate.avg_battery
where data.time=temptable_climate.time and temptable_climate.avg_battery notnull”

ERROR:
Missing FROM-clause entry for table “temptable_climate” at character 28
STATEMENT:
update data set battery_ws=temptable_climate.avg_battery where data.time=temptable_climate.time and temptable_climate.avg_battery notnull

PG neu gestartet bzw. ein Reload der Config ausgelöst?

Leider finde ich auch keine Loesung wie ich es umschreiben koennte. Daher poste ich mal die gesamten String: Mit der hoffnung das Du mir einen Tip geben kannst.

Befehl:
psql -h localhost bayelva -c
“update data set battery_ws=temptable_climate.avg_battery
where data.time=temptable_climate.time and temptable_climate.avg_battery notnull”

ERROR:
Missing FROM-clause entry for table “temptable_climate” at character 28
STATEMENT:
update data set battery_ws=temptable_climate.avg_battery where data.time=temptable_climate.time and temptable_climate.avg_battery notnull

Okay. Ich zeige es noch einmal:

test=# create table t1 (i int, val text);
CREATE TABLE
test=*# create table t2 (i int, val text);
CREATE TABLE
test=*# commit;
COMMIT
test=# update t1 set val=t2.val where t1.i=t2.i;
ERROR:  missing FROM-clause entry for table "t2"
test=!# rollback;
ROLLBACK
test=# update t1 set val=t2.val from t2 where t1.i=t2.i;
UPDATE 1
test=*# rollback;
ROLLBACK
test=# set add_missing_from = on;
SET
test=*# update t1 set val=t2.val where t1.i=t2.i;
NOTICE:  adding missing FROM-clause entry for table "t2"
UPDATE 1

Entweder Du bringst Deinen Code in Ordnung (die fehlende Tabelle in die from-Klausel einsetzen) oder den Würgaround mit dem set add_missing_from, was auch per Session wie gezeigt funktioniert. Das für Deinen Einsatz anzupassen überlasse ich Dir zur Übung.


Andreas

Also show Add_missing_from hab ich die Konfig ueberprueft auch ein neustart hat leider nichts gebracht.

Ich versuch es mal heraus zufiltern.

Was hast Du gemacht? Was ist die Ausgabe von dem Befehl?

Andreas

Ausgabe:

add_missing_from


on
(1 row)

Nun ja. Sollte damit einklich gehen. Du kannst versuchen:

  • in der selben Session, in der auch der Fehler kommt, das nochmals explizit zu setzen. So wie ich es schon gezeigt habe.
  • Dein SQL korrekt zu schreiben. So wie ich es schon gezeigt habe.

Ich würde Dir zweiteres empfehlen. Mehr fällt mir grad nicht ein.

Andreas

Ich versuchs mal an einer Testdatenbank. Das Umschreiben waere mir auch lieber… Aber meine Version ist die 8.2.5

So ich nochmal,…

Komischer weise muss die DB die Settingeinstellung nun gefressen haben.

Die Ausgabe gibt mir nun eine Ausgabe.:
*NOTICE: ADDING MISSING FROM-CLAUSE ENTRY FOR TABLE…
*

Kann ich dies als Problemlos hinnehmen? Sprich greift nun hier das Setting und findet selber die Tabelle von der die Daten kommen?

Schone Gruesse & Schoenen Dank

Ja. Du solltest dennoch versuchen, das SQL zu reparieren. Möglicherweise wird eine spätere Version dies dann strenger handhaben. Aber derzeit ist es nur ein Hinweis und kein Fehler.

Andreas

thx :wink: genau was ich hoeren wollte