web-dev-qa-db-ja.com

PostgreSQL「列は存在しません」が、実際には存在する

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

クエリを正常に実行するにはどうすればよいですか?

8
BullyWiiPlaza

二重引用符に入れてみてください-"Continent"クエリ内:

SELECT "Continent"
FROM network.countries
...
16
Eugene Lisitsky

この問題は、テーブル名がテーブル名ではなく「テーブル名」であるため、pgAdmin3で発生します。例えばテーブル名としてユーザーが表示されている場合、テーブル名は「user」です。

こちらをご覧ください:

image for table user

0
Kaori

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' "))
0
ISONecroMAn