DilyaraL

Скрипт для удаления дубликатов

Jun 25th, 2024 (edited)
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. -- 1. Найти все дублирующиеся email, игнорируя регистр
  2. CREATE TEMP TABLE Migrations AS
  3. WITH DuplicateEmails AS (
  4. SELECT LOWER(email) AS email, MIN(id::text)::UUID AS main_id, ARRAY_AGG(id::UUID) AS duplicate_ids
  5. FROM "user"
  6. GROUP BY LOWER(email)
  7. HAVING COUNT(*) > 1
  8. )
  9. SELECT email, main_id, UNNEST(array_remove(duplicate_ids, main_id)) AS duplicate_id
  10. FROM DuplicateEmails;
  11.  
  12. -- 2. Перенос всех связанных записей к основному аккаунту с удалением дубликатов
  13. -- Перенос в таблице media
  14. UPDATE media
  15. SET user_id = m.main_id
  16. FROM Migrations m
  17. WHERE media.user_id = m.duplicate_id;
  18.  
  19. -- Перенос в таблице subscription
  20. UPDATE subscription
  21. SET user_id = m.main_id
  22. FROM Migrations m
  23. WHERE subscription.user_id = m.duplicate_id;
  24.  
  25. -- Перенос в таблице message
  26. UPDATE message
  27. SET user_id = m.main_id
  28. FROM Migrations m
  29. WHERE message.user_id = m.duplicate_id;
  30.  
  31. -- Перенос в таблице message_reaction
  32. DELETE FROM message_reaction
  33. USING message_reaction mr2, Migrations m
  34. WHERE message_reaction.user_id = m.duplicate_id
  35. AND mr2.user_id = m.main_id
  36. AND message_reaction.reaction_id = mr2.reaction_id
  37. AND message_reaction.message_id = mr2.message_id;
  38.  
  39. UPDATE message_reaction
  40. SET user_id = m.main_id
  41. FROM Migrations m
  42. WHERE message_reaction.user_id = m.duplicate_id;
  43.  
  44. -- Перенос в таблице chat_member
  45. DELETE FROM chat_member
  46. USING chat_member cm2, Migrations m
  47. WHERE chat_member.user_id = m.duplicate_id
  48. AND cm2.user_id = m.main_id
  49. AND chat_member.chat_id = cm2.chat_id;
  50.  
  51. UPDATE chat_member
  52. SET user_id = m.main_id
  53. FROM Migrations m
  54. WHERE chat_member.user_id = m.duplicate_id;
  55.  
  56. -- Перенос в таблице user_chat_group
  57. UPDATE user_chat_group
  58. SET user_id = m.main_id
  59. FROM Migrations m
  60. WHERE user_chat_group.user_id = m.duplicate_id;
  61.  
  62. -- Перенос в таблице chat_message_read
  63. DELETE FROM chat_message_read
  64. USING chat_message_read cmr2, Migrations m
  65. WHERE chat_message_read.user_id = m.duplicate_id
  66. AND cmr2.user_id = m.main_id
  67. AND chat_message_read.message_id = cmr2.message_id;
  68.  
  69. UPDATE chat_message_read
  70. SET user_id = m.main_id
  71. FROM Migrations m
  72. WHERE chat_message_read.user_id = m.duplicate_id;
  73.  
  74. -- Перенос в таблице chat_message_report
  75. UPDATE chat_message_report
  76. SET user_id = m.main_id
  77. FROM Migrations m
  78. WHERE chat_message_report.user_id = m.duplicate_id;
  79.  
  80. -- Перенос в таблице community_member
  81. DELETE FROM community_member
  82. USING community_member cm2, Migrations m
  83. WHERE community_member.user_id = m.duplicate_id
  84. AND cm2.user_id = m.main_id
  85. AND community_member.community_id = cm2.community_id;
  86.  
  87. UPDATE community_member
  88. SET user_id = m.main_id
  89. FROM Migrations m
  90. WHERE community_member.user_id = m.duplicate_id;
  91.  
  92. -- Перенос в таблице community_request
  93. DELETE FROM community_request
  94. USING community_request cr2, Migrations m
  95. WHERE community_request.user_id = m.duplicate_id
  96. AND cr2.user_id = m.main_id
  97. AND community_request.community_id = cr2.community_id;
  98.  
  99. UPDATE community_request
  100. SET user_id = m.main_id
  101. FROM Migrations m
  102. WHERE community_request.user_id = m.duplicate_id;
  103.  
  104. -- Перенос в таблице community_invite
  105. DELETE FROM community_invite
  106. USING community_invite ci2, Migrations m
  107. WHERE community_invite.user_id = m.duplicate_id
  108. AND ci2.user_id = m.main_id
  109. AND community_invite.community_id = ci2.community_id;
  110.  
  111. UPDATE community_invite
  112. SET user_id = m.main_id
  113. FROM Migrations m
  114. WHERE community_invite.user_id = m.duplicate_id;
  115.  
  116. -- Перенос в таблице publication
  117. UPDATE publication
  118. SET author_id = m.main_id
  119. FROM Migrations m
  120. WHERE publication.author_id = m.duplicate_id;
  121.  
  122. -- Перенос в таблице publication_reaction
  123. DELETE FROM publication_reaction
  124. USING publication_reaction pr2, Migrations m
  125. WHERE publication_reaction.user_id = m.duplicate_id
  126. AND pr2.user_id = m.main_id
  127. AND publication_reaction.reaction_id = pr2.reaction_id
  128. AND publication_reaction.publication_id = pr2.publication_id;
  129.  
  130. UPDATE publication_reaction
  131. SET user_id = m.main_id
  132. FROM Migrations m
  133. WHERE publication_reaction.user_id = m.duplicate_id;
  134.  
  135. -- Перенос в таблице user_order
  136. UPDATE user_order
  137. SET user_id = m.main_id
  138. FROM Migrations m
  139. WHERE user_order.user_id = m.duplicate_id;
  140.  
  141. -- Перенос в таблице purchase.
  142. DELETE FROM purchase
  143. USING purchase p2, Migrations m
  144. WHERE purchase.user_id = m.duplicate_id
  145. AND p2.user_id = m.main_id
  146. AND purchase.product_id = p2.product_id;
  147.  
  148. UPDATE purchase
  149. SET user_id = m.main_id
  150. FROM Migrations m
  151. WHERE purchase.user_id = m.duplicate_id;
  152.  
  153. -- Перенос в таблице user_favorite_poster
  154. DELETE FROM user_favorite_poster
  155. USING user_favorite_poster ufp2, Migrations m
  156. WHERE user_favorite_poster.user_id = m.duplicate_id
  157. AND ufp2.user_id = m.main_id
  158. AND user_favorite_poster.poster_id = ufp2.poster_id;
  159.  
  160. UPDATE user_favorite_poster
  161. SET user_id = m.main_id
  162. FROM Migrations m
  163. WHERE user_favorite_poster.user_id = m.duplicate_id;
  164.  
  165. -- Перенос в таблице topic
  166. UPDATE topic
  167. SET user_id = m.main_id
  168. FROM Migrations m
  169. WHERE topic.user_id = m.duplicate_id;
  170.  
  171. -- Перенос в таблице user_activity.
  172. UPDATE user_activity
  173. SET user_id = m.main_id
  174. FROM Migrations m
  175. WHERE user_activity.user_id = m.duplicate_id;
  176.  
  177. -- Перенос в таблице user_offer
  178. UPDATE user_offer
  179. SET user_id = m.main_id
  180. FROM Migrations m
  181. WHERE user_offer.user_id = m.duplicate_id;
  182.  
  183. -- Перенос в таблице trajectory. Как перенести траекторию?
  184. UPDATE trajectory
  185. SET user_id = m.main_id
  186. FROM Migrations m
  187. WHERE trajectory.user_id = m.duplicate_id;
  188.  
  189. -- Перенос в таблице trajectory_offer
  190. UPDATE trajectory_offer
  191. SET user_id = m.main_id
  192. FROM Migrations m
  193. WHERE trajectory_offer.user_id = m.duplicate_id;
  194.  
Advertisement
Add Comment
Please, Sign In to add comment