🪠

SupabaseのPostgreSQLに新しいロール(ユーザー)を作って接続する

2024/04/18に公開

新しく作ったロールでSupabaseのDBに接続しようとしたところ少しハマったので備忘録として。

ロール(ユーザー)を作る

まずはSupabaseのSQL Editorからsample_roleというロールを作成します。ロールにはテーブルへの権限をいろいろ設定しています。

Postgres Role | Creating users

-- ログインできるロール(ユーザー)を作成
CREATE ROLE sample_role WITH LOGIN PASSWORD 'password';

-- テーブルへの権限をいろいろ追加
GRANT USAGE ON SCHEMA public TO sample_role;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO sample_role;
GRANT CONNECT ON DATABASE postgres TO sample_role;

DBに接続する

ロールを作ったらDBへ接続します。接続文字列を以下の形式にそのまま当てはめると、
=> postgres://[ロール名]:[パスワード]@[ホスト名]:[ポート番号]/[DB名]

このような接続文字列になります(ホスト名はSupabaseのダッシュボードから確認する)。ただ、この文字列ではTenant or user not found エラーでDBに接続できません。
=> postgres://sample_role:password@xxx.supabase.com:5432/postgres

ダッシュボードのConnect to your projectの説明をよく読むと、コネクションプーリングを使って接続する場合はプロジェクト固有の値を接続文字列に追加しないといけないようです。下記のような文字列ならDBに接続できました。
=> postgres://sample_role.[プロジェクト固有の値]:password@xxx.supabase.com:5432/postgres

プロジェクト固有の値を確認する方法

Discussion