-- ============================================================ -- 桃育种业务流完善·产量构成/果实品质/物候/生长量/描述性状 trait 种子(2026-08-05) -- 背景:全量盘点发现 bre_trait 字典缺产量构成(单株产量/好果率)、品质(SS%/酸/固酸比)、 -- 物候(仅 first_flower_date 一条)、生长量(主干周/树高/冠幅)——真实桃育种 -- 品比/丰产性评价与 EBV 选种目标都依赖这些数值性状; -- 另补描述性 categorical 性状(离核/果皮底色/着色类型)供种质级观测(bre_observation EAV)使用。 -- 设计:统计引擎(_trait_meta_map)仅消费 data_type='numeric' 且 into_ebv='1' 的性状; -- · 产量构成/品质/生长量 numeric + into_ebv='1' 进 EBV/指数(direction 按育种目标) -- · 物候 data_type='date' + into_ebv='0'(不参与统计,作物候历) -- · 描述性状 data_type='text' + into_ebv='0'(categorical,走 EAV text 观测) -- 幂等:trait_code 冲突则更新(不动 uuid/created_time),同 bre_trait_seed.sql 惯例。 -- avg_fruit_weight/fruit_shape/pubescence 已存在,仅在 DO UPDATE 刷新数值范围(不改 category)。 -- ============================================================ INSERT INTO bre_trait (trait_code, trait_name, category, data_type, unit, is_core, scale_json, uuid, is_deleted, created_time, direction, into_ebv, default_h2, valid_min, valid_max, stage, method) VALUES -- ① 产量构成(numeric,越高越好)-------------------------------- ('single_tree_yield', '单株产量', '产量构成', 'numeric', 'kg', '1', NULL, md5(random()::text||'single_tree_yield'), false, now(), 'desc', '1', 0.3, 0, 200, 'evaluation', '单株采收产量(kg/株),丰产性核心'), ('fruit_number', '果实个数', '产量构成', 'numeric', '个', '1', NULL, md5(random()::text||'fruit_number'), false, now(), 'desc', '1', 0.3, 0, 5000, 'evaluation', '单株采收果实个数'), ('marketable_rate', '好果率', '产量构成', 'numeric', '%', '1', NULL, md5(random()::text||'marketable_rate'), false, now(), 'desc', '1', 0.4, 0, 100, 'evaluation', '商品果率(%),分级后商品果占比'), ('fruit_crack_rate', '裂果率', '产量构成', 'numeric', '%', '1', NULL, md5(random()::text||'fruit_crack_rate'), false, now(), 'asc', '1', 0.3, 0, 100, 'evaluation', '裂果率(%),越低越好'), -- ② 果实品质(numeric,SS 高优/酸低优/固酸比高优)---------------- ('ss_content', '可溶性固形物', '果实品质', 'numeric', '%', '1', NULL, md5(random()::text||'ss_content'), false, now(), 'desc', '1', 0.5, 0, 35, 'evaluation', '可溶性固形物含量(SS%,折光仪测定),核心风味指标'), ('titratable_acid', '可滴定酸', '果实品质', 'numeric', '%', '1', NULL, md5(random()::text||'titratable_acid'), false, now(), 'asc', '1', 0.4, 0, 3, 'evaluation', '可滴定酸含量(%,中和滴定),过高味酸'), ('ss_acid_ratio', '固酸比', '果实品质', 'numeric', '', '1', NULL, md5(random()::text||'ss_acid_ratio'), false, now(), 'desc', '1', 0.4, 5, 50, 'evaluation', '固酸比(SS/酸),风味协调性综合指标'), -- ③ 物候(date,不参与统计,作物候历/育种排期)------------------- ('full_bloom_date', '盛花期', '物候', 'date', '', '0', NULL, md5(random()::text||'full_bloom_date'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '盛花期(整株 75% 花开放日期),花期避霜排期关键'), ('fruit_maturity_date','果实成熟期', '物候', 'date', '', '0', NULL, md5(random()::text||'fruit_maturity_date'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '果实成熟期(采收起始日期),早熟性核心'), ('leaf_fall_date', '落叶期', '物候', 'date', '', '0', NULL, md5(random()::text||'leaf_fall_date'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '落叶期(株叶 75% 脱落日期)'), -- ④ 生长量(numeric,树势)-------------------------------------- ('trunk_circumference','主干周长', '生长量', 'numeric', 'cm', '0', NULL, md5(random()::text||'trunk_circumference'), false, now(), 'desc', '0', NULL, 0, 500, 'evaluation', '距地面 20cm 处主干周长(cm),树势指标'), ('tree_height', '树高', '生长量', 'numeric', 'm', '0', NULL, md5(random()::text||'tree_height'), false, now(), 'desc', '0', NULL, 0, 20, 'evaluation', '树高(m)'), ('crown_width', '冠幅', '生长量', 'numeric', 'm', '0', NULL, md5(random()::text||'crown_width'), false, now(), 'desc', '0', NULL, 0, 20, 'evaluation', '冠幅(东西+南北均值,m)'), -- ⑤ 描述性 categorical(text,种质级观测,不参与统计)------------- ('freestone', '离核性', '果核', 'text', '', '0', NULL, md5(random()::text||'freestone'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '离核/半离核/黏核(categorical)'), ('ground_color', '果皮底色', '果皮', 'text', '', '0', NULL, md5(random()::text||'ground_color'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '果皮底色(categorical:黄/白/绿/红…)'), ('coloring_type', '着色类型', '果皮', 'text', '', '0', NULL, md5(random()::text||'coloring_type'), false, now(), 'asc', '0', NULL, NULL, NULL, 'evaluation', '果实着色类型(categorical:全红/条红/斑点/无…)') ON CONFLICT (trait_code) DO UPDATE SET trait_name = EXCLUDED.trait_name, category = EXCLUDED.category, data_type = EXCLUDED.data_type, unit = EXCLUDED.unit, is_core = EXCLUDED.is_core, scale_json = EXCLUDED.scale_json, direction = EXCLUDED.direction, into_ebv = EXCLUDED.into_ebv, default_h2 = EXCLUDED.default_h2, valid_min = EXCLUDED.valid_min, valid_max = EXCLUDED.valid_max, stage = EXCLUDED.stage, method = EXCLUDED.method;