# Purge Stale Uploads (https://s3.dimah.dev/docs/db/purge)



When clients request a presigned upload but fail to upload or confirm, database rows remain in `status: "pending"`.

`purgeStalePendingObjects` cleans up expired rows and aborts any incomplete multipart uploads.

```ts title="scripts/purge-stale.ts"
import { purgeStalePendingObjects } from "@dimah-s3/db";
import { dimahS3Db } from "@/lib/dimah-s3-db";
import { awsS3 } from "@/lib/s3";

const { purged } = await purgeStalePendingObjects({
  client: dimahS3Db,
  olderThanMs: 24 * 60 * 60 * 1000, // 24 hours
  s3: awsS3,
});

console.log(`Purged ${purged.length} stale uploads.`);
```

## Frequently asked questions [#frequently-asked-questions]

<Accordions>
  <Accordion title="How do I schedule the purge script?">
    Run it on a daily cron job (e.g. Vercel Cron, GitHub Actions, or Node cron workers).
  </Accordion>
</Accordions>
