Sivaprasad Murali
~ Building software and PostgreSQL extensions while contributing to open source ~
Welcome to my homepage! I'm a Computer Science undergraduate at IIIT Kottayam. I write PostgreSQL extensions and Linux systems software in C, C++ and Python.
These pages cover my four main projects: an index for wildcard search, a fault injector for testing, a file tool you can undo, and a file format for web links. There's also a bit about me. Pull up a chair.
| Biscuit stars | 300 |
| Fylex downloads | 27,700+ |
| Conference talks | FOSSASIA '26 |
| IEEE Webinars | 2 |
My Projects
BiscuitNEW!
An index access method for LIKE and ILIKE in PostgreSQL.
Biscuit records which character sits at which position in every indexed string, counting forward from the start and backward from the end, plus length bitmaps. It answers an anchored pattern by intersecting a fixed number of bitmaps. The results are exact, so PostgreSQL never has to recheck rows against the heap.
- Fastest on suffix, both-ends-anchored and
_wildcard patterns, and on length-only predicates - Supports multi-column indexes, evaluated in order of selectivity
- From 3.1.0, it rewrites anchored regexes like
~ '^j.hn'into exact globs at plan time
- Index state is WAL-logged: works with crash recovery, PITR and streaming replication
- Tested differentially: every predicate runs through the index and through a sequential scan, and the rows must match
- Talk: “Biscuit: Solving PostgreSQL’s Wildcard Search Performance Problem”, FOSSASIA Summit 2026
-- load first, then index
CREATE INDEX idx_users_name ON users USING biscuit(name);
SELECT * FROM users WHERE name LIKE '%son';
[ Source | Docs | PGXN | Talk materials ]
Deterministic fault injection for PostgreSQL.
Error paths are the least-tested part of most database code. With Macavity, a session arms a fault at a named execution point and chooses the exact occurrence where it fires. The fault can be an error, a one-second delay, or an unclean backend crash. That turns “what happens if commit fails?” into a repeatable test.
SELECT macavity_arm('before_commit', 'error', 3);
-- the third commit in this session fails, on cue
- Four fault points:
executor_start,executor_end,before_commit,before_abort - Events are session-local, one-shot and counted. Faults fire in a fixed order: delay, then crash, then error
- Built only on supported hook APIs. It patches nothing in core
Copy and move files on Linux, with undo.
Fylex does what cp and rsync do on a local machine, and adds safety nets. Every run is journaled under a process ID, so you can undo or replay it exactly. Files are hash-verified, and conflicts are resolved the way you choose.
pip install fylex
fylex copy ~/work ~/backup --resolve newer --verify
fylex undo 2023 # roll the whole run back
- Hashes with xxhash, blake3, SHA or MD5, backed by a SQLite hash cache for deduplication
- Eight conflict strategies, from rename to newer, larger and prompt
- Atomic writes. Keeps permissions, timestamps, xattrs and ACLs
- CLI and Python API. Blazefox is a GUI built on top of it
A web address that behaves like an ordinary file.
A browser bookmark is stuck inside one browser profile. A .web document lives in the filesystem instead. You can keep it next to the project it belongs to, and mv, cp, commit, archive or mail it. Double-click it in the file manager and it opens in a browser.
$ web create postgres https://www.postgresql.org/
$ web open postgres
$ cat postgres.web
{ "version": 1, "url": "https://www.postgresql.org/" }
- The
webCLI is a thin front end overlibwebdoc, the C library that holds all the logic - Atomic writes, exclusive creation that refuses symlinks, and no shell anywhere
- No network access, no background service, no database. Ships as a Debian package
[ Source ]
About Me
I’m a Computer Science undergraduate at IIIT Kottayam. I like the layer of software where a data structure decides whether a query takes milliseconds or minutes.
Most of my time goes into database internals: index access methods, query planning and cost estimation, WAL and crash recovery. I also work on the testing tools that keep that code honest. Biscuit started as a question about why wildcard search in PostgreSQL has to recheck so many rows. I later presented it at FOSSASIA Summit 2026.
Outside databases, I work on Linux tooling in C and Python, and on parallel programming with OpenMP and threads. I also contribute fixes upstream when something I use misbehaves.
B.Tech, Computer Science & Engineering
2024–2028 (expected)
CGPA 9.46 / 10 (through sem. 4)
- Languages
- C, C++, Python, Java, x86-64 Assembly
- Databases
- PostgreSQL internals, index access methods, query optimisation, SQL
- Parallelism
- OpenMP, multithreading, synchronisation
- Tooling
- Linux, GDB, Git, PGXN & PyPI publishing
Talks & Contributions
| TALK | “Biscuit: Solving PostgreSQL’s Wildcard Search Performance Problem” at FOSSASIA Summit 2026. Covered how wildcard queries are processed and how position-based indexing avoids heap rechecks. |
| UPSTREAM | Evince (GNOME document viewer). Traced unusually high CPU use during thumbnail rendering to an unguarded file-loading path in the thumbnailer. I reported it and submitted a fix as a merge request. I’ve also reported three issues in GNOME Files and Text Editor. |
| WORKSHOP | C++ and Parallel Programming for the IEEE SSET Student Branch: OpenMP, threads and parallel performance, built around a matrix multiplication demo. |
| WEBINAR | DSA and Debugging with C++ for the IEEE SB MLMCE: algorithms, plus practical techniques for debugging them. |
Contact
Working on database internals or systems software? I’m happy to talk about PostgreSQL extensions, open-source collaboration, internships, or anything on this page.
[ GitHub | LinkedIn | Sponsor my work ]