1
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?

VercelとNeonを連携してPostgreSQL 18を使いたかったら、Neon側でプロジェクトを作成する必要がある

1
Posted at

VercelとNeonを連携してPostgreSQL 18を使いたかったら、Neon側でプロジェクトを作成する必要がある

はじめに

個人開発中の「4h Budget」で、DrizzleのスキーマにUUIDv7をデフォルト値として使うテーブルを定義しました。

export const users = pgTable("users", {
  id: uuid('id').primaryKey().default(sql`uuidv7()`),
  // ...省略
})

uuidv7() はPostgreSQL 18で標準搭載された関数です。

Neonは公式で18をサポートしており、以前別の開発(Vercelは未使用)でNeonを使った際は18で作成されていたので、VercelからでNeonのデータベースを作成した今回も、当然18になっているだろうと思い込んで drizzle-kit push を実行したところ、いきなりエラーが出ました。

query error: function uuidv7() does not exist

「あれ、おかしいな」と思って調べてみたら、Vercel経由でNeonのDBを作った場合とNeonのダッシュボードから直接作った場合とで、選べるPostgreSQLのバージョンが違うということに気づいたので、その内容をまとめておきます。

Neon上のSQL Editorでバージョンを確認する

まずは実際に動いているPostgreSQLのバージョンを確認してみます。Neonのダッシュボード内のSQL Editorで以下を実行しました。

select * From version();
PostgreSQL 17.10 (2947584) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit

17.10でした。「NeonはPostgreSQL 18をサポートしているはずなのに、なんで新規作成したプロジェクトが17なんだ?」というのが最初の疑問でした。

VercelのダッシュボードからNeonのDBを作成すると、バージョンを選べない

原因は、DBを作成した経路にありました。Vercelのダッシュボード経由でNeonのIntegrationからデータベースを作成すると、バージョン選択のUIが出てきません。

挙動を見た感じ、Vercel経由で作る場合はPostgreSQLのバージョンが17に固定されているようです。

一方で、Neon自体のダッシュボードから直接プロジェクトを作成すると、14〜18まで自由にバージョンを選択できます。

解決策:Neon側でプロジェクトを作り直す

Neonは作成済みプロジェクトのメジャーバージョンアップグレードには対応していません。なので、バージョンを後から17→18に上げる、ということはできませんでした。

対応としては、一旦プロジェクトを削除して、Neonのダッシュボードから新規にPostgreSQL 18を選んでプロジェクトを作り直すことで解決しました。

まとめ・感想

  • VercelのIntegration経由でNeonのDBを作成すると、PostgreSQLのバージョンは17固定になり、バージョンを選ぶUIが出てこない
  • Neonのダッシュボードから直接プロジェクトを作成すると、14〜18の中からバージョンを選べる
  • Neonは作成済みプロジェクトのメジャーバージョンアップグレードに対応していないため、バージョンを変えたい場合はプロジェクトの作り直しが必要
  • uuidv7() のようなPostgreSQL 18固有の関数を使う予定がある場合は、DB作成前に「どの経路で作るか」を意識しておいたほうがいい
  • 今回はスキーマの一番最初のpushで気づけたのでまだ良かったが、開発が進んだ後やリリース後に気づいていたら、プロジェクトの作り直し=データの作り直しになりかねず、かなりヒヤッとした
1
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
1
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?