A clean database client implementation:
- implementing migrations
- generating CRUD operations code using SQLC
- handling transactions
- preventing deadlocks
Reference: Tech School
- Launch Postgres database using Docker
make postgres
- Create the database
make createdb
- Apply schema migration
make migrateup
| READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE | |
|---|---|---|---|---|
| DIRTY READ | ✔ | X | X | X |
| NON-REPEATABLE READ | ✔ | ✔ | X | X |
| PHANTOM READ | ✔ | ✔ | X | X |
| SERIALIZATION ANOMALY | ✔ | ✔ | ✔ | X |
- 4 isolation levels
- Locking Mechanism
- Repeatable read
| READ UNCOMMITED | READ COMMITED | REPEATABLE READ | SERIALIZABLE | |
|---|---|---|---|---|
| DIRTY READ | X | X | X | X |
| NON-REPEATABLE READ | ✔ | ✔ | X | X |
| PHANTOM READ | ✔ | ✔ | X | X |
| SERIALIZATION ANOMALY | ✔ | ✔ | ✔ | X |
- 3 isolation levels
- Dependencies detection
- Read commited
💡 To keep in mind: There might be errors, timeout or deadlock > RETRY MECHANISM