Python中Redshift DELETE语句无报错但未删除数据
Redshift DELETE语句执行无报错但未删除数据的排查方案
子查询无匹配数据
单独执行子查询select id from table2,确认是否有返回结果。如果子查询本身无数据,DELETE自然不会删除任何记录。可以在Python中添加以下代码验证:cursor.execute("select id from table2") print(cursor.fetchall())ID字段类型不匹配
检查table_name和table2的id字段数据类型是否一致(比如一个是INT,一个是VARCHAR)。类型不匹配会导致IN条件无法匹配到数据,可通过CAST统一类型,示例:DELETE FROM table_name where id in (select CAST(id AS INT) from table2)根据实际字段类型调整CAST的目标类型。
事务提交异常
虽然代码中调用了conn.commit(),但需确认连接是否开启了自动提交(若开启,手动commit可能无效),或commit语句是否因代码分支问题未执行。可在commit后添加日志打印,或查询Redshift事务日志确认事务是否成功提交。目标表为外部表
Redshift外部表(如基于S3的外部表)不支持DELETE操作,仅允许查询。执行以下语句确认表类型:SELECT * FROM SVV_TABLE_INFO WHERE tablename = 'table_name';若
type字段显示为external,则无法通过DELETE删除数据。权限或锁定问题
确认执行SQL的用户对table_name拥有DELETE权限,对table2拥有SELECT权限。另外,检查是否有其他事务锁定了要删除的行,可通过Redshift的系统视图STV_LOCKS排查锁情况。表数据分布异常
若目标表是大表,可能存在数据分布不均或脏数据问题,执行VACUUM table_name;整理表数据后,重新执行DELETE语句尝试。
内容的提问来源于stack exchange,提问作者user2104898
相关产品推荐
相关产品推荐

