# 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::delete_from](delete_from.md) - How to delete data from a table. [sqlgen::Pattern](pattern.md) - How to add regex pattern validation to avoid SQL injection. ## 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.