0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.js チュートリアル 第6章にて Neonを用いてローカル開発環境用のDBを作ってシーディングしたらエラーになった

Last updated at Posted at 2025-08-20

概要

Next.jsのチュートリアルの第6章を実施中にDBへのシーディングを実行したらエラーになったので自身の場合のケースと解決方法を簡単にまとめる

状況

  1. NeonにてPostgreSQLのDBを作成
  2. Neon上でローカル開発環境用の.envに記述する内容をコピーしてローカル開発環境の.env.exampleをコピーして.envを作成し、DBの記述を上書き
  3. 起動しているローカル開発環境をcmd + cで落とし、npm run devを再度実行
  4. http://localhost:3000/seed にブラウザでアクセスしてシーディングを試みるもエラーで失敗

エラー内容

http://localhost:3000/seed にアクセスしたところ下記のような内容が表示された。

{
  "error": {
    "name": "PostgresError",
    "severity_local": "ERROR",
    "severity": "ERROR",
    "code": "23505",
    "detail": "Key (extname)=(uuid-ossp) already exists.",
    "schema_name": "pg_catalog",
    "table_name": "pg_extension",
    "constraint_name": "pg_extension_name_index",
    "file": "nbtinsert.c",
    "line": "666",
    "routine": "_bt_check_unique"
  }
}

already exists.と言われているのでシーディングする際に新規設置される何かがすでに存在しており、エラーがでているっぽい。

解消方法

Neon内部で先に作成したDBを指定してテーブルを確認したところ、customersテーブルとrevenueテーブルがすでに作られ、データも入っていた。※このテーブルの作成タイミングはわからなかった。テーブル作成時なのか、http://localhost:3000/seed へのアクセス時に途中で処理が止まったのかは不明。調査する前に先に進んでしまった。
なので下記の手順で先に作成したDBの中のテーブルを全て空にした。

  1. Neonにて先に作成したDBの詳細ページにアクセス

  2. サイドバーの「SQL Editer」をクリック

  3. 下記のSQLを実行(テーブル削除なので本当はトランザクションを使ったほうがいい。)

    DROP TABLE customers;
    DROP TABLE revenue;
    
  4. 上記を実行後、DBを確認すると謎のテーブル(名前忘れた、、、。)ができていたのでサイドバーからUIのゴミ箱ボタンを押下して謎のテーブルも削除し、DBの内部にテーブルがない状態にクリーンアップ

  5. http://localhost:3000/seed にアクセスしたら下記が出たので無事にシーディングは完了

    {
      "message": "Database seeded successfully"
    }
    
  6. その後の手順のhttp://localhost:3000/query へのアクセスも実施し、下記のように返ったので6章は終わり

    {
      "amount": 666,
      "name": "Evil Rabbit"
    }
    

あとがき

6章のやることのページに「DBやレコードがすでに存在していてうまくいかない場合はDROP TABLEを使ってリセットしましょう」って書いてあったの見つけて良かった。割とすぐ解決できた。
ちなみに、後からシーディング系の処理を見てわかったのだが、今回のエラーのKey (extname)=(uuid-ossp) already exists.はおそらく

app/seed/route.ts
await sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;

の箇所で出たっぽい。
多分主キーのidをuuidにして、そのuuidを自動生成する設定をSQL句を用いて施しているところ。
どのタイミングか不明だが、uuidの自動生成設定がシーディング前に施されており、重ねてシーディング時に施そうとしたためにエラーになったものと思われる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?