pub struct ChangeEvent {
pub event_type: EventType,
pub lsn: Lsn,
pub metadata: Option<HashMap<String, Value>>,
}Expand description
Represents a single change event from PostgreSQL logical replication
Fields§
§event_type: EventTypeType of the event with embedded data
lsn: LsnLSN (Log Sequence Number) position
metadata: Option<HashMap<String, Value>>Additional metadata
Implementations§
Source§impl ChangeEvent
impl ChangeEvent
Sourcepub fn insert(
schema_name: String,
table_name: String,
relation_oid: u32,
data: HashMap<String, Value>,
lsn: Lsn,
) -> ChangeEvent
pub fn insert( schema_name: String, table_name: String, relation_oid: u32, data: HashMap<String, Value>, lsn: Lsn, ) -> ChangeEvent
Create a new INSERT event
§Arguments
schema_name- Database schema nametable_name- Table namerelation_oid- PostgreSQL relation OIDdata- Inserted row data as column_name -> value maplsn- Log Sequence Number for this event
§Example
use pg_walstream::{ChangeEvent, Lsn};
use std::collections::HashMap;
let mut data = HashMap::new();
data.insert("id".to_string(), serde_json::json!(1));
data.insert("name".to_string(), serde_json::json!("Alice"));
let event = ChangeEvent::insert(
"public".to_string(),
"users".to_string(),
12345,
data,
Lsn::new(0x16B374D848),
);Sourcepub fn update(
schema_name: String,
table_name: String,
relation_oid: u32,
old_data: Option<HashMap<String, Value>>,
new_data: HashMap<String, Value>,
replica_identity: ReplicaIdentity,
key_columns: Vec<String>,
lsn: Lsn,
) -> ChangeEvent
pub fn update( schema_name: String, table_name: String, relation_oid: u32, old_data: Option<HashMap<String, Value>>, new_data: HashMap<String, Value>, replica_identity: ReplicaIdentity, key_columns: Vec<String>, lsn: Lsn, ) -> ChangeEvent
Create a new UPDATE event
§Arguments
schema_name- Database schema nametable_name- Table namerelation_oid- PostgreSQL relation OIDold_data- Previous row data (may be None depending on replica identity)new_data- New row data after updatereplica_identity- Table’s replica identity setting (affects old_data availability)key_columns- Names of columns that form the replica identity keylsn- Log Sequence Number for this event
§Example
use pg_walstream::{ChangeEvent, ReplicaIdentity, Lsn};
use std::collections::HashMap;
let mut old_data = HashMap::new();
old_data.insert("id".to_string(), serde_json::json!(1));
old_data.insert("name".to_string(), serde_json::json!("Alice"));
let mut new_data = HashMap::new();
new_data.insert("id".to_string(), serde_json::json!(1));
new_data.insert("name".to_string(), serde_json::json!("Bob"));
let event = ChangeEvent::update(
"public".to_string(),
"users".to_string(),
12345,
Some(old_data),
new_data,
ReplicaIdentity::Default,
vec!["id".to_string()],
Lsn::new(0x16B374D848),
);Sourcepub fn delete(
schema_name: String,
table_name: String,
relation_oid: u32,
old_data: HashMap<String, Value>,
replica_identity: ReplicaIdentity,
key_columns: Vec<String>,
lsn: Lsn,
) -> ChangeEvent
pub fn delete( schema_name: String, table_name: String, relation_oid: u32, old_data: HashMap<String, Value>, replica_identity: ReplicaIdentity, key_columns: Vec<String>, lsn: Lsn, ) -> ChangeEvent
Create a new DELETE event
§Arguments
schema_name- Database schema nametable_name- Table namerelation_oid- PostgreSQL relation OIDold_data- Deleted row data (columns available depend on replica identity)replica_identity- Table’s replica identity settingkey_columns- Names of columns that form the replica identity keylsn- Log Sequence Number for this event
§Example
use pg_walstream::{ChangeEvent, ReplicaIdentity, Lsn};
use std::collections::HashMap;
let mut old_data = HashMap::new();
old_data.insert("id".to_string(), serde_json::json!(1));
old_data.insert("name".to_string(), serde_json::json!("Alice"));
let event = ChangeEvent::delete(
"public".to_string(),
"users".to_string(),
12345,
old_data,
ReplicaIdentity::Full,
vec!["id".to_string()],
Lsn::new(0x16B374D848),
);Sourcepub fn begin(
transaction_id: u32,
final_lsn: Lsn,
commit_timestamp: DateTime<Utc>,
lsn: Lsn,
) -> ChangeEvent
pub fn begin( transaction_id: u32, final_lsn: Lsn, commit_timestamp: DateTime<Utc>, lsn: Lsn, ) -> ChangeEvent
Create a BEGIN transaction event
Marks the beginning of a transaction in the replication stream.
§Arguments
transaction_id- PostgreSQL transaction ID (XID)final_lsn- The final LSN of the transactioncommit_timestamp- Transaction start timestamplsn- Log Sequence Number for this event
Sourcepub fn commit(
commit_timestamp: DateTime<Utc>,
lsn: Lsn,
commit_lsn: Lsn,
end_lsn: Lsn,
) -> ChangeEvent
pub fn commit( commit_timestamp: DateTime<Utc>, lsn: Lsn, commit_lsn: Lsn, end_lsn: Lsn, ) -> ChangeEvent
Create a COMMIT transaction event
Marks the successful commit of a transaction in the replication stream.
§Arguments
commit_timestamp- Transaction commit timestamplsn- Log Sequence Number for this event
Sourcepub fn truncate(tables: Vec<String>, lsn: Lsn) -> ChangeEvent
pub fn truncate(tables: Vec<String>, lsn: Lsn) -> ChangeEvent
Create a TRUNCATE event
§Arguments
tables- List of table names that were truncatedlsn- Log Sequence Number for this event
Sourcepub fn relation(lsn: Lsn) -> ChangeEvent
pub fn relation(lsn: Lsn) -> ChangeEvent
Sourcepub fn type_event(lsn: Lsn) -> ChangeEvent
pub fn type_event(lsn: Lsn) -> ChangeEvent
Sourcepub fn origin(lsn: Lsn) -> ChangeEvent
pub fn origin(lsn: Lsn) -> ChangeEvent
Sourcepub fn message(lsn: Lsn) -> ChangeEvent
pub fn message(lsn: Lsn) -> ChangeEvent
Sourcepub fn with_metadata(self, metadata: HashMap<String, Value>) -> ChangeEvent
pub fn with_metadata(self, metadata: HashMap<String, Value>) -> ChangeEvent
Set metadata for this event
Sourcepub fn get_key_columns(&self) -> Option<&Vec<String>>
pub fn get_key_columns(&self) -> Option<&Vec<String>>
Get key columns from UPDATE or DELETE events
Sourcepub fn get_replica_identity(&self) -> Option<&ReplicaIdentity>
pub fn get_replica_identity(&self) -> Option<&ReplicaIdentity>
Get replica identity from UPDATE or DELETE events
pub fn event_type_str(&self) -> &str
Trait Implementations§
Source§impl Clone for ChangeEvent
impl Clone for ChangeEvent
Source§fn clone(&self) -> ChangeEvent
fn clone(&self) -> ChangeEvent
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for ChangeEvent
impl Debug for ChangeEvent
Source§impl<'de> Deserialize<'de> for ChangeEvent
impl<'de> Deserialize<'de> for ChangeEvent
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ChangeEvent, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ChangeEvent, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl Serialize for ChangeEvent
impl Serialize for ChangeEvent
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Serialize this value into the given Serde serializer. Read more
Auto Trait Implementations§
impl Freeze for ChangeEvent
impl RefUnwindSafe for ChangeEvent
impl Send for ChangeEvent
impl Sync for ChangeEvent
impl Unpin for ChangeEvent
impl UnwindSafe for ChangeEvent
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more