今日やったこと
- psqlコマンドをPATHに通す
- PostgreSQLにデータベース作成
- NuGetパッケージのインストール
- EF Core マイグレーション実行
-
dotnet buildでビルド成功 !!🐶
psqlがPATHに通っていない
エラー
psql : The term 'psql' is not recognized as a name of a cmdlet...
フルパス指定では動くのに psql だけだと動かない状態。
# これは動く
& "C:\Program Files\PostgreSQL\18\bin\psql.exe" --version
# これはダメ
psql --version
対処法
PowerShellでユーザー環境変数のPathに追加する。
[System.Environment]::SetEnvironmentVariable(
"Path",
[System.Environment]::GetEnvironmentVariable("Path", "User") + ";C:\Program Files\PostgreSQL\18\bin",
"User"
)
追加できたか確認:
[System.Environment]::GetEnvironmentVariable("Path", "User")
# 末尾に C:\Program Files\PostgreSQL\18\bin があればOK
VS Codeを完全に終了して再起動する。
タスクマネージャー(Ctrl+Shift+Esc)でCode.exeが残っていないか確認!!
再起動してもバックグラウンドで残ってたのでうまく読み込めてなかったみたい。
psql --version
# psql (PostgreSQL) 18.3
今日の躓き🐶
×で閉じるだけでは不十分だった。VS Codeはバックグラウンドで生きていることがあり、タスクマネージャーで完全終了するまでPATHが反映されなかった。
VS Codeのターミナルは起動時にPATHを読み込む。完全終了が必須。
SQLコマンドをPowerShellで打ってしまった
エラー
CREATE : The term 'CREATE' is not recognized as a name of a cmdlet...
原因と対処法
CREATE DATABASE はSQL文なのでpsqlの中で実行する必要があった。
# まずpsqlに接続
psql -U postgres -d postgres
-- postgres=# の状態でSQL文を実行
CREATE DATABASE debt_tracker;
-- データベース一覧で確認
\l
-- psqlを抜ける
\q
-- テーブル一覧
\dt
-- データベース切り替え
\c
ターミナルとpsqlの違い(ByClaude)
| 場所 | プロンプト | 使えるコマンド |
|---|---|---|
| PowerShell | PS C:\...> |
Windowsコマンド |
| psql | postgres=# |
SQLコマンド |
dotnet-efが入っていない
エラー
指定されたコマンドまたはファイルが見つからなかったため、実行できませんでした。
対処法
dotnet tool install --global dotnet-ef
dotnet ef --version
# Entity Framework Core .NET Command-line Tools 10.0.7
dotnet-efとは(ByClaude)
dotnet ef はEF Core専用のCLIツールで、.NET SDKとは別にインストールが必要。
Pythonの pip install と同じイメージ。コードに using を書くだけでは使えない。
NuGetパッケージのバージョン不一致
エラー
Microsoft.EntityFrameworkCore 10.0.7 は net8.0 と互換性がありません
パッケージ 'Npgsql.EntityFrameworkCore.postgreSQL' に使用できるバージョンがありません
原因
2つの問題が重なっていた。
-
バージョン未指定でインストールすると最新版(10系)が入るが、プロジェクトは net8.0 なので互換性エラー
-
パッケージ名の大文字小文字が違った
(postgreSQL→PostgreSQL)
そもそもnet9.0を8.0にして、とやっていたけどまたしてもVerエラー
Claude君いたからよかったけど、合わせるの大変!!
対処法
バージョンを明示してインストールし直す。
デフォだと最新の 10.0.7 がインストールされてしまった。
dotnet add package Microsoft.EntityFrameworkCore --version 8.0.0
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 8.0.0
dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0.0
NuGetパッケージとは(ByClaude)
| 言語 | パッケージ管理 | コマンド |
|---|---|---|
| JavaScript | npm | npm install xxx |
| C# | NuGet | dotnet add package xxx |
| Python | pip | pip install xxx |
.NETとEF Coreのバージョン対応表
| .NETバージョン | EF Coreバージョン |
|---|---|
| net8.0 | 8.x.x |
| net9.0 | 9.x.x |
| net10.0 | 10.x.x |
最終確認
dotnet build
ビルドに成功しました。
0 個の警告
0 エラー
やっとできた・・・!!
今日の躓きまとめ🐶
| エラー | 原因 | 対処 |
|---|---|---|
| psqlが認識されない | PATHが通っていない | 環境変数に追加 + VS Code完全再起動 |
| CREATEが認識されない | psqlの外でSQL文を打った | psqlに入ってから実行 |
| dotnet efが見つからない | ツール未インストール | dotnet tool install |
| バージョン互換性エラー | 最新版が自動で入った | --versionで明示 |
コード自体は間違っていなかった。
業務でも環境構築やると 僕だけのエラー がでてたなぁ・・・
一個ずつ潰していけば必ず動くのだろうけど切り分けも大変だったりするので、経験値増えれば解消するといいな~。
次回予定🐇
マイグレーション実行とAPIの動作確認へ
テーブルが実際にDBに作られる
SQLベタ打ちじゃないやつ
TIL / 使ったコマンド一覧
# PATH確認
[System.Environment]::GetEnvironmentVariable("Path", "User")
# PATHに追加
[System.Environment]::SetEnvironmentVariable(
"Path",
[System.Environment]::GetEnvironmentVariable("Path", "User") + ";C:\Program Files\PostgreSQL\18\bin",
"User"
)
# psql接続
psql -U postgres -d postgres
# dotnet-efインストール
dotnet tool install --global dotnet-ef
# NuGetパッケージインストール
dotnet add package Microsoft.EntityFrameworkCore --version 8.0.0
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 8.0.0
dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0.0
# ビルド確認
dotnet build
プロンプトだった 'postgres='
postgres=# ← スーパーユーザー(管理者)
postgres=> ← 一般ユーザー
-postgres → 今接続しているデータベースの名前
-= → 特に意味はなく区切り文字
今どのDBにいるか
# こうすると
psql -U postgres -d debt_tracker
# 接続しているDB名がプロンプトに反映される
debt_tracker=#