在更改表之前不应该删除空值吗?我很困惑
我的查询大致如下:
BEGIN;
DELETE FROM my_table
WHERE my_column IS NULL;
ALTER TABLE my_table DROP CONSTRAINT my_table_pk;
ALTER TABLE my_table ADD PRIMARY KEY (id, my_column);
-- this is to repopulate the data afterwards
INSERT INTO my_table (name, other_table_id, my_column)
SELECT
ya.name,
ot.id,
my_column
FROM other_table ot
LEFT JOIN yet_another ya
ON ya.id = ot."fileId"
WHERE NOT EXISTS (
SELECT
1
FROM my_table mt
WHERE ot.id = mt.other_table_id AND ot.my_column = mt.my_column
) AND my_column IS NOT NULL;
COMMIT;
很抱歉命名
有两种可能的解释:
-
并发会话在
DELETE
的开始和ALTER TABLE
的开始之间插入了一个具有NULL值的新行。为了避免这种情况,请在
DELETE
之前将表锁定在SHARE
模式。 -
有一行
id
的值为NULL。