Akka.Persistence.PostgreSql
1.3.8
Prefix Reserved
See the version list below for details.
dotnet add package Akka.Persistence.PostgreSql --version 1.3.8
NuGet\Install-Package Akka.Persistence.PostgreSql -Version 1.3.8
<PackageReference Include="Akka.Persistence.PostgreSql" Version="1.3.8" />
paket add Akka.Persistence.PostgreSql --version 1.3.8
#r "nuget: Akka.Persistence.PostgreSql, 1.3.8"
// Install Akka.Persistence.PostgreSql as a Cake Addin #addin nuget:?package=Akka.Persistence.PostgreSql&version=1.3.8 // Install Akka.Persistence.PostgreSql as a Cake Tool #tool nuget:?package=Akka.Persistence.PostgreSql&version=1.3.8
Akka.Persistence.PostgreSql
Akka Persistence journal and snapshot store backed by PostgreSql database.
Configuration
Both journal and snapshot store share the same configuration keys (however they resides in separate scopes, so they are definied distinctly for either journal or snapshot store):
Remember that connection string must be provided separately to Journal and Snapshot Store.
akka.persistence{
journal {
plugin = "akka.persistence.journal.postgresql"
postgresql {
# qualified type name of the PostgreSql persistence journal actor
class = "Akka.Persistence.PostgreSql.Journal.PostgreSqlJournal, Akka.Persistence.PostgreSql"
# dispatcher used to drive journal actor
plugin-dispatcher = "akka.actor.default-dispatcher"
# connection string used for database access
connection-string = ""
# default SQL commands timeout
connection-timeout = 30s
# PostgreSql schema name to table corresponding with persistent journal
schema-name = public
# PostgreSql table corresponding with persistent journal
table-name = event_journal
# should corresponding journal table be initialized automatically
auto-initialize = off
# timestamp provider used for generation of journal entries timestamps
timestamp-provider = "Akka.Persistence.Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql.Common"
# metadata table
metadata-table-name = metadata
# defines column db type used to store payload. Available option: BYTEA (default), JSON, JSONB
stored-as = BYTEA
}
}
snapshot-store {
plugin = "akka.persistence.snapshot-store.postgresql"
postgresql {
# qualified type name of the PostgreSql persistence journal actor
class = "Akka.Persistence.PostgreSql.Snapshot.PostgreSqlSnapshotStore, Akka.Persistence.PostgreSql"
# dispatcher used to drive journal actor
plugin-dispatcher = ""akka.actor.default-dispatcher""
# connection string used for database access
connection-string = ""
# default SQL commands timeout
connection-timeout = 30s
# PostgreSql schema name to table corresponding with persistent journal
schema-name = public
# PostgreSql table corresponding with persistent journal
table-name = snapshot_store
# should corresponding journal table be initialized automatically
auto-initialize = off
# defines column db type used to store payload. Available option: BYTEA (default), JSON, JSONB
stored-as = BYTEA
}
}
}
Table Schema
PostgreSql persistence plugin defines a default table schema used for journal, snapshot store and metadate table.
CREATE TABLE {your_journal_table_name} (
ordering BIGSERIAL NOT NULL PRIMARY KEY,
persistence_id VARCHAR(255) NOT NULL,
sequence_nr BIGINT NOT NULL,
is_deleted BOOLEAN NOT NULL,
created_at BIGINT NOT NULL,
manifest VARCHAR(500) NOT NULL,
payload BYTEA NOT NULL,
tags VARCHAR(100) NULL,
serializer_id INTEGER NULL,
CONSTRAINT {your_journal_table_name}_uq UNIQUE (persistence_id, sequence_nr)
);
CREATE TABLE {your_snapshot_table_name} (
persistence_id VARCHAR(255) NOT NULL,
sequence_nr BIGINT NOT NULL,
created_at BIGINT NOT NULL,
manifest VARCHAR(500) NOT NULL,
payload BYTEA NOT NULL,
serializer_id INTEGER NULL,
CONSTRAINT {your_snapshot_table_name}_pk PRIMARY KEY (persistence_id, sequence_nr)
);
CREATE TABLE {your_metadata_table_name} (
persistence_id VARCHAR(255) NOT NULL,
sequence_nr BIGINT NOT NULL,
CONSTRAINT {your_metadata_table_name}_pk PRIMARY KEY (persistence_id, sequence_nr)
);
Migration
From 1.1.0 to 1.3.1
ALTER TABLE {your_journal_table_name} ADD COLUMN serializer_id INTEGER NULL;
ALTER TABLE {your_snapshot_table_name} ADD COLUMN serializer_id INTEGER NULL;
From 1.0.6 to 1.1.0
CREATE TABLE {your_metadata_table_name} (
persistence_id VARCHAR(255) NOT NULL,
sequence_nr BIGINT NOT NULL,
CONSTRAINT {your_metadata_table_name}_pk PRIMARY KEY (persistence_id, sequence_nr)
);
ALTER TABLE {your_journal_table_name} DROP CONSTRAINT {your_journal_table_name}_pk;
ALTER TABLE {your_journal_table_name} ADD COLUMN ordering BIGSERIAL NOT NULL PRIMARY KEY;
ALTER TABLE {your_journal_table_name} ADD COLUMN tags VARCHAR(100) NULL;
ALTER TABLE {your_journal_table_name} ADD CONSTRAINT {your_journal_table_name}_uq UNIQUE (persistence_id, sequence_nr);
ALTER TABLE {your_journal_table_name} ADD COLUMN created_at_temp BIGINT NOT NULL;
UPDATE {your_journal_table_name} SET created_at_temp=extract(epoch from create_at);
ALTER TABLE {your_journal_table_name} DROP COLUMN create_at;
ALTER TABLE {your_journal_table_name} DROP COLUMN created_at_ticks;
ALTER TABLE {your_journal_table_name} RENAME COLUMN created_at_temp TO create_at;
Tests
The PostgreSql tests are packaged and run as part of the default "All" build task.
In order to run the tests, you must do the following things:
- Download and install PostgreSql from: http://www.postgresql.org/download/
- Install PostgreSql with the default settings. The default connection string uses the following credentials:
- Username: postgres
- Password: postgres
- A custom app.config file can be used and needs to be placed in the same folder as the dll
or run postgres in docker
docker run -d --rm --name=akka-postgres-db -p 5432:5432 -l deployer=akkadotnet -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres postgres:9.6
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.6 is compatible. netstandard2.0 was computed. netstandard2.1 was computed. |
.NET Framework | net45 is compatible. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.5
- Akka.Persistence.Sql.Common (>= 1.3.8)
- Npgsql (>= 3.2.5)
-
.NETStandard 1.6
- Akka.Persistence.Sql.Common (>= 1.3.8)
- NETStandard.Library (>= 1.6.1)
- Npgsql (>= 3.2.5)
- System.Data.SqlClient (>= 4.3.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Akka.Persistence.PostgreSql:
Package | Downloads |
---|---|
Akka.Persistence.PostgreSql.Hosting
Akka.Persistence.PostgreSql Microsoft.Extensions.Hosting support. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.5.20 | 17,969 | 5/10/2024 |
1.5.15.1 | 13,526 | 1/29/2024 |
1.5.15 | 240 | 1/29/2024 |
1.5.13 | 16,376 | 10/4/2023 |
1.5.4.1 | 20,089 | 4/27/2023 |
1.5.4 | 3,149 | 4/25/2023 |
1.5.3 | 432 | 4/21/2023 |
1.5.2 | 4,616 | 4/6/2023 |
1.5.1.1 | 873 | 3/22/2023 |
1.5.1 | 791 | 3/16/2023 |
1.5.0 | 2,686 | 3/2/2023 |
1.4.46 | 12,747 | 11/30/2022 |
1.4.45 | 22,287 | 10/21/2022 |
1.4.35 | 42,279 | 3/25/2022 |
1.4.32 | 6,145 | 1/18/2022 |
1.4.31 | 13,261 | 12/21/2021 |
1.4.29 | 381 | 12/15/2021 |
1.4.25 | 3,001 | 9/9/2021 |
1.4.19 | 6,102 | 6/16/2021 |
1.4.17 | 2,374 | 3/17/2021 |
1.3.9 | 47,653 | 8/29/2018 |
1.3.8 | 5,857 | 7/8/2018 |
1.3.1 | 4,377 | 9/12/2017 |
1.1.2.4-beta | 1,344 | 1/12/2017 |
1.0.5.2-beta | 1,146 | 12/10/2015 |
1.0.4.1-beta | 1,314 | 8/8/2015 |
1.0.3-beta | 972 | 6/12/2015 |
1.0.2.9-beta | 1,002 | 6/3/2015 |
Upgraded to support Akka.NET 1.3.8 and to take advantage of some performance improvements that have been added to Akka.Persistence for loading large snapshots, which you can read more about here: https://github.com/akkadotnet/akka.net/issues/3422
Note that this feature is currently disabled by default in Akka.Persistence.PostgreSql due to https://github.com/AkkaNetContrib/Akka.Persistence.PostgreSql/issues/53