Packages
eventstore
0.11.0-rc.0
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.3
1.2.2
1.2.1
1.2.0
1.1.0
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.14.0-rc.0
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.11.0-rc.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.1
0.2.0
0.1.0
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Event store using PostgreSQL for persistence.
Current section
Files
Jump to
Current section
Files
guides/Usage.md
# Using the EventStore
## Writing to a stream
Create a unique identity for each stream. It **must** be a string. This example uses the [uuid](https://hex.pm/packages/uuid) package.
```elixir
stream_uuid = UUID.uuid4()
```
Set the expected version of the stream. This is used for optimistic concurrency. A new stream will be created when the expected version is zero.
```elixir
expected_version = 0
```
Build a list of events to persist. The data and metadata fields will be serialized to binary data. This uses your own serializer, as defined in config, that implements the `EventStore.Serializer` behaviour.
```elixir
events = [
%EventStore.EventData{
event_type: "Elixir.ExampleEvent",
data: %ExampleEvent{key: "value"},
metadata: %{user: "someuser@example.com"},
}
]
```
Append the events to the stream:
```elixir
:ok = EventStore.append_to_stream(stream_uuid, expected_version, events)
```
## Reading from a stream
Read all events from a single stream, starting at the stream's first event:
```elixir
{:ok, events} = EventStore.read_stream_forward(stream_uuid)
```
## Reading from all streams
Read all events from all streams:
```elixir
{:ok, events} = EventStore.read_all_streams_forward()
```
By default this will be limited to read the first 1,000 events from all streams only.
## Stream from all streams
Stream all events from all streams:
```elixir
all_events = EventStore.stream_all_forward() |> Enum.to_list()
```
This will read *all* events into memory, it is for illustration only. Use the `Stream` functions to process the events in a memory efficient way.
Next: [Subscriptions](subscriptions.html)