-- Delete the empty ap_ids
DELETE FROM activity
WHERE ap_id IS NULL;

-- Make it required
ALTER TABLE activity
    ALTER COLUMN ap_id SET NOT NULL;

-- Delete dupes, keeping the first one
DELETE FROM activity a USING (
    SELECT
        min(id) AS id,
        ap_id
    FROM
        activity
    GROUP BY
        ap_id
    HAVING
        count(*) > 1) b
WHERE
    a.ap_id = b.ap_id
    AND a.id <> b.id;

-- The index
CREATE UNIQUE INDEX idx_activity_ap_id ON activity (ap_id);

-- Drop the old index
DROP INDEX idx_activity_unique_apid;