Enable autocomplete in an sqlite3 interactive shell

You can use rlwrap if you don't want to compile sqlite3. Just run sudo apt install rlwrap, and then set up an alias for sqlite3 in your .bashrc:

alias sqlite="rlwrap -a -N -c -i sqlite3"

The -c option gives you filename completions.

And you can create a file ~/.rlwrap/sqlite3_completions to have keyword completions:

ABORT ACTION ADD AFTER ALL ALTER ANALYZE AND AS ASC ATTACH AUTOINCREMENT BEFORE BEGIN BETWEEN BY CASCADE CASE CAST CHECK COLLATE COLUMN COMMIT CONFLICT CONSTRAINT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DEFAULT DEFERRABLE DEFERRED DELETE DESC DETACH DISTINCT DROP EACH ELSE END ESCAPE EXCEPT EXCLUSIVE EXISTS EXPLAIN FAIL FOR FOREIGN FROM FULL GLOB GROUP HAVING IF IGNORE IMMEDIATE IN INDEX INDEXED INITIALLY INNER INSERT INSTEAD INTERSECT INTO IS ISNULL JOIN KEY LEFT LIKE LIMIT MATCH NATURAL NO NOT NOTNULL NULL OF OFFSET ON OR ORDER OUTER PLAN PRAGMA PRIMARY QUERY RAISE RECURSIVE REFERENCES REGEXP REINDEX RELEASE RENAME REPLACE RESTRICT RIGHT ROLLBACK ROW SAVEPOINT SELECT SET TABLE TEMP TEMPORARY THEN TO TRANSACTION TRIGGER UNION UNIQUE UPDATE USING VACUUM VALUES VIEW VIRTUAL WHEN WHERE WITH WITHOUT

The -i option makes keyword completion case insensitive.


Compile the program with readline supoort. Readline is a common library that handles user input in interpreters such as bash and python. Fetch the source, the dependencies and configure with:

user@computer in: ~/src/sqlite-autoconf-3071602
$ ./configure --enable-readline=yes

Consult the INSTALL file for details. Also, it's worth mentioning that there are probably binaries of sqlite3 with readline support already packaged for your distro. Look around.