# Substreams Sink Database Changes [github](https://github.com/streamingfast/substreams-sink-database-changes) [crates.io](https://crates.io/crates/substreams-database-change) [docs.rs](https://docs.rs/substreams-database-change) [GitHub Workflow Status](https://github.com/streamingfast/substreams-sink-database-changes/actions?query=branch%3Adevelop) > `substreams-sink-database-changes` contains all the definitions for database changes which can be emitted by a substream. ## Used by - [substreams-sink-postgres](https://github.com/streamingfast/substreams-sink-postgres) - [substreams-sink-mongodb](https://github.com/streamingfast/substreams-sink-mongodb) ## Install ```bash # The Rust crate is named substreams-database-change for historical reasons cargo add substreams-database-change ``` ## Quickstart **Cargo.toml** ```toml [dependencies] substreams = "0.5" substreams-database-change = "1.0" ``` **src/lib.rs** ```rust use substreams::errors::Error; use substreams_database_change::pb::database::{DatabaseChanges, table_change::Operation}; #[substreams::handlers::map] fn db_out( ... some stores ... ) -> Result { // Initialize Database Changes container let mut database_changes: DatabaseChanges = Default::default(); // Push change database_changes.push_change("transfer", "primary-key", 0, Operation::Create) .change("key1", ("previous1", "value1")) .change("key2", ("previous2", "value2")); Ok(database_changes) } ``` ### Re-generate Protobuf Be sure to have `buf` CLI installed (https://buf.build/docs/installation/) and run: ```bash buf generate proto ```