如何在PostgreSQL中临时删除表约束并获取恢复语句?
解决BigQuery临时表约束恢复的创建语句获取问题
方法一:从INFORMATION_SCHEMA提取约束创建语句
BigQuery的元数据存储在INFORMATION_SCHEMA中,可通过查询直接生成约束的重建语句:
SELECT CONCAT( 'ALTER TABLE `', table_catalog, '.', table_schema, '.', table_name, '` ', constraint_type, ' (', STRING_AGG(column_name, ', ' ORDER BY ordinal_position), ');' ) AS create_constraint_stmt FROM `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.TABLE_CONSTRAINTS` JOIN `[你的项目ID].[你的数据集ID].INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE` USING (constraint_name, table_catalog, table_schema, table_name) WHERE table_name = '[你的临时表名]' AND constraint_type IN ('PRIMARY KEY', 'UNIQUE', 'CHECK') GROUP BY table_catalog, table_schema, table_name, constraint_type;
该查询会自动拼接符合语法的ALTER TABLE语句,支持多列主键/唯一约束的场景。
方法二:提前保存约束定义(推荐)
在删除临时表约束之前,先执行上述查询,把输出的创建语句保存到变量或本地文件中。后续插入完数据后,直接执行这些语句即可快速恢复约束,无需再次查询元数据。
恢复约束的关键注意点
- 插入数据后添加约束时,BigQuery会自动校验数据是否符合约束规则,正好可作为你需要的sanity check,不符合规则会直接报错。
- 主键约束添加后,BigQuery会自动创建对应主键索引,能显著提升后续Upsert和删除操作的性能。
内容的提问来源于stack exchange,提问作者Peter Mølgaard Pallesen
相关产品推荐
相关产品推荐

