create table public.ak_devices ( id uuid not null default gen_random_uuid (), user_id uuid null, device_type character varying(32) not null, device_name character varying(64) null, device_mac character varying(64) null, bind_time timestamp with time zone null default now(), status character varying(16) null default 'active'::character varying, extra jsonb null, constraint ak_devices_pkey primary key (id), constraint ak_devices_user_id_fkey foreign key (user_id) references ak_users (id) on delete cascade ) tablespace pg_default; create index if not exists idx_devices_user_id on public.ak_devices using btree (user_id) tablespace pg_default; create table public.ak_users ( id uuid not null default gen_random_uuid (), username character varying(64) not null, email character varying(128) not null, password_hash character varying(256) not null default gen_random_uuid (), gender character varying(16) null default 'other'::character varying, birthday date null, height_cm integer null, weight_kg integer null, avatar_url text null, region_id uuid null, school_id uuid null, grade_id uuid null, class_id uuid null, role character varying(32) null default 'student'::character varying, created_at timestamp with time zone null default now(), updated_at timestamp with time zone null default now(), auth_id uuid null default uid (), preferred_language uuid null, bio text null, phone text null, status character varying null, mall_status integer null default 1, mall_type integer null default 1, last_login_ip inet null, total_orders integer null default 0, total_spent numeric(12, 2) null default 0.00, user_level integer null default 1, points integer null default 0, verified_status integer null default 0, nickname character varying null, user_type character varying null, registration_source character varying null, real_name character varying null, qq character varying null, wechat character varying null, alipay character varying null, constraint ak_users_pkey primary key (id), constraint ak_users_email_key unique (email), constraint ak_users_auth_id_key unique (auth_id), constraint ak_users_auth_id_fkey foreign key (auth_id) references users (id) on delete cascade, constraint ak_users_class_id_fkey foreign key (class_id) references ak_classes (id), constraint ak_users_grade_id_fkey foreign key (grade_id) references ak_grades (id), constraint ak_users_preferred_language_fkey foreign key (preferred_language) references ak_languages (id), constraint ak_users_region_id_fkey foreign key (region_id) references ak_regions (id), constraint ak_users_school_id_fkey foreign key (school_id) references ak_schools (id), constraint chk_ak_users_verified_status check ((verified_status = any (array[0, 1, 2]))), constraint ak_users_total_orders_check check ((total_orders >= 0)), constraint ak_users_total_spent_check check ((total_spent >= (0)::numeric)), constraint ak_users_user_level_check check ( ( (user_level >= 1) and (user_level <= 10) ) ), constraint ak_users_verified_status_check check ((verified_status = any (array[0, 1, 2]))), constraint ak_users_points_check check ((points >= 0)), constraint chk_ak_users_mall_status check ((mall_status = any (array[1, 2]))), constraint chk_ak_users_mall_type check ((mall_type = any (array[1, 2, 3]))) ) tablespace pg_default; create index if not exists idx_users_region_id on public.ak_users using btree (region_id) tablespace pg_default; create index if not exists idx_users_school_id on public.ak_users using btree (school_id) tablespace pg_default; create index if not exists idx_users_grade_id on public.ak_users using btree (grade_id) tablespace pg_default; create index if not exists idx_users_class_id on public.ak_users using btree (class_id) tablespace pg_default; create index if not exists idx_ak_users_mall_status on public.ak_users using btree (mall_status) tablespace pg_default; create index if not exists idx_ak_users_mall_type on public.ak_users using btree (mall_type) tablespace pg_default; create index if not exists idx_ak_users_total_orders on public.ak_users using btree (total_orders desc) tablespace pg_default; create index if not exists idx_ak_users_total_spent on public.ak_users using btree (total_spent desc) tablespace pg_default; create index if not exists idx_ak_users_level on public.ak_users using btree (user_level) tablespace pg_default; create index if not exists idx_ak_users_points on public.ak_users using btree (points desc) tablespace pg_default; create index if not exists idx_ak_users_verified on public.ak_users using btree (verified_status) tablespace pg_default; create trigger tr_create_user_message_preferences after insert on ak_users for each row execute function create_default_message_preferences (); class_id为bc333301-78cd-4ef0-a123-456789012345 帮我把classid为特定的所有ak_users生成模拟的ak_devices的记录 WITH target_users AS ( SELECT u.id AS user_id FROM ak_users u LEFT JOIN ak_devices d ON d.user_id = u.id WHERE u.class_id = 'bc333301-78cd-4ef0-a123-456789012345' AND d.id IS NULL ) INSERT INTO ak_devices ( user_id, device_type, device_name, device_mac, bind_time, status, extra ) SELECT tu.user_id, 'wristband' AS device_type, CONCAT('模拟手环-', RIGHT(tu.user_id::text, 6)) AS device_name, CONCAT('FAKE-MAC-', UPPER(REPLACE(SUBSTRING(tu.user_id::text, 1, 12), '-', ''))) AS device_mac, NOW() AS bind_time, 'active' AS status, jsonb_build_object( 'source', 'mock-seed', 'note', 'Generated for demo class bc333301-78cd-4ef0-a123-456789012345' ) AS extra FROM target_users tu;