System Catalogs
Many relational database systems, including SQLite, keep system state data in a series of
data structures known as
system catalogs. All of the SQLite system catalogs
start with the prefix sqlite_. Although
many of these catalogs contain internal data, they can be queried, using
SELECT, just as if they were
standard tables. Most system catalogs are read-only. If you encounter an
unknown database and you’re not sure what’s in it, examining the system
catalogs is a good place to start.
All nontemporary SQLite databases have an
sqlite_master catalog. This is the master
record of all database objects. If any of the tables has a populated
AUTOINCREMENT column, the database
will also have an sqlite_sequence
catalog. This catalog is used to keep track of the next valid sequence value
(for more information on AUTOINCREMENT,
see Primary keys). If the SQL command ANALYZE has been used, it will also generate
one or more sqlite_stat tables, such as
#sqlite_stat1 and sqlite_stat2. These tables hold various
statistics about the values and distributions in various indexes, and are
used to help the query optimizer pick the more efficient query solution. For
more information, see ANALYZE in Appendix C.
The most important of these system catalogs is the sqlite_master table. This catalog contains information on
all the objects within a database, including the SQL used to define them.
The sqlite_master table has five
columns:
| Column name | Column type | Meaning |
|---|---|---|
type
| Text | Type of database object ... |
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access