postgresql 使用原始SQL批量更新Prisma

yvfmudvl  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(201)

我想在postgres中为一个表做一个批量upsert,因为prisma的API不支持这个,所以我不得不使用$executeRaw,但是我在如何正确地使用Prisma.joinPrisma.sql将数据插入到模板标签中时遇到了一些困难。
这篇文章似乎指出了一个可能的解决方案:https://github.com/prisma/prisma/discussions/15452#discussioncomment-3737632,但是Prisma.sql的函数签名是export declare function sqltag(strings: ReadonlyArray<string>, ...values: RawValue[]): Sql;,这表明它接受两个 * 数组 * 而不是一个字符串。
这是我目前掌握的情况:

async function batchUpsertPosts(posts){
  await prisma.$executeRaw`INSERT INTO Posts (
    feedDomain,
    postId,
    title,
    score,
  )
  VALUES (), (), ()--... and so on with posts
  ON CONFLICT ("feedDomain","postId") DO UPDATE SET score = excluded.score`
}
bvhaajcl

bvhaajcl1#

好吧,我想我已经想明白了。

async function batchUpsertPosts(posts) {
  await prisma.$executeRaw`INSERT INTO "public"."Posts" (
    "feedDomain",
    "postId",
    "title",
    "score",
  )
  VALUES ${Prisma.join(
    posts.map(post =>
      Prisma.sql`('${post.feedDomain}', '${post.postId}', '${post.title}' ,${post.score})`
    )
  )}
  ON CONFLICT ("feedDomain","postId") DO UPDATE SET score = excluded.score`
}

所以我只需要用途:

Prisma.sql``

相关问题