1. ホーム
  2. sql

[解決済み] PostgreSQLで「カラムが存在しない」と表示されるが、実際には存在する

2022-02-14 20:29:51

質問

を書いているところです。 Java アプリケーションで、自動的に SQL クエリを構築して実行します。多くのテーブルでは私のコードは問題なく動作しますが、あるテーブルでは以下の例外をスローしてスタックしてしまいます。

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 カラムから空でない値を取得します。

で明らかに存在するのに、なぜ "column does not exist" というエラーが発生するのか理解できません。 pgAdmin 4 . という名前のスキーマがあることがわかります。 Network を含み、テーブル countries というカラムがあり、そのテーブルには Continent は期待通りです。

すべてのカラム名、スキーマ名、テーブル名はアプリケーションによって取得されるので、スペルミスや意味的な間違いはないと思いますが、ではなぜ PostgreSQL は関係なく問題が発生するのでしょうか?pgAdmin4でクエリを実行しても、提案された countries.Continent が動作しています。

私のPostgreSQLのバージョンは、現時点で最新のものです。

$ psql --version
psql (PostgreSQL) 9.6.1

どうすればうまくクエリを実行できますか?

どのように解決するのですか?

二重引用符で囲んでみてください。 "Continent" をクエリに追加してください。

SELECT "Continent"
FROM network.countries
...