# Documentation ## Basics [Defining tables](defining_tables.md) - How to define tables using C++ structs. [sqlgen::read](reading.md) - How to read data from a database. [sqlgen::write](writing.md) - How to write data to a database. [sqlgen::Result](result.md) - How sqlgen handles errors. [sqlgen::PrimaryKey](primary_key.md) - How to define primary keys in sqlgen. [sqlgen::Timestamp](timestamp.md) - How timestamps work in sqlgen. [sqlgen::Varchar](varchar.md) - How varchars work in sqlgen. [sqlgen::Flatten](flatten.md) - How to "inherit" fields from other structs. [sqlgen::Literal](literal.md) - How to define fields that only allow for a fixed set of values. ## Supported databases [postgres](postgres.md) - How to interact with PostgreSQL or a related database (Redshift, Aurora, Greenplum...). [sqlite](sqlite.md) - How to interact with SQLite3.