migrations/20261023000000_s3_multipart_counts.up.sql
Rama main · réplica de lectura del repositorio original.
CREATE TABLE IF NOT EXISTS shardline_s3_multipart_counts (
scope_namespace TEXT NOT NULL,
object_key TEXT NOT NULL,
file_id TEXT NOT NULL,
content_hash TEXT NOT NULL,
part_count INTEGER NOT NULL CHECK (part_count >= 0),
updated_at_unix_seconds BIGINT NOT NULL,
proof TEXT NOT NULL,
PRIMARY KEY (scope_namespace, object_key)
);
-- The released binaries write only shardline_s3_objects. Invalidate any
-- derived part count when such a write changes the authoritative row. Newer
-- binaries write a fresh sidecar later in the same transaction.
CREATE OR REPLACE FUNCTION shardline_invalidate_s3_multipart_count()
RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
IF TG_OP = 'DELETE' THEN
DELETE FROM shardline_s3_multipart_counts
WHERE scope_namespace = OLD.scope_namespace AND object_key = OLD.object_key;
ELSE
DELETE FROM shardline_s3_multipart_counts
WHERE scope_namespace = NEW.scope_namespace AND object_key = NEW.object_key;
IF TG_OP = 'UPDATE' AND (OLD.scope_namespace, OLD.object_key)
IS DISTINCT FROM (NEW.scope_namespace, NEW.object_key) THEN
DELETE FROM shardline_s3_multipart_counts
WHERE scope_namespace = OLD.scope_namespace AND object_key = OLD.object_key;
END IF;
END IF;
RETURN NULL;
END;
$$;
DROP TRIGGER IF EXISTS shardline_s3_multipart_counts_invalidate ON shardline_s3_objects;
CREATE TRIGGER shardline_s3_multipart_counts_invalidate
AFTER INSERT OR UPDATE OR DELETE ON shardline_s3_objects
FOR EACH ROW EXECUTE FUNCTION shardline_invalidate_s3_multipart_count();