oh-my-muse/muse-cloud/sql/muse/V10__extend_meta_real_api_schema.sql

240 lines
10 KiB
SQL

-- P1R-2 Meta Real API 扩展 Schema。
-- 说明:本迁移只追加 Meta owner 自有治理事实;跨 Content/AI/Knowledge/New-API/SSE 的副作用不在此处伪造。
CREATE TABLE muse_meta_command (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
command_id VARCHAR(128) NOT NULL,
operation_id VARCHAR(128) NOT NULL,
actor_user_id BIGINT NOT NULL,
target_type VARCHAR(64) NOT NULL,
target_key VARCHAR(160) NOT NULL,
target_version INT NOT NULL,
request_hash CHAR(64) NOT NULL,
result_snapshot JSONB,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_command UNIQUE (tenant_id, command_id)
);
CREATE INDEX idx_muse_meta_command_target
ON muse_meta_command(tenant_id, target_type, target_key, target_version);
CREATE TRIGGER trg_muse_meta_command_updated_at
BEFORE UPDATE ON muse_meta_command
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_governance_audit (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
operation_id VARCHAR(128) NOT NULL,
actor_user_id BIGINT NOT NULL,
side VARCHAR(32) NOT NULL DEFAULT 'admin',
target_type VARCHAR(64) NOT NULL,
target_key VARCHAR(160) NOT NULL,
target_version INT NOT NULL,
command_id VARCHAR(128),
request_hash CHAR(64),
before_status VARCHAR(32),
after_status VARCHAR(32),
before_active_version INT,
after_active_version INT,
validation_result_id VARCHAR(128),
impact_preview_id VARCHAR(128),
request_summary TEXT,
result_summary TEXT,
reason TEXT,
status VARCHAR(32) NOT NULL,
error_code VARCHAR(64),
error_message TEXT,
source_snapshot JSONB,
result_snapshot JSONB,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX idx_muse_meta_governance_audit_target
ON muse_meta_governance_audit(tenant_id, target_type, target_key, target_version);
CREATE INDEX idx_muse_meta_governance_audit_command
ON muse_meta_governance_audit(tenant_id, command_id)
WHERE command_id IS NOT NULL;
CREATE TRIGGER trg_muse_meta_governance_audit_updated_at
BEFORE UPDATE ON muse_meta_governance_audit
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_validation_result (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
validation_result_id VARCHAR(128) NOT NULL,
schema_id BIGINT NOT NULL,
schema_key VARCHAR(100) NOT NULL,
draft_version INT NOT NULL,
draft_hash CHAR(64) NOT NULL,
status VARCHAR(32) NOT NULL,
errors JSONB NOT NULL DEFAULT '[]'::jsonb,
warnings JSONB NOT NULL DEFAULT '[]'::jsonb,
compatibility_result JSONB,
source_snapshot JSONB,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_validation_result UNIQUE (tenant_id, validation_result_id)
);
CREATE INDEX idx_muse_meta_validation_result_schema
ON muse_meta_validation_result(tenant_id, schema_id, draft_version);
CREATE TRIGGER trg_muse_meta_validation_result_updated_at
BEFORE UPDATE ON muse_meta_validation_result
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_impact_preview (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
impact_preview_id VARCHAR(128) NOT NULL,
operation_id VARCHAR(128) NOT NULL,
target_type VARCHAR(64) NOT NULL,
target_key VARCHAR(160) NOT NULL,
target_version INT NOT NULL,
draft_hash CHAR(64),
impact_summary JSONB NOT NULL DEFAULT '{}'::jsonb,
external_error_summary JSONB,
source_snapshot JSONB,
status VARCHAR(32) NOT NULL DEFAULT 'succeeded',
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_impact_preview UNIQUE (tenant_id, impact_preview_id)
);
CREATE INDEX idx_muse_meta_impact_preview_target
ON muse_meta_impact_preview(tenant_id, target_type, target_key, target_version);
CREATE TRIGGER trg_muse_meta_impact_preview_updated_at
BEFORE UPDATE ON muse_meta_impact_preview
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_gray_rule (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
schema_id BIGINT NOT NULL,
schema_version_id BIGINT NOT NULL,
version_no INT NOT NULL,
rule_key VARCHAR(128) NOT NULL,
scope VARCHAR(64) NOT NULL,
rule_snapshot JSONB NOT NULL DEFAULT '{}'::jsonb,
status VARCHAR(32) NOT NULL DEFAULT 'active',
command_id VARCHAR(128),
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_gray_rule UNIQUE (tenant_id, schema_version_id, rule_key)
);
CREATE INDEX idx_muse_meta_gray_rule_schema
ON muse_meta_gray_rule(tenant_id, schema_id, version_no);
CREATE TRIGGER trg_muse_meta_gray_rule_updated_at
BEFORE UPDATE ON muse_meta_gray_rule
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_function_chain_version (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
chain_id BIGINT NOT NULL,
chain_key VARCHAR(100) NOT NULL,
version_no INT NOT NULL,
status VARCHAR(32) NOT NULL DEFAULT 'draft',
active_flag BOOLEAN NOT NULL DEFAULT FALSE,
chain_snapshot JSONB NOT NULL DEFAULT '{}'::jsonb,
impact_preview_id VARCHAR(128),
command_id VARCHAR(128),
activated_by VARCHAR(64),
activated_at TIMESTAMP,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_function_chain_version UNIQUE (tenant_id, chain_id, version_no)
);
CREATE INDEX idx_muse_meta_function_chain_version_chain
ON muse_meta_function_chain_version(tenant_id, chain_id);
CREATE UNIQUE INDEX uk_muse_meta_function_chain_version_active
ON muse_meta_function_chain_version(tenant_id, chain_id)
WHERE active_flag = TRUE AND deleted = FALSE;
CREATE TRIGGER trg_muse_meta_function_chain_version_updated_at
BEFORE UPDATE ON muse_meta_function_chain_version
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_function_chain_slot (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
chain_version_id BIGINT NOT NULL,
slot_key VARCHAR(128) NOT NULL,
slot_type VARCHAR(64) NOT NULL,
required_node_type VARCHAR(64),
replaceable BOOLEAN NOT NULL DEFAULT TRUE,
slot_snapshot JSONB NOT NULL DEFAULT '{}'::jsonb,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_function_chain_slot UNIQUE (tenant_id, chain_version_id, slot_key)
);
CREATE INDEX idx_muse_meta_function_chain_slot_version
ON muse_meta_function_chain_slot(tenant_id, chain_version_id);
CREATE TRIGGER trg_muse_meta_function_chain_slot_updated_at
BEFORE UPDATE ON muse_meta_function_chain_slot
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE TABLE muse_meta_function_chain_node (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
chain_version_id BIGINT NOT NULL,
slot_id BIGINT,
node_key VARCHAR(100) NOT NULL,
node_type VARCHAR(64) NOT NULL,
protection_node_id BIGINT,
replaceable BOOLEAN NOT NULL DEFAULT FALSE,
node_snapshot JSONB NOT NULL DEFAULT '{}'::jsonb,
creator VARCHAR(64) NOT NULL DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updater VARCHAR(64) NOT NULL DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_muse_meta_function_chain_node UNIQUE (tenant_id, chain_version_id, node_key)
);
CREATE INDEX idx_muse_meta_function_chain_node_version
ON muse_meta_function_chain_node(tenant_id, chain_version_id);
CREATE INDEX idx_muse_meta_function_chain_node_protection
ON muse_meta_function_chain_node(tenant_id, protection_node_id)
WHERE protection_node_id IS NOT NULL;
CREATE TRIGGER trg_muse_meta_function_chain_node_updated_at
BEFORE UPDATE ON muse_meta_function_chain_node
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
CREATE UNIQUE INDEX uk_muse_meta_schema_version_active_schema_id
ON muse_meta_schema_version(tenant_id, schema_id)
WHERE active_flag = TRUE AND deleted = FALSE;
ALTER TABLE muse_meta_protection_node
ADD COLUMN IF NOT EXISTS node_type VARCHAR(64) NOT NULL DEFAULT 'system',
ADD COLUMN IF NOT EXISTS irreplaceable_reason TEXT,
ADD COLUMN IF NOT EXISTS permission_requirement JSONB,
ADD COLUMN IF NOT EXISTS audit_requirement JSONB,
ADD COLUMN IF NOT EXISTS shadow_to_canonical_boundary JSONB,
ADD COLUMN IF NOT EXISTS observability_metrics JSONB;