diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2018-12-19 17:07:31 -0800 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-12-24 16:27:01 -0800 | 
| commit | d8f290285832402ba7220440f29e5bbff0aecdca (patch) | |
| tree | fc1cf84b25c3c89b5e7f88198a4ca73d9e6414e2 /rust | |
| parent | bb7604b4db67f50cb0c860d548c780ab218175a8 (diff) | |
| download | fatcat-d8f290285832402ba7220440f29e5bbff0aecdca.tar.gz fatcat-d8f290285832402ba7220440f29e5bbff0aecdca.zip | |
fileset and webcapture SQL schemas
Diffstat (limited to 'rust')
| -rw-r--r-- | rust/migrations/2018-05-12-001226_init/up.sql | 116 | 
1 files changed, 115 insertions, 1 deletions
| diff --git a/rust/migrations/2018-05-12-001226_init/up.sql b/rust/migrations/2018-05-12-001226_init/up.sql index c842295e..57209d2c 100644 --- a/rust/migrations/2018-05-12-001226_init/up.sql +++ b/rust/migrations/2018-05-12-001226_init/up.sql @@ -185,6 +185,109 @@ CREATE TABLE file_edit (      UNIQUE (editgroup_id, ident_id)  ); +-------------------- Fileset ----------------------------------------------- +CREATE TABLE fileset_rev ( +    id                  UUID PRIMARY KEY DEFAULT uuid_generate_v4(), +    extra_json          JSONB +); + +CREATE TABLE fileset_rev_url ( +    id                  BIGSERIAL PRIMARY KEY, +    fileset_rev         UUID REFERENCES fileset_rev(id) NOT NULL, +    rel                 TEXT NOT NULL, -- TODO: enum? web, webarchive, repo, etc TODO: default web? +    url                 TEXT NOT NULL +); + +CREATE INDEX fileset_rev_url_rev_idx ON fileset_rev_url(fileset_rev); + +CREATE TABLE fileset_rev_manifest ( +    id                  BIGSERIAL PRIMARY KEY, +    fileset_rev         UUID REFERENCES fileset_rev(id) NOT NULL, +    surt                TEXT NOT NULL, +    url                 TEXT NOT NULL, +    timestamp           BIGINT NOT NULL, +    status_code         BIGINT NOT NULL, +    mimetype            TEXT, +    sha1                TEXT CHECK(octet_length(sha1) = 40) NOT NULL, +    sha256              TEXT CHECK(octet_length(sha256) = 64), +    extra_json          JSONB +); + +CREATE INDEX fileset_rev_manifest_rev_idx ON fileset_rev_manifest(fileset_rev); + +CREATE TABLE fileset_ident ( +    id                  UUID PRIMARY KEY DEFAULT uuid_generate_v4(), +    is_live             BOOL NOT NULL DEFAULT false, +    rev_id              UUID REFERENCES fileset_rev(id), +    redirect_id         UUID REFERENCES fileset_ident(id) +); + +CREATE INDEX fileset_ident_rev_idx ON fileset_ident(rev_id); + +CREATE TABLE fileset_edit ( +    id                  BIGSERIAL PRIMARY KEY, +    editgroup_id        UUID REFERENCES editgroup(id) NOT NULL, +    updated             TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL, +    ident_id            UUID REFERENCES fileset_ident(id) NOT NULL, +    rev_id              UUID REFERENCES fileset_rev(id), +    redirect_id         UUID REFERENCES fileset_ident(id), +    prev_rev            UUID REFERENCES fileset_rev(id), +    extra_json          JSONB, +    UNIQUE (editgroup_id, ident_id) +); + +-------------------- Webcapture ----------------------------------------------- +CREATE TABLE webcapture_rev ( +    id                  UUID PRIMARY KEY DEFAULT uuid_generate_v4(), +    extra_json          JSONB, + +    original_url        TEXT NOT NULL, +    timestamp           TIMESTAMP WITH TIME ZONE NOT NULL +); + +CREATE TABLE webcapture_rev_archive_url ( +    id                  BIGSERIAL PRIMARY KEY, +    webcapture_rev      UUID REFERENCES webcapture_rev(id) NOT NULL, +    rel                 TEXT NOT NULL, -- TODO: enum? web, webarchive, repo, etc TODO: default web? +    url                 TEXT NOT NULL +); + +CREATE INDEX webcapture_rev_url_archive_rev_idx ON webcapture_rev_archive_url(webcapture_rev); + +CREATE TABLE webcapture_rev_cdx ( +    id                  BIGSERIAL PRIMARY KEY, +    webcapture_rev      UUID REFERENCES webcapture_rev(id) NOT NULL, +    path_name           TEXT NOT NULL, +    size_bytes          BIGINT NOT NULL, +    md5                 TEXT CHECK(octet_length(md5) = 32), +    sha1                TEXT CHECK(octet_length(sha1) = 40), +    sha256              TEXT CHECK(octet_length(sha256) = 64) +    -- could extend with: language (detection), simhash, redirect +); + +CREATE INDEX webcapture_rev_cdx_rev_idx ON webcapture_rev_cdx(webcapture_rev); + +CREATE TABLE webcapture_ident ( +    id                  UUID PRIMARY KEY DEFAULT uuid_generate_v4(), +    is_live             BOOL NOT NULL DEFAULT false, +    rev_id              UUID REFERENCES webcapture_rev(id), +    redirect_id         UUID REFERENCES webcapture_ident(id) +); + +CREATE INDEX webcapture_ident_rev_idx ON webcapture_ident(rev_id); + +CREATE TABLE webcapture_edit ( +    id                  BIGSERIAL PRIMARY KEY, +    editgroup_id        UUID REFERENCES editgroup(id) NOT NULL, +    updated             TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL, +    ident_id            UUID REFERENCES webcapture_ident(id) NOT NULL, +    rev_id              UUID REFERENCES webcapture_rev(id), +    redirect_id         UUID REFERENCES webcapture_ident(id), +    prev_rev            UUID REFERENCES webcapture_rev(id), +    extra_json          JSONB, +    UNIQUE (editgroup_id, ident_id) +); +  -------------------- Release -----------------------------------------------  CREATE TABLE release_rev (      id                  UUID PRIMARY KEY DEFAULT uuid_generate_v4(), @@ -323,8 +426,19 @@ CREATE TABLE file_release (      target_release_ident_id UUID REFERENCES release_ident(id) NOT NULL,      PRIMARY KEY (file_rev, target_release_ident_id)  ); -  CREATE INDEX file_release_target_release_idx ON file_release(target_release_ident_id); +CREATE TABLE fileset_release ( +    fileset_rev             UUID REFERENCES fileset_rev(id) NOT NULL, +    target_release_ident_id UUID REFERENCES release_ident(id) NOT NULL, +    PRIMARY KEY (fileset_rev, target_release_ident_id) +); +CREATE INDEX fileset_release_target_release_idx ON fileset_release(target_release_ident_id); +CREATE TABLE webcapture_release ( +    webcapture_rev          UUID REFERENCES webcapture_rev(id) NOT NULL, +    target_release_ident_id UUID REFERENCES release_ident(id) NOT NULL, +    PRIMARY KEY (webcapture_rev, target_release_ident_id) +); +CREATE INDEX webcapture_release_target_release_idx ON webcapture_release(target_release_ident_id);  ---------------------------------------------------------------------------  --------------------------------------------------------------------------- | 
