SQLクエリを自動的に構築および実行するJava
アプリケーションを作成しています。多くのテーブルでは私のコードは問題なく動作しますが、特定のテーブルでは次の例外をスローすることでスタックします。
Exception in thread "main" org.postgresql.util.PSQLException: ERROR: column "continent" does not exist
Hint: Perhaps you meant to reference the column "countries.Continent".
Position: 8
実行されたクエリは次のとおりです。
SELECT Continent
FROM network.countries
WHERE Continent IS NOT NULL
AND Continent <> ''
LIMIT 5
これは基本的に、列から5
空でない値を返します。
pgAdmin 4 で明確に表示されるときに、「列が存在しない」というエラーが表示される理由がわかりません。テーブルNetwork
を含むcountries
という名前のスキーマがあり、そのテーブルには予想どおりContinent
という列があることがわかります。
すべての列、スキーマ、およびテーブル名はアプリケーション自体によって取得されるため、スペルミスやセマンティックエラーはないと思いますが、なぜ PostgreSQL が問題を引き起こすのでしょうか? pgAdmin4でクエリを実行することも、推奨されるcountries.Continent
を使用することもできます。
私のPostgreSQLバージョンは現在のところ最新です:
$ psql --version
psql (PostgreSQL) 9.6.1
クエリを正常に実行するにはどうすればよいですか?
二重引用符に入れてみてください-"Continent"
クエリ内:
SELECT "Continent"
FROM network.countries
...
この問題は、テーブル名がテーブル名ではなく「テーブル名」であるため、pgAdmin3で発生します。例えばテーブル名としてユーザーが表示されている場合、テーブル名は「user」です。
こちらをご覧ください:
SQLAlchemy環境での作業では、このようなSQLでこのエラーが発生しました。
db.session.execute(
text('SELECT name,type,ST_Area(geom) FROM buildings WHERE type == "plaza" '))
エラー:列「プラザ」は存在しません
まあ、私は==によって=を変更しましたが、エラーが引き続き発生し、その後、次のように引用符を交換しました。出来た。変だ!
....
text("SELECT name,type,ST_Area(geom) FROM buildings WHERE type = 'plaza' "))