はじめに
アプリ開発中に、TBL登録するさいにエラーが起きました。
Typeのことでエラーが出て解決するまでに時間がかかりました。
問題
booksのTBL構造は以下で設定していました。
| Name | Type | Option |
|---|---|---|
| id | int8 | |
| user_id | uuid | non-null |
| title | varchar | non null |
BookId
import { useAuthContext } from "../context/AuthContext";
export const BookId: FC = memo((props) => {
const { user } = useAuthContext();
if (bookId === "new") {
const registerBook = await supabase.from("books").insert({ user_id:user?.uid, title: data.title });
if (registerBook.error) {
console.error("Error inserting data:", registerBook.error);
return;
}
currentBookId = registerBook.data.id;
}
bookのTBLにuser_idとtitleのデータを登録しようとしていました。
解決方法
Firebase UUIDとSupabaseのUUID形式が違うから発生していました。
Firebase UUIDは完全ランダムな文字列に対し、
SupabaseのUUIDは550e8400-e29b-41d4-a716-446655440000みたいな感じです。
UUID形式だけど、全然違う内容となっています。
なので、今回はbookのuser_idの形式をuuidからvarcharに変更しました。
また、registerBook.dataがnullになっていたので、select().single()も追加し修正しました
修正したbooksのTBL構造は以下です。
| Name | Type | Option |
|---|---|---|
| id | int8 | |
| user_id | varchar | non-null |
| title | varchar | non null |
BookId
import { useAuthContext } from "../context/AuthContext";
export const BookId: FC = memo((props) => {
const { user } = useAuthContext();
if (bookId === "new") {
const registerBook = await supabase.from("books").insert({ user_id:user?.uid, title: data.title }).select().single();
if (registerBook.error) {
console.error("Error inserting data:", registerBook.error);
return;
}
currentBookId = registerBook.data.id;
}
おわりに
Firebase UUIDとSupabase uuidが違うので留意する