添加复合主键时,我得到包含空值的列"my_column"



在更改表之前不应该删除空值吗?我很困惑
我的查询大致如下:

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。

最新更新