18 points by sethops1 7 hours ago
Using SQLite in Go is deceptively easy. If you just import the popular github.com/mattn/go-sqlite3 as the database/sql driver implementation and start making queries, things will work great until you start hitting SQLITE_BUSY errors as traffic increases.<p>Then you go down the same path of many gophers before you, finding GitHub and forum posts providing conflicting information on best practices for pragma values and connection handling.<p>So I created <a href="https://github.com/cattlecloud/litesql" rel="nofollow">https://github.com/cattlecloud/litesql</a><p>Which provides a nice abstraction, making it easy to accidentally do the right things when using SQLite in your Go program. In particular it pools connections for read transactions and isolates a dedicated write connection for writes. It also sets pragma values to much more reasonable defaults, like isolation levels, foreign keys, cache sizes, etc. On top it provides a nice abstraction for creating periodic snapshots with retention policies. There is also litesqltest for one-line test database creation in unit tests.<p>Hopefully you or your agents might find it useful.
Comments are read-only. Visit Hacker News to participate in the discussion.
veverkap 21 minutes ago | 0 points
Have you considered doing the same for pure go libraries like modernc.org/sqlite? This is very nice but not usable for everyone.