pgref.dev/sqlite/errors/SQLITE_LOCKED_VTAB
SQLITE_LOCKED_VTABWARNINGTier 2 — Caution⚠️ MEDIUM confidence

Virtual table is locked

Category: LockingVersions: 3.0+

🔴 Production Risk Error

Low — SQLite handles retries internally in most scenarios.

What this means

SQLITE_LOCKED_VTAB (518) is returned by a virtual table's xBegin or xSync method to signal that the virtual table is locked and the transaction cannot proceed. This allows SQLite to retry after releasing other locks.

Why it happens

  1. 1Virtual table implementation returned SQLITE_LOCKED_VTAB to indicate it is temporarily busy.
  2. 2Concurrent access to the virtual table's backing store.

How to reproduce

Two-phase commit on a virtual table when the vtab's backing store is locked.

trigger — this will ERROR
-- Virtual table operations that trigger internal locking
-- SQLITE_LOCKED_VTAB causes SQLite to retry the two-phase commit
Transient; SQLite retries automatically in most cases.

Fix 1

Why this works

Retry the transaction if surfaced to the application.

Fix 2

Why this works

Check the virtual table implementation for deadlock conditions.

Sources

📚 Official docs: https://www.sqlite.org/rescode.html#locked_vtab

🔧 Source ref: sqlite3.h — SQLITE_LOCKED_VTAB = 518

📖 Further reading: SQLite virtual table API

Confidence assessment

⚠️ MEDIUM confidence

Stable.

See also

📄 Reference pages

SQLite virtual tables
⚙️ This error reference was generated with AI assistance and reviewed for accuracy. Examples are provided to illustrate common scenarios and may not cover every case. Always test fixes in a development environment before applying to production. Spotted an error? Suggest a correction →