| CREATE TABLE IF NOT EXISTS event_journal( |
| slice INT NOT NULL, |
| entity_type VARCHAR(255) NOT NULL, |
| persistence_id VARCHAR(255) NOT NULL, |
| seq_nr BIGINT NOT NULL, |
| db_timestamp timestamp with time zone NOT NULL, |
| |
| event_ser_id INTEGER NOT NULL, |
| event_ser_manifest VARCHAR(255) NOT NULL, |
| event_payload BYTEA NOT NULL, |
| |
| deleted BOOLEAN DEFAULT FALSE NOT NULL, |
| writer VARCHAR(255) NOT NULL, |
| adapter_manifest VARCHAR(255), |
| tags TEXT ARRAY, |
| |
| meta_ser_id INTEGER, |
| meta_ser_manifest VARCHAR(255), |
| meta_payload BYTEA, |
| |
| PRIMARY KEY(persistence_id, seq_nr) |
| ); |
| |
| -- `event_journal_slice_idx` is only needed if the slice based queries are used |
| CREATE INDEX IF NOT EXISTS event_journal_slice_idx ON event_journal(slice, entity_type, db_timestamp, seq_nr); |
| |
| CREATE TABLE IF NOT EXISTS snapshot( |
| slice INT NOT NULL, |
| entity_type VARCHAR(255) NOT NULL, |
| persistence_id VARCHAR(255) NOT NULL, |
| seq_nr BIGINT NOT NULL, |
| write_timestamp BIGINT NOT NULL, |
| ser_id INTEGER NOT NULL, |
| ser_manifest VARCHAR(255) NOT NULL, |
| snapshot BYTEA NOT NULL, |
| meta_ser_id INTEGER, |
| meta_ser_manifest VARCHAR(255), |
| meta_payload BYTEA, |
| |
| PRIMARY KEY(persistence_id) |
| ); |
| |
| CREATE TABLE IF NOT EXISTS durable_state ( |
| slice INT NOT NULL, |
| entity_type VARCHAR(255) NOT NULL, |
| persistence_id VARCHAR(255) NOT NULL, |
| revision BIGINT NOT NULL, |
| db_timestamp timestamp with time zone NOT NULL, |
| |
| state_ser_id INTEGER NOT NULL, |
| state_ser_manifest VARCHAR(255), |
| state_payload BYTEA NOT NULL, |
| tags TEXT ARRAY, |
| |
| PRIMARY KEY(persistence_id, revision) |
| ); |
| |
| -- `durable_state_slice_idx` is only needed if the slice based queries are used |
| CREATE INDEX IF NOT EXISTS durable_state_slice_idx ON durable_state(slice, entity_type, db_timestamp, revision); |
| |
| -- Primitive offset types are stored in this table. |
| -- If only timestamp based offsets are used this table is optional. |
| -- Configure pekko.projection.r2dbc.offset-store.offset-table="" if the table is not created. |
| CREATE TABLE IF NOT EXISTS projection_offset_store ( |
| projection_name VARCHAR(255) NOT NULL, |
| projection_key VARCHAR(255) NOT NULL, |
| current_offset VARCHAR(255) NOT NULL, |
| manifest VARCHAR(32) NOT NULL, |
| mergeable BOOLEAN NOT NULL, |
| last_updated BIGINT NOT NULL, |
| PRIMARY KEY(projection_name, projection_key) |
| ); |
| |
| -- Timestamp based offsets are stored in this table. |
| CREATE TABLE IF NOT EXISTS projection_timestamp_offset_store ( |
| projection_name VARCHAR(255) NOT NULL, |
| projection_key VARCHAR(255) NOT NULL, |
| slice INT NOT NULL, |
| persistence_id VARCHAR(255) NOT NULL, |
| seq_nr BIGINT NOT NULL, |
| -- timestamp_offset is the db_timestamp of the original event |
| timestamp_offset timestamp with time zone NOT NULL, |
| -- timestamp_consumed is when the offset was stored |
| -- the consumer lag is timestamp_consumed - timestamp_offset |
| timestamp_consumed timestamp with time zone NOT NULL, |
| PRIMARY KEY(slice, projection_name, timestamp_offset, persistence_id, seq_nr) |
| ); |
| |
| CREATE TABLE IF NOT EXISTS projection_management ( |
| projection_name VARCHAR(255) NOT NULL, |
| projection_key VARCHAR(255) NOT NULL, |
| paused BOOLEAN NOT NULL, |
| last_updated BIGINT NOT NULL, |
| PRIMARY KEY(projection_name, projection_key) |
| ); |