CREATE SEQUENCE eventstore.event_seq; GRANT UPDATE ON TABLE eventstore.event_seq TO management; GRANT UPDATE ON TABLE eventstore.event_seq TO eventstore; GRANT UPDATE ON TABLE eventstore.event_seq TO adminapi; GRANT UPDATE ON TABLE eventstore.event_seq TO auth; GRANT UPDATE ON TABLE eventstore.event_seq TO authz; GRANT UPDATE ON TABLE eventstore.event_seq TO notification; SET experimental_enable_hash_sharded_indexes = on; CREATE TABLE eventstore.events ( id UUID DEFAULT gen_random_uuid(), event_type TEXT, aggregate_type TEXT NOT NULL, aggregate_id TEXT NOT NULL, aggregate_version TEXT NOT NULL, event_sequence BIGINT NOT NULL DEFAULT nextval('eventstore.event_seq'), previous_sequence BIGINT, creation_date TIMESTAMPTZ NOT NULL DEFAULT now(), event_data JSONB, editor_user TEXT NOT NULL, editor_service TEXT NOT NULL, resource_owner TEXT NOT NULL, CONSTRAINT event_sequence_pk PRIMARY KEY (event_sequence DESC) USING HASH WITH BUCKET_COUNT = 10, INDEX agg_type_agg_id (aggregate_type, aggregate_id), CONSTRAINT previous_sequence_unique UNIQUE (previous_sequence DESC) );