目次
はじめに
現在、Webアプリケーションを作成しています。
https://daigo-books-32e96c87f877.herokuapp.com/
言語は Java で、フレームワークはSpring Frameworkを使用しています。
これをHerokuでデプロイしようとしました。データベースを使用したいので、Heroku Postgresとアプリケーションをつなげる設定をしました。よし、これでデータベースの連携がうまくいき、公開できるぞと思いきや、次のエラーに出会いました。
Error querying database. Cause:
org.postgresql.util.PSQLException: ERROR:
relation "<your table name>" does not exist
これはHeroku Postgresのデータベースにテーブルがないので、あなたが指定したテーブルにアクセスできないし、そもそもどれ?って言っているエラーです。
一旦、状況を整理しましょう。
項目 |
ステータス |
アプリケーションの作成 |
OK |
データベースとの接続 |
OK |
データベース中のデータへのアクセス |
NG |
※アクセスしたいテーブルがないのでエラーになる
この時はHeroku Postgresにテーブルデータを作成すればいいわけですが、その作成するときに色々な落とし穴にはまったのでそれを共有したいと思います。
私がエラーに出会ってから解決までの時系列はこんな感じです。分からない単語や言い回しがあっても、ここはこんな感じだったんだなと、軽く流しておいてください。
No. |
出来事 |
1 |
エラーに出会う |
2 |
エラーの解決策を AI に教えてもらったら、Flywayを使用しようと助言をもらう→導入に時間がかかったため、断念。 |
3 |
そもそもHeroku CLIめっちゃ古いやん。→解決 |
4 |
Dataclipsなる便利な機能発見!これで解決かと思いきやテーブルは作成できないんだと。。 |
5 |
Heroku CLIを使用して、データベース接続、テーブル作成しよう。。あれ?psqlコマンドががないだと。。Postgres SQLを普通に使用してあるのにか。。 |
6 |
環境変数をいじって解決。 |
7 |
データベースとつなげる。テーブル作成。アプリケーション起動。エラが治っていた!! |
本記事では次の流れで進んでいきます。
- エラー文の詳細
- 主な解決方法
- 私がはまった落とし穴
- 私がはまった落とし穴の解決方法
【環境】
- Windows 11
- PostgresSQL 16
- Heroku CLI
- Heroku Postgres
環境が違うと色々不便なことがあるかと思いますので、環境情報も一緒に共有します。ご参考までに。
エラーの詳細とその解決方法
エラー文の詳細
Error querying database. Cause:
org.postgresql.util.PSQLException: ERROR:
relation "<your table name>" does not exist
解決策
一言で言うとHeroku CLI を使用して、テーブルを作成。解決までの流れはこんな感じ。
<大まかな手順>
- Heroku CLIを使用
- CLIでHerokuにログイン
次のサイトをみて、Heroku Postgresとつなげる。
https://amateur-engineer-blog.com/heroku-postgres-basic-data-operation
私が今回実行したSQL文はこんな感じ。
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
ここまで来たらテーブルを作成できているはず。次からのステップは事後確認。
- Heroku Dataclipsでテーブルの存在を確認
要するに何かコマンドを実行して、想定している結果が帰ってくるかを確認する。
SELECT CustomerName, City FROM Customers;
※sqlコマンド自体は自分の環境や作成した環境に合わせてね。
想定する結果
・実行できたけど、データはないよという文章
↑今思えば、この確認方法はどうかと思います。実際ならデータを入れて、そのデータが取得できるところまでやるべきだったかと。
以上!これでテーブルが作成され、無事にアプリケーションのデプロイができた!
だが、このエラーを解決するまでの道のりは長かった。。。落とし穴がたくさんあったからね。皆さんにはその落とし穴にはまってほしくないので情報を、ブログという媒体で皆さんに情報を共有したいと思います!!
私がはまった落とし穴
落とし穴一覧はこんな感じ。悲しいかな、ITって色々な知識が必要ですね。1個バグを見つけたら10個はバグがあると思え。
- Heroku CLIのバージョンが古い。
- psqlコマンドがない
- Dataclipではテーブルを作成できないだと。。
- AIにFlywayを使えと言われた
私がはまった落とし穴の解決方法
それでは 1つずつ見ていきましょう。
Heroku CLIのバージョンが古い。
Warning: heroku update available from 7.19.4 to 7.22.2
現在の最新バージョンは、8.x.xと書かれていることが多いと思いますが、私が最近まで使っていたのは、7.x.xと古いものでした。要するに iPhone15と14みたいな違いです。
これも色々な不具合の原因になりますので一緒に対処していきます。
解決策
この記事を見てもらったら大丈夫 heroku update
https://qiita.com/Panzo_webengineer/items/4af03a15d6cfeb6cd643
psqlコマンドがない
'psql' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたは
バッチ ファイルとして認識されていません
このコマンドが使用できないといけないわけですが このコマンドがなかったわけです。通常、PostgresSQLをインストールしたら使えるようになるんですけれども、私の場合これが使用できませんでした。なぜかと言うと、環境変数に設定されていなかったからですね。おそらく 最初のインストール時の初設定でチェック外したんですかね?よくわかんないんですけれども。こういう時は後から環境変数を設定し直してあげれば大丈夫です。
解決方法
この記事に書かれている通りにやればOKです。
https://qiita.com/Riku-smile/items/7ed3b35cda47ea3c2d3b
Dataclipではテーブルを作成できないだと。。
よしなるほど、テーブルがないからエラーが起きてるのか。それでは テーブルを作成しよう。お!こういう SQL 文 を実行できるサービスがあるんだ すげえと思ってやったんですけど、なんとこれは、テーブルの作成はできないんですね。
【引用】
Heroku Dataclips を使用すると、Heroku Postgres データベースへの SQL クエリを作成し、その結果を同僚、サードパーティツール、パブリックと共有できます。データクリップの受信者は、そのデータをブラウザで表示できるほか、JSON および CSV 形式でダウンロードすることもできます。
リンク→https://devcenter.heroku.com/ja/articles/dataclips
ちょっと愚痴っぽくなりましたけれども、その他の機能はだいたい使えるんで、データベース周りでやりたいことがあったら是非このサービスを使ってください!!
解決方法
次のリンクの通りにやればOKです。ですが前提条件として、上記で説明した最新バージョンとまではいかなくともHeroku Postgresが使用できることとpsqlコマンドが使用できることが条件です。
https://amateur-engineer-blog.com/heroku-postgres-basic-data-operation
AIにFlywayを使えと言われた
このFlywayというのはデータベースのマイグレーションツールです。イメージとしてはデータベース版のGitてすね。私はこれを使ったことがなかったので、導入にめちゃくちゃ時間かかりましたし何なら、導入できませんでした。一応、設定などはいるできたんですが、データベースのバージョンがサポートしていないだったり、もうテーブルがあるんですけどどういうことですか、とか言われたり。知らんがな、という感じです。結局のところ、私の知識不足なわけですけれども。少し話が脱線しましたが、ここで言いたいことは使ったことのないツールを導入するのには 最初に結構時間がかかる、かつ、AIも簡単ですぐ解決できるような最適な答えを全部返してくれるわけではないということです。
今回使用していた AI はChatGPT4-oです。だいぶ 賢いんですけど、使用する時は正確な情報を言ってくれてるのはどうか検証しながらまた試行錯誤しながら使用する必要がありますね。
解決方法
時間がかかりそうだったので別の方法を模索。その結果、普通の方法というか最もシンプルな解決策に出会いましたね。
でもこの経験でAIを使い出した感じもあるのでいい経験でした。
まとめ
時系列でまとめるとこんな感じ。
No. |
出来事 |
1 |
エラーに出会う |
2 |
エラーの解決策を AI に教えてもらったら、Flywayを使用しようと助言をもらう→導入に時間がかかったため、断念。 |
3 |
そもそもHeroku CLIめっちゃ古いやん。→解決 |
4 |
Dataclipsなる便利な機能発見!これで解決かと思いきやテーブルは作成できないんだと。。 |
5 |
Heroku CLIを使用して、データベース接続、テーブル作成しよう。。あれ?psqlコマンドががないだと。。Postgres SQLを普通に使用してあるのにか。。 |
6 |
環境変数をいじって解決。 |
7 |
データベースとつなげる。テーブル作成。アプリケーション起動。エラが治っていた!! |
最後まで読んでくださりありがとうございます。何かご意見あれば、コメントしてくださると幸いです。Twitter、Xもやっているので、そちらでコメントしてくださっても大丈夫です。あまり見ていないので返信がなくても、ご容赦ください。
参考文献