如何使用 Prisma 对 PostgreSQL 数据库进行采样?

How to sample a PostgreSQL database using Prisma?

假设我的 PostgreSQL 数据库中有数百万条语句,而我只想获取其中的 10000 条。但不是第一个 10000,而是一个随机的 selection of 10000(如果我也可以选择逻辑,例如 select 每 4 个语句是最好的)。

我如何使用 Prisma 执行此操作,或者 — 如果无法使用 Prisma — 使用一个很好的旧 PostgreSQL 请求?

目前,我使用此代码来限制我获得的结果数量:

const statements = await this.prisma.statement.findMany({
      where: {
        OR: conditions,
      },
      orderBy: {
        createdAt: 'asc',
      },
      take: 10000,
    });

这将使用我拥有的条件,然后按升序排列,并“取”或限制前 10000 个结果。

我可以用什么代替“take”或者我可以直接在 PostgreSQL 中发出什么请求来随机抽样我的数据库以获取记录?

截至目前,Prisma 本身不支持获取随机数据。

有一个 Feature Request 讨论了您需要的完全相同的场景。

替代方法是使用上述功能请求中描述的 queryRaw for raw database access and use PostgreSQL's random 功能。