如何在AWS Redshift中检查表是否被存储过程、视图或函数使用
AWS Redshift 待删除未刷新表依赖检查方案
Redshift 可通过查询内置系统表完成跨schema的依赖检查,覆盖视图、存储过程、自定义函数三类对象的引用校验,具体操作如下:
1. 检查视图依赖
通过pg_depend系统表查询视图和表的关联关系,支持跨schema的依赖查询:
-- 先创建临时表存储你筛选出的所有待检查未刷新表 CREATE TEMP TABLE tables_to_check ( schema_name VARCHAR(128), table_name VARCHAR(128) ); -- 插入你筛选出的表的schema和名称,示例: INSERT INTO tables_to_check VALUES ('your_target_schema', 'table_a'), ('your_target_schema', 'table_b'); -- 批量查询所有待检查表的视图依赖 SELECT DISTINCT t.schema_name AS referenced_table_schema, t.table_name AS referenced_table_name, ns.nspname AS view_schema, c.relname AS view_name FROM tables_to_check t JOIN pg_class ref_c ON ref_c.relname = t.table_name JOIN pg_namespace ref_ns ON ref_c.relnamespace = ref_ns.oid AND ref_ns.nspname = t.schema_name JOIN pg_depend d ON d.refobjid = ref_c.oid JOIN pg_class c ON d.objid = c.oid JOIN pg_namespace ns ON c.relnamespace = ns.oid WHERE c.relkind = 'v' -- 仅过滤视图对象 AND d.deptype = 'n' -- 过滤普通依赖关系 ORDER BY referenced_table_schema, referenced_table_name;
2. 检查存储过程、自定义函数依赖
存储过程和自定义函数的定义存储在pg_proc系统表的prosrc字段中,可通过模糊匹配校验表引用:
SELECT DISTINCT t.schema_name AS referenced_table_schema, t.table_name AS referenced_table_name, ns.nspname AS object_schema, p.proname AS object_name, CASE p.prokind WHEN 'p' THEN 'STORED PROCEDURE' WHEN 'f' THEN 'USER DEFINED FUNCTION' END AS object_type FROM tables_to_check t JOIN pg_proc p ON p.prosrc LIKE CONCAT('%', t.schema_name, '.', t.table_name, '%') JOIN pg_namespace ns ON p.pronamespace = ns.oid ORDER BY referenced_table_schema, referenced_table_name, object_type;
注意事项
- 模糊匹配函数定义时,带上schema名称拼接搜索,可避免不同schema下同名表面导致的误判
- 系统表仅能校验Redshift内部存储的对象依赖,若你的业务有外部调度脚本、ETL任务直接引用这些表,需要额外离线核对
- 删除前建议先将待删除表重命名(比如加
_to_delete后缀),观察1-2个业务周期无报错后再彻底删除,避免遗漏依赖
内容的提问来源于stack exchange,提问作者Sidhant Gupta
相关产品推荐
相关产品推荐

