テスト時にテーブル名でループさせてdeleteManyしていたが、prismaの更新で利用できなくなったため以下のように変更
コード
- Prisma.ModelNameにはテーブルのみが含まれるのではなく、viewも含まれているため、filterで除外した
- 一応、pg_tablesを
WHERE schemaname='public'
でselectするとハードコードせずにテーブル名の取得が可能だが、今回はクエリ回数を抑えるため不採用にした
import { Prisma, type PrismaClient } from "@prisma/client";
export const truncateTables = async (client: PrismaClient) => {
const tableNames = Object.values(Prisma.ModelName)
.filter((name) => name !== "ExampleView")
.map((name) => `"public"."${name}"`)
.join(", ");
await client.$executeRawUnsafe(
`TRUNCATE TABLE ${tableNames} RESTART IDENTITY CASCADE;`,
);