Closed4
Error: D1_ERROR: too many SQL variables at offset --- の対処法
配列をD1にinsertしようとすると、
Error: D1_ERROR: too many SQL variables at offset ---
のエラーが発生。
え、そんな大きな配列じゃないのに!?と思って調べた。
公式サイトに各limitが記載されていた。
今回引っかかったのは、Maximum bound parameters per query
でlimitは100
。
1オブジェクトあたり、9個データがあったので、10個弱のオブジェクトしか一度にinsertできない。
まあこんなもんか…
となると、chunkしてPromise.allでinsertするしか今のところ対処法がない。
const chunkArray = <T>(array: T[], size: number): T[][] => {
const result: T[][] = []
for (let i = 0; i < array.length; i += size) {
result.push(array.slice(i, i + size))
}
return result
}
const insertDataInChunks = async (data: Example[], chunkSize: number) => {
const chunks = chunkArray<Example>(data, chunkSize)
await Promise.all(
chunks.map(async (dataToInsert) => {
await db.insert(events).values(dataToInsert).execute()
}),
)
}
const CHUNK_SIZE = 10
await insertDataInChunks(exampleArray, CHUNK_SIZE)
このスクラップは3日前にクローズされました