38 lines
1.5 KiB
SQL
38 lines
1.5 KiB
SQL
CREATE TABLE buckets (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE UNIQUE INDEX idx_buckets_name ON buckets (name);
|
|
|
|
CREATE TABLE objects (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
bucket_id UUID NOT NULL REFERENCES buckets(id) ON DELETE CASCADE,
|
|
key TEXT NOT NULL,
|
|
size BIGINT NOT NULL,
|
|
etag TEXT NOT NULL,
|
|
content_type TEXT NOT NULL DEFAULT 'application/octet-stream',
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE UNIQUE INDEX idx_objects_bucket_key ON objects (bucket_id, key);
|
|
CREATE INDEX idx_objects_key_prefix ON objects (bucket_id, key text_pattern_ops);
|
|
|
|
CREATE TABLE object_metadata (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
object_id UUID NOT NULL REFERENCES objects(id) ON DELETE CASCADE,
|
|
meta_key TEXT NOT NULL,
|
|
meta_value TEXT NOT NULL
|
|
);
|
|
CREATE UNIQUE INDEX idx_metadata_object_key ON object_metadata (object_id, meta_key);
|
|
CREATE INDEX idx_metadata_object_id ON object_metadata (object_id);
|
|
|
|
CREATE TABLE blocks (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
object_id UUID NOT NULL REFERENCES objects(id) ON DELETE CASCADE,
|
|
block_index INT NOT NULL,
|
|
data BYTEA NOT NULL,
|
|
block_size INT NOT NULL
|
|
);
|
|
CREATE UNIQUE INDEX idx_blocks_object_index ON blocks (object_id, block_index);
|
|
CREATE INDEX idx_blocks_object_id ON blocks (object_id);
|