Hi Varun, thanks a lot for the kind words and support — it really means a lot!
I wasn’t affected by the Drizzle + Forge issue myself — I started using Drizzle when it was already resolved,
but it’s great to know the path is clearer for everyone else now.
Feedback from working with Forge SQL:
- Timeout-sensitive migrations
If a migration contains many steps or involves heavierALTER TABLEoperations, there’s a risk of hitting Forge web/scheduler timeouts.
This can lead toALTER TABLEbeing successfully applied, but the corresponding insert into the migration log never completing — causing the next run to retry the same schema change and fail with an error like “column already exists.” - Concurrent migration execution
There’s currently no way to guarantee that only one migration process runs at a time.
If multiple web triggers, event triggers, or scheduled tasks execute concurrently, they may all try to apply pending migrations — leading to race conditions or conflicting DDL operations.
One potential direction could be support for SQL-level locking viaGET_LOCK(...)/RELEASE_LOCK(...)(which TiDB supports),
or perhaps another mechanism for coordinating safe execution — like usingapp.storageas a lightweight lock.
At the moment, these types of coordination issues (timeouts, concurrent execution) are left for developers to handle themselves at the application level.
It would be great to see Forge offer some built-in primitives or patterns for safe, idempotent orchestration across triggers and scheduler functions.
Thanks again for listening!
— Vasiliy