AppFlowy-Cloud/migrations/20240412083446_history_init.sql
Nathan.fooo 28e0e74fd1
feat: Implement history(1) (#466)
* chore: update collab commit

* chore: collab history test

* chore: collab history test

* chore: impl redis stream

* chore: impl redis stream test

* chore: impl migration

* chore: implement history sql

* chore: add test

* chore: add test

* chore: fix test

* chore: update log and test

* chore: add xtask

* chore: clippy

* chore: impl api

* chore: add missing sqlx files

* chore: fix test

* chore: fix test
2024-04-15 09:18:19 +08:00

53 lines
2.2 KiB
SQL

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- create af_snapshot_meta table
CREATE TABLE IF NOT EXISTS af_snapshot_meta(
oid TEXT NOT NULL,
workspace_id UUID NOT NULL REFERENCES af_workspace(workspace_id) ON DELETE CASCADE,
snapshot BYTEA NOT NULL,
snapshot_version INTEGER NOT NULL,
partition_key INTEGER NOT NULL,
created_at BIGINT NOT NULL,
metadata JSONB,
PRIMARY KEY (oid, created_at, partition_key)
) PARTITION BY LIST (partition_key);
CREATE TABLE af_snapshot_meta_document PARTITION OF af_snapshot_meta FOR
VALUES IN (0);
CREATE TABLE af_snapshot_meta_database PARTITION OF af_snapshot_meta FOR
VALUES IN (1);
CREATE TABLE af_snapshot_meta_workspace_database PARTITION OF af_snapshot_meta FOR
VALUES IN (2);
CREATE TABLE af_snapshot_meta_folder PARTITION OF af_snapshot_meta FOR
VALUES IN (3);
CREATE TABLE af_snapshot_meta_database_row PARTITION OF af_snapshot_meta FOR
VALUES IN (4);
CREATE TABLE af_snapshot_meta_user_awareness PARTITION OF af_snapshot_meta FOR
VALUES IN (5);
-- create af_snapshot_state table
CREATE TABLE IF NOT EXISTS af_snapshot_state(
snapshot_id UUID NOT NULL DEFAULT uuid_generate_v4(),
workspace_id UUID NOT NULL REFERENCES af_workspace(workspace_id) ON DELETE CASCADE,
oid TEXT NOT NULL,
doc_state BYTEA NOT NULL,
doc_state_version INTEGER NOT NULL,
deps_snapshot_id UUID,
partition_key INTEGER NOT NULL,
created_at BIGINT NOT NULL,
PRIMARY KEY (snapshot_id, partition_key)
) PARTITION BY LIST (partition_key);
CREATE TABLE af_snapshot_state_document PARTITION OF af_snapshot_state FOR
VALUES IN (0);
CREATE TABLE af_snapshot_state_database PARTITION OF af_snapshot_state FOR
VALUES IN (1);
CREATE TABLE af_snapshot_state_workspace_database PARTITION OF af_snapshot_state FOR
VALUES IN (2);
CREATE TABLE af_snapshot_state_folder PARTITION OF af_snapshot_state FOR
VALUES IN (3);
CREATE TABLE af_snapshot_state_database_row PARTITION OF af_snapshot_state FOR
VALUES IN (4);
CREATE TABLE af_snapshot_state_user_awareness PARTITION OF af_snapshot_state FOR
VALUES IN (5);
-- Index for af_snapshot_state table
CREATE INDEX IF NOT EXISTS idx_snapshot_state_oid_created ON af_snapshot_state (oid, created_at DESC);