2021-06-28 06:15:52 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class BackfillEmailLogTopicId < ActiveRecord::Migration[6.1]
|
|
|
|
disable_ddl_transaction!
|
|
|
|
BATCH_SIZE = 30_000
|
|
|
|
|
|
|
|
def up
|
|
|
|
loop do
|
2021-06-28 14:16:22 +08:00
|
|
|
count = DB.exec(<<~SQL, batch_size: BATCH_SIZE)
|
2021-06-28 06:15:52 +08:00
|
|
|
WITH cte AS (
|
2021-06-28 14:16:22 +08:00
|
|
|
SELECT l1.id, p1.topic_id
|
|
|
|
FROM email_logs l1
|
|
|
|
INNER JOIN posts p1 ON p1.id = l1.post_id
|
|
|
|
WHERE l1.topic_id IS NULL AND p1.topic_id IS NOT NULL
|
2021-06-28 06:15:52 +08:00
|
|
|
LIMIT :batch_size
|
|
|
|
)
|
|
|
|
UPDATE email_logs
|
2021-06-28 14:16:22 +08:00
|
|
|
SET topic_id = cte.topic_id
|
2021-06-28 06:15:52 +08:00
|
|
|
FROM cte
|
2021-06-28 14:16:22 +08:00
|
|
|
WHERE email_logs.id = cte.id
|
2021-06-28 06:15:52 +08:00
|
|
|
SQL
|
|
|
|
|
2021-06-28 14:16:22 +08:00
|
|
|
break if count == 0
|
2021-06-28 06:15:52 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def down
|
|
|
|
raise ActiveRecord::IrreversibleMigration
|
|
|
|
end
|
|
|
|
end
|