558 lines
24 KiB
SQL
558 lines
24 KiB
SQL
-- public.chat_messages definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.chat_messages;
|
|
|
|
CREATE TABLE public.chat_messages (
|
|
id serial4 NOT NULL,
|
|
thread_id varchar(255) NOT NULL,
|
|
checkpoint_id varchar(255) NOT NULL,
|
|
message_index int4 NOT NULL,
|
|
"role" varchar(20) NOT NULL,
|
|
"content" text NOT NULL,
|
|
injected_content text NULL,
|
|
has_files bool DEFAULT false NULL,
|
|
metadata jsonb NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
"name" varchar(255) NULL,
|
|
CONSTRAINT chat_messages_pkey PRIMARY KEY (id),
|
|
CONSTRAINT uk_checkpoint_message UNIQUE (checkpoint_id, message_index)
|
|
);
|
|
CREATE INDEX idx_chat_messages_checkpoint_id ON public.chat_messages USING btree (checkpoint_id);
|
|
CREATE INDEX idx_chat_messages_content_search ON public.chat_messages USING gin (to_tsvector('simple'::regconfig, content));
|
|
CREATE INDEX idx_chat_messages_has_files ON public.chat_messages USING btree (has_files);
|
|
CREATE INDEX idx_chat_messages_metadata ON public.chat_messages USING gin (metadata);
|
|
CREATE INDEX idx_chat_messages_role ON public.chat_messages USING btree (role);
|
|
CREATE INDEX idx_chat_messages_thread_created ON public.chat_messages USING btree (thread_id, created_at DESC);
|
|
CREATE INDEX idx_chat_messages_thread_id ON public.chat_messages USING btree (thread_id);
|
|
|
|
|
|
-- public.checkpoint_blobs definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.checkpoint_blobs;
|
|
|
|
CREATE TABLE public.checkpoint_blobs (
|
|
thread_id text NOT NULL,
|
|
checkpoint_ns text DEFAULT ''::text NOT NULL,
|
|
channel text NOT NULL,
|
|
"version" text NOT NULL,
|
|
"type" text NOT NULL,
|
|
"blob" bytea NULL,
|
|
CONSTRAINT checkpoint_blobs_pkey PRIMARY KEY (thread_id, checkpoint_ns, channel, version)
|
|
);
|
|
CREATE INDEX checkpoint_blobs_thread_id_idx ON public.checkpoint_blobs USING btree (thread_id);
|
|
|
|
|
|
-- public.checkpoint_migrations definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.checkpoint_migrations;
|
|
|
|
CREATE TABLE public.checkpoint_migrations (
|
|
v int4 NOT NULL,
|
|
CONSTRAINT checkpoint_migrations_pkey PRIMARY KEY (v)
|
|
);
|
|
|
|
|
|
-- public.checkpoint_writes definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.checkpoint_writes;
|
|
|
|
CREATE TABLE public.checkpoint_writes (
|
|
thread_id text NOT NULL,
|
|
checkpoint_ns text DEFAULT ''::text NOT NULL,
|
|
checkpoint_id text NOT NULL,
|
|
task_id text NOT NULL,
|
|
idx int4 NOT NULL,
|
|
channel text NOT NULL,
|
|
"type" text NULL,
|
|
"blob" bytea NOT NULL,
|
|
task_path text DEFAULT ''::text NOT NULL,
|
|
CONSTRAINT checkpoint_writes_pkey PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id, task_id, idx)
|
|
);
|
|
CREATE INDEX checkpoint_writes_thread_id_idx ON public.checkpoint_writes USING btree (thread_id);
|
|
|
|
|
|
-- public.checkpoints definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.checkpoints;
|
|
|
|
CREATE TABLE public.checkpoints (
|
|
thread_id text NOT NULL,
|
|
checkpoint_ns text DEFAULT ''::text NOT NULL,
|
|
checkpoint_id text NOT NULL,
|
|
parent_checkpoint_id text NULL,
|
|
"type" text NULL,
|
|
"checkpoint" jsonb NOT NULL,
|
|
metadata jsonb DEFAULT '{}'::jsonb NOT NULL,
|
|
CONSTRAINT checkpoints_pkey PRIMARY KEY (thread_id, checkpoint_ns, checkpoint_id)
|
|
);
|
|
CREATE INDEX checkpoints_thread_id_idx ON public.checkpoints USING btree (thread_id);
|
|
|
|
|
|
-- public.enterprise definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.enterprise;
|
|
|
|
CREATE TABLE public.enterprise (
|
|
id serial4 NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
code varchar(64) NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
ai_display_name varchar(128) DEFAULT '智能助手 AI'::character varying NOT NULL,
|
|
CONSTRAINT enterprise_code_key UNIQUE (code),
|
|
CONSTRAINT enterprise_pkey PRIMARY KEY (id)
|
|
);
|
|
|
|
|
|
-- public.chat_message_file definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.chat_message_file;
|
|
|
|
CREATE TABLE public.chat_message_file (
|
|
id serial4 NOT NULL,
|
|
thread_id varchar(255) NOT NULL,
|
|
checkpoint_id varchar(255) NOT NULL,
|
|
message_index int4 NOT NULL,
|
|
file_id int4 NOT NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
CONSTRAINT chat_message_file_pkey PRIMARY KEY (id),
|
|
CONSTRAINT uk_message_file UNIQUE (checkpoint_id, message_index, file_id)
|
|
);
|
|
CREATE INDEX idx_chat_message_file_checkpoint ON public.chat_message_file USING btree (checkpoint_id, message_index);
|
|
CREATE INDEX idx_chat_message_file_file_id ON public.chat_message_file USING btree (file_id);
|
|
CREATE INDEX idx_chat_message_file_thread_checkpoint ON public.chat_message_file USING btree (thread_id, checkpoint_id);
|
|
CREATE INDEX idx_chat_message_file_thread_id ON public.chat_message_file USING btree (thread_id);
|
|
|
|
|
|
-- public.chat_thread_chunk definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.chat_thread_chunk;
|
|
|
|
CREATE TABLE public.chat_thread_chunk (
|
|
id serial4 NOT NULL,
|
|
file_id int4 NOT NULL,
|
|
thread_id varchar(255) NOT NULL,
|
|
chunk_index int4 NOT NULL,
|
|
"content" text NOT NULL,
|
|
metadata jsonb NULL,
|
|
vector_id varchar(255) NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
summary text NULL,
|
|
CONSTRAINT chat_thread_chunk_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_chat_thread_chunk_created_at ON public.chat_thread_chunk USING btree (created_at);
|
|
CREATE INDEX idx_chat_thread_chunk_file_id ON public.chat_thread_chunk USING btree (file_id);
|
|
CREATE INDEX idx_chat_thread_chunk_file_thread ON public.chat_thread_chunk USING btree (file_id, thread_id);
|
|
CREATE INDEX idx_chat_thread_chunk_thread_id ON public.chat_thread_chunk USING btree (thread_id);
|
|
CREATE INDEX idx_chat_thread_chunk_vector_id ON public.chat_thread_chunk USING btree (vector_id);
|
|
|
|
|
|
-- public.chat_thread_file definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.chat_thread_file;
|
|
|
|
CREATE TABLE public.chat_thread_file (
|
|
id serial4 NOT NULL,
|
|
thread_id varchar(255) NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
file_name varchar(255) NOT NULL,
|
|
file_path varchar(500) NOT NULL,
|
|
file_size int4 DEFAULT 0 NULL,
|
|
file_type varchar(50) DEFAULT 'pdf'::character varying NULL,
|
|
status varchar(20) DEFAULT 'processing'::character varying NULL,
|
|
chunk_count int4 DEFAULT 0 NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
is_deleted bool DEFAULT false NULL,
|
|
deleted_at timestamptz NULL,
|
|
CONSTRAINT chat_thread_file_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_chat_thread_file_created_at ON public.chat_thread_file USING btree (created_at);
|
|
CREATE INDEX idx_chat_thread_file_is_deleted ON public.chat_thread_file USING btree (is_deleted);
|
|
CREATE INDEX idx_chat_thread_file_status ON public.chat_thread_file USING btree (status);
|
|
CREATE INDEX idx_chat_thread_file_thread_deleted ON public.chat_thread_file USING btree (thread_id, is_deleted);
|
|
CREATE INDEX idx_chat_thread_file_thread_id ON public.chat_thread_file USING btree (thread_id);
|
|
CREATE INDEX idx_chat_thread_file_thread_user ON public.chat_thread_file USING btree (thread_id, user_id);
|
|
CREATE INDEX idx_chat_thread_file_user_id ON public.chat_thread_file USING btree (user_id);
|
|
CREATE UNIQUE INDEX uk_chat_thread_file_thread_name_active ON public.chat_thread_file USING btree (thread_id, file_name) WHERE (is_deleted = false);
|
|
|
|
|
|
-- public.chat_threads definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.chat_threads;
|
|
|
|
CREATE TABLE public.chat_threads (
|
|
id serial4 NOT NULL,
|
|
thread_id varchar(255) NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
title varchar(50) NOT NULL,
|
|
first_query text NOT NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
message_count int4 DEFAULT 1 NULL,
|
|
is_deleted bool DEFAULT false NULL,
|
|
knowledge_base_id int4 NULL,
|
|
novel_graph_id int4 NULL,
|
|
knowledge_graph_id int4 NULL,
|
|
ip varchar(128) NULL,
|
|
CONSTRAINT chat_threads_pkey PRIMARY KEY (id),
|
|
CONSTRAINT uk_thread_id UNIQUE (thread_id)
|
|
);
|
|
CREATE INDEX idx_chat_threads_created_at ON public.chat_threads USING btree (created_at DESC);
|
|
CREATE INDEX idx_chat_threads_knowledge_graph_id ON public.chat_threads USING btree (knowledge_graph_id);
|
|
CREATE INDEX idx_chat_threads_novel_graph_id ON public.chat_threads USING btree (novel_graph_id);
|
|
CREATE INDEX idx_chat_threads_user_created ON public.chat_threads USING btree (user_id, created_at DESC);
|
|
CREATE INDEX idx_chat_threads_user_id ON public.chat_threads USING btree (user_id);
|
|
|
|
|
|
-- public.department definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.department;
|
|
|
|
CREATE TABLE public.department (
|
|
id serial4 NOT NULL,
|
|
enterprise_id int4 NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
parent_id int4 NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
leader_user_id int4 NULL,
|
|
CONSTRAINT department_pkey PRIMARY KEY (id),
|
|
CONSTRAINT uq_department_enterprise_name UNIQUE (enterprise_id, name)
|
|
);
|
|
CREATE INDEX idx_department_enterprise_id ON public.department USING btree (enterprise_id);
|
|
CREATE INDEX idx_department_leader_user_id ON public.department USING btree (leader_user_id);
|
|
|
|
|
|
-- public.graphs definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.graphs;
|
|
|
|
CREATE TABLE public.graphs (
|
|
id serial4 NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
description text NULL,
|
|
csv_file_name varchar(255) NULL,
|
|
node_count int4 DEFAULT 0 NULL,
|
|
edge_count int4 DEFAULT 0 NULL,
|
|
neo4j_graph_id varchar(100) NOT NULL,
|
|
graph_type varchar(20) DEFAULT 'knowledge'::character varying NOT NULL,
|
|
build_status varchar(20) NULL,
|
|
build_error text NULL,
|
|
rag_chunk_count int4 DEFAULT 0 NOT NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
enterprise_id int4 NOT NULL,
|
|
department_id int4 NULL,
|
|
creator_id int4 NOT NULL,
|
|
visibility varchar(32) DEFAULT 'private'::character varying NOT NULL,
|
|
CONSTRAINT ck_graphs_visibility CHECK (((visibility)::text = ANY ((ARRAY['private'::character varying, 'department'::character varying, 'enterprise'::character varying])::text[]))),
|
|
CONSTRAINT graphs_neo4j_graph_id_key UNIQUE (neo4j_graph_id),
|
|
CONSTRAINT graphs_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_graphs_created_at ON public.graphs USING btree (created_at DESC);
|
|
CREATE INDEX idx_graphs_creator ON public.graphs USING btree (creator_id);
|
|
CREATE INDEX idx_graphs_ent_vis ON public.graphs USING btree (enterprise_id, visibility);
|
|
CREATE INDEX idx_graphs_enterprise ON public.graphs USING btree (enterprise_id);
|
|
CREATE INDEX idx_graphs_graph_type ON public.graphs USING btree (user_id, graph_type);
|
|
CREATE INDEX idx_graphs_neo4j_id ON public.graphs USING btree (neo4j_graph_id);
|
|
CREATE INDEX idx_graphs_user_id ON public.graphs USING btree (user_id);
|
|
|
|
|
|
-- public.kb_audit_log definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.kb_audit_log;
|
|
|
|
CREATE TABLE public.kb_audit_log (
|
|
id serial4 NOT NULL,
|
|
enterprise_id int4 NOT NULL,
|
|
actor_id int4 NOT NULL,
|
|
target_user_id int4 NULL,
|
|
department_id int4 NULL,
|
|
kb_id int4 NULL,
|
|
file_id int4 NULL,
|
|
"action" varchar(50) NOT NULL,
|
|
ip varchar(128) NULL,
|
|
user_agent text NULL,
|
|
metadata jsonb NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
CONSTRAINT kb_audit_log_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_kb_audit_log_action ON public.kb_audit_log USING btree (action);
|
|
CREATE INDEX idx_kb_audit_log_actor_id ON public.kb_audit_log USING btree (actor_id);
|
|
CREATE INDEX idx_kb_audit_log_created_at ON public.kb_audit_log USING btree (created_at DESC);
|
|
CREATE INDEX idx_kb_audit_log_department_id ON public.kb_audit_log USING btree (department_id);
|
|
CREATE INDEX idx_kb_audit_log_ent_dept_created ON public.kb_audit_log USING btree (enterprise_id, department_id, created_at DESC);
|
|
CREATE INDEX idx_kb_audit_log_enterprise_id ON public.kb_audit_log USING btree (enterprise_id);
|
|
CREATE INDEX idx_kb_audit_log_kb_id ON public.kb_audit_log USING btree (kb_id);
|
|
CREATE INDEX idx_kb_audit_log_target_user_id ON public.kb_audit_log USING btree (target_user_id);
|
|
|
|
|
|
-- public.knowledge_base definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.knowledge_base;
|
|
|
|
CREATE TABLE public.knowledge_base (
|
|
id serial4 NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
"name" varchar(255) NOT NULL,
|
|
description text NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
is_deleted bool DEFAULT false NULL,
|
|
deleted_at timestamptz NULL,
|
|
enterprise_id int4 DEFAULT 1 NOT NULL,
|
|
department_id int4 NULL,
|
|
creator_id int4 NULL,
|
|
visibility varchar(32) DEFAULT 'private'::character varying NOT NULL,
|
|
CONSTRAINT ck_knowledge_base_visibility CHECK (((visibility)::text = ANY ((ARRAY['private'::character varying, 'department'::character varying, 'enterprise'::character varying])::text[]))),
|
|
CONSTRAINT knowledge_base_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_knowledge_base_created_at ON public.knowledge_base USING btree (created_at);
|
|
CREATE INDEX idx_knowledge_base_creator ON public.knowledge_base USING btree (creator_id);
|
|
CREATE INDEX idx_knowledge_base_ent_vis ON public.knowledge_base USING btree (enterprise_id, visibility) WHERE (is_deleted = false);
|
|
CREATE INDEX idx_knowledge_base_enterprise ON public.knowledge_base USING btree (enterprise_id);
|
|
CREATE INDEX idx_knowledge_base_is_deleted ON public.knowledge_base USING btree (is_deleted);
|
|
CREATE INDEX idx_knowledge_base_user_deleted ON public.knowledge_base USING btree (user_id, is_deleted);
|
|
CREATE INDEX idx_knowledge_base_user_id ON public.knowledge_base USING btree (user_id);
|
|
CREATE INDEX idx_knowledge_base_user_name ON public.knowledge_base USING btree (user_id, name);
|
|
CREATE UNIQUE INDEX uk_user_knowledge_base_name_active ON public.knowledge_base USING btree (user_id, name) WHERE (is_deleted = false);
|
|
|
|
|
|
-- public.knowledge_base_chunk definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.knowledge_base_chunk;
|
|
|
|
CREATE TABLE public.knowledge_base_chunk (
|
|
id serial4 NOT NULL,
|
|
file_id int4 NOT NULL,
|
|
knowledge_base_id int4 NOT NULL,
|
|
chunk_index int4 NOT NULL,
|
|
"content" text NOT NULL,
|
|
metadata jsonb NULL,
|
|
vector_id varchar(255) NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
summary text NULL,
|
|
CONSTRAINT knowledge_base_chunk_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_kb_chunk_file_id ON public.knowledge_base_chunk USING btree (file_id);
|
|
CREATE INDEX idx_kb_chunk_kb_id ON public.knowledge_base_chunk USING btree (knowledge_base_id);
|
|
CREATE INDEX idx_kb_chunk_metadata ON public.knowledge_base_chunk USING gin (metadata);
|
|
CREATE INDEX idx_kb_chunk_vector_id ON public.knowledge_base_chunk USING btree (vector_id);
|
|
|
|
|
|
-- public.knowledge_base_file definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.knowledge_base_file;
|
|
|
|
CREATE TABLE public.knowledge_base_file (
|
|
id serial4 NOT NULL,
|
|
knowledge_base_id int4 NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
file_name varchar(255) NOT NULL,
|
|
file_path varchar(500) NOT NULL,
|
|
file_size int8 NOT NULL,
|
|
file_type varchar(50) DEFAULT 'pdf'::character varying NOT NULL,
|
|
status varchar(20) DEFAULT 'processing'::character varying NOT NULL,
|
|
chunk_count int4 DEFAULT 0 NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
is_deleted bool DEFAULT false NULL,
|
|
deleted_at timestamptz NULL,
|
|
CONSTRAINT knowledge_base_file_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_kb_file_created_at ON public.knowledge_base_file USING btree (created_at);
|
|
CREATE INDEX idx_kb_file_kb_id ON public.knowledge_base_file USING btree (knowledge_base_id);
|
|
CREATE INDEX idx_kb_file_status ON public.knowledge_base_file USING btree (status);
|
|
CREATE UNIQUE INDEX idx_kb_file_unique_active ON public.knowledge_base_file USING btree (knowledge_base_id, file_name) WHERE (is_deleted = false);
|
|
CREATE INDEX idx_kb_file_user_id ON public.knowledge_base_file USING btree (user_id);
|
|
|
|
|
|
-- public.knowledge_processing_task definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.knowledge_processing_task;
|
|
|
|
CREATE TABLE public.knowledge_processing_task (
|
|
id serial4 NOT NULL,
|
|
user_id int4 NOT NULL,
|
|
knowledge_base_id int4 NOT NULL,
|
|
task_name varchar(255) NOT NULL,
|
|
instruction text NOT NULL,
|
|
file_ids _int4 NOT NULL,
|
|
task_type varchar(50) NOT NULL,
|
|
status varchar(20) DEFAULT 'pending'::character varying NULL,
|
|
"result" text NULL,
|
|
result_file_url text NULL,
|
|
error_message text NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
started_at timestamptz NULL,
|
|
completed_at timestamptz NULL,
|
|
CONSTRAINT knowledge_processing_task_pkey PRIMARY KEY (id)
|
|
);
|
|
CREATE INDEX idx_kb_processing_created_at ON public.knowledge_processing_task USING btree (created_at DESC);
|
|
CREATE INDEX idx_kb_processing_kb_id ON public.knowledge_processing_task USING btree (knowledge_base_id);
|
|
CREATE INDEX idx_kb_processing_status ON public.knowledge_processing_task USING btree (status);
|
|
CREATE INDEX idx_kb_processing_user_id ON public.knowledge_processing_task USING btree (user_id);
|
|
CREATE INDEX idx_kb_processing_user_status ON public.knowledge_processing_task USING btree (user_id, status);
|
|
|
|
|
|
-- public.user_list definition
|
|
|
|
-- Drop table
|
|
|
|
-- DROP TABLE public.user_list;
|
|
|
|
CREATE TABLE public.user_list (
|
|
id serial4 NOT NULL,
|
|
username varchar(50) NOT NULL,
|
|
email varchar(255) NOT NULL,
|
|
phone varchar(255) NOT NULL,
|
|
github_id varchar(100) NULL,
|
|
github_username varchar(100) NULL,
|
|
github_avatar_url text NULL,
|
|
github_access_token text NULL,
|
|
github_token_expires_at timestamptz NULL,
|
|
display_name varchar(100) NULL,
|
|
avatar_url text NULL,
|
|
bio text NULL,
|
|
is_active bool DEFAULT true NULL,
|
|
email_verified bool DEFAULT false NULL,
|
|
created_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
updated_at timestamptz DEFAULT CURRENT_TIMESTAMP NULL,
|
|
last_login_at timestamptz NULL,
|
|
hashed_password varchar(255) NULL,
|
|
is_search bool DEFAULT false NULL,
|
|
is_reasoner bool DEFAULT false NULL,
|
|
enterprise_id int4 DEFAULT 1 NOT NULL,
|
|
department_id int4 NULL,
|
|
"role" varchar(32) DEFAULT 'employee'::character varying NOT NULL,
|
|
is_first_login bool DEFAULT true NOT NULL,
|
|
allow_kb_upload bool DEFAULT true NOT NULL,
|
|
CONSTRAINT unique_email UNIQUE (email),
|
|
CONSTRAINT unique_github_id UNIQUE (github_id),
|
|
CONSTRAINT user_list_phone_key UNIQUE (phone),
|
|
CONSTRAINT user_list_pkey PRIMARY KEY (id),
|
|
CONSTRAINT user_list_username_key UNIQUE (username)
|
|
);
|
|
CREATE INDEX idx_user_list_created_at ON public.user_list USING btree (created_at);
|
|
CREATE INDEX idx_user_list_department_id ON public.user_list USING btree (department_id);
|
|
CREATE INDEX idx_user_list_email ON public.user_list USING btree (email);
|
|
CREATE INDEX idx_user_list_enterprise_id ON public.user_list USING btree (enterprise_id);
|
|
CREATE INDEX idx_user_list_github_id ON public.user_list USING btree (github_id);
|
|
CREATE INDEX idx_user_list_role ON public.user_list USING btree (role);
|
|
CREATE INDEX idx_user_list_username ON public.user_list USING btree (username);
|
|
|
|
|
|
-- public.chat_message_file foreign keys
|
|
|
|
ALTER TABLE public.chat_message_file ADD CONSTRAINT fk_chat_message_file_file FOREIGN KEY (file_id) REFERENCES public.chat_thread_file(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.chat_thread_chunk foreign keys
|
|
|
|
ALTER TABLE public.chat_thread_chunk ADD CONSTRAINT fk_chat_thread_chunk_file FOREIGN KEY (file_id) REFERENCES public.chat_thread_file(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.chat_thread_file foreign keys
|
|
|
|
ALTER TABLE public.chat_thread_file ADD CONSTRAINT fk_chat_thread_file_user FOREIGN KEY (user_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.chat_threads foreign keys
|
|
|
|
ALTER TABLE public.chat_threads ADD CONSTRAINT fk_chat_threads_knowledge_graph FOREIGN KEY (knowledge_graph_id) REFERENCES public.graphs(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.chat_threads ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.department foreign keys
|
|
|
|
ALTER TABLE public.department ADD CONSTRAINT department_enterprise_id_fkey FOREIGN KEY (enterprise_id) REFERENCES public.enterprise(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.department ADD CONSTRAINT department_leader_user_id_fkey FOREIGN KEY (leader_user_id) REFERENCES public.user_list(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.department ADD CONSTRAINT department_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.department(id) ON DELETE SET NULL;
|
|
|
|
|
|
-- public.graphs foreign keys
|
|
|
|
ALTER TABLE public.graphs ADD CONSTRAINT fk_graphs_user FOREIGN KEY (user_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.graphs ADD CONSTRAINT graphs_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_list(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.graphs ADD CONSTRAINT graphs_department_id_fkey FOREIGN KEY (department_id) REFERENCES public.department(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.graphs ADD CONSTRAINT graphs_enterprise_id_fkey FOREIGN KEY (enterprise_id) REFERENCES public.enterprise(id);
|
|
|
|
|
|
-- public.kb_audit_log foreign keys
|
|
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_department_id_fkey FOREIGN KEY (department_id) REFERENCES public.department(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_enterprise_id_fkey FOREIGN KEY (enterprise_id) REFERENCES public.enterprise(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_file_id_fkey FOREIGN KEY (file_id) REFERENCES public.knowledge_base_file(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_kb_id_fkey FOREIGN KEY (kb_id) REFERENCES public.knowledge_base(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.kb_audit_log ADD CONSTRAINT kb_audit_log_target_user_id_fkey FOREIGN KEY (target_user_id) REFERENCES public.user_list(id) ON DELETE SET NULL;
|
|
|
|
|
|
-- public.knowledge_base foreign keys
|
|
|
|
ALTER TABLE public.knowledge_base ADD CONSTRAINT knowledge_base_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.knowledge_base ADD CONSTRAINT knowledge_base_department_id_fkey FOREIGN KEY (department_id) REFERENCES public.department(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.knowledge_base ADD CONSTRAINT knowledge_base_enterprise_id_fkey FOREIGN KEY (enterprise_id) REFERENCES public.enterprise(id);
|
|
|
|
|
|
-- public.knowledge_base_chunk foreign keys
|
|
|
|
ALTER TABLE public.knowledge_base_chunk ADD CONSTRAINT fk_kb FOREIGN KEY (knowledge_base_id) REFERENCES public.knowledge_base(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.knowledge_base_chunk ADD CONSTRAINT fk_kb_file FOREIGN KEY (file_id) REFERENCES public.knowledge_base_file(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.knowledge_base_file foreign keys
|
|
|
|
ALTER TABLE public.knowledge_base_file ADD CONSTRAINT fk_knowledge_base FOREIGN KEY (knowledge_base_id) REFERENCES public.knowledge_base(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.knowledge_processing_task foreign keys
|
|
|
|
ALTER TABLE public.knowledge_processing_task ADD CONSTRAINT fk_kb_processing_kb FOREIGN KEY (knowledge_base_id) REFERENCES public.knowledge_base(id) ON DELETE CASCADE;
|
|
ALTER TABLE public.knowledge_processing_task ADD CONSTRAINT fk_kb_processing_user FOREIGN KEY (user_id) REFERENCES public.user_list(id) ON DELETE CASCADE;
|
|
|
|
|
|
-- public.user_list foreign keys
|
|
|
|
ALTER TABLE public.user_list ADD CONSTRAINT user_list_department_id_fkey FOREIGN KEY (department_id) REFERENCES public.department(id) ON DELETE SET NULL;
|
|
ALTER TABLE public.user_list ADD CONSTRAINT user_list_enterprise_id_fkey FOREIGN KEY (enterprise_id) REFERENCES public.enterprise(id);
|
|
INSERT INTO public.user_list (id, username, email, phone, github_id, github_username, github_avatar_url, github_access_token, github_token_expires_at, display_name, avatar_url, bio, is_active, email_verified, created_at, updated_at, last_login_at, hashed_password, is_search, is_reasoner, enterprise_id, department_id, role, is_first_login, allow_kb_upload) VALUES (1, 'admin1', 'admin1@test.example', '13800000001', null, null, null, null, null, '系统管理员', null, null, true, true, '2026-05-29 06:16:42.499092 +00:00', '2026-05-29 06:16:42.499092 +00:00', '2026-06-01 06:49:13.197555 +00:00', '$2b$12$h7PmwtfOD7tExH/a9U/52uqX5Ie8ohvuqauohxYlrRzaXOsF0i/US', false, false, 1, null, 'admin', false, true);
|
|
INSERT INTO public.enterprise (id, name, code, created_at, updated_at, ai_display_name) VALUES (1, '中垒数据', 'default', '2026-04-15 07:00:38.078412 +00:00', '2026-05-28 01:32:30.587646 +00:00', '火焱AI');
|