如何在PostgreSQL中将单表拆分为列数不同的多个关联子表
PostgreSQL单表拆分操作步骤
1. 新建子表
首先创建拆分后的子表,可根据实际业务需求调整字段类型、约束等配置:
-- 创建product_info表,trans_id设为主键 CREATE TABLE product_info ( trans_id INT PRIMARY KEY, sku VARCHAR NOT NULL, product_class VARCHAR NOT NULL, size NUMERIC NOT NULL ); -- 创建product_sales表,trans_id设为主键同时关联product_info主键保证数据一致性 CREATE TABLE product_sales ( trans_id INT PRIMARY KEY REFERENCES product_info(trans_id), supplier VARCHAR NOT NULL, brand VARCHAR NOT NULL, sales INT NOT NULL );
如果需要拆分3-4个子表,按照同样逻辑按业务属性划分字段创建对应表即可。
2. 从原宽表导入数据
将下方SQL中的original_wide_table替换为实际的原宽表名称,执行插入操作:
-- 导入数据到product_info INSERT INTO product_info (trans_id, sku, product_class, size) SELECT trans_id, sku, product_class, size FROM original_wide_table; -- 导入数据到product_sales INSERT INTO product_sales (trans_id, supplier, brand, sales) SELECT trans_id, supplier, brand, sales FROM original_wide_table;
3. 数据校验
导入完成后执行以下语句校验数据完整性:
-- 统计原表和子表数据量,结果一致则导入正常 SELECT COUNT(*) FROM original_wide_table; SELECT COUNT(*) FROM product_info; SELECT COUNT(*) FROM product_sales;
也可以抽样对比指定trans_id对应的字段值,确保字段取值一致。
可选后续操作
校验无误后,可根据需求选择备份或删除原宽表。
内容的提问来源于stack exchange,提问作者chelseafc21
相关产品推荐
相关产品推荐

