update
This commit is contained in:
35
migrations/031_products_unique_client_offer.sql
Normal file
35
migrations/031_products_unique_client_offer.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
-- Migracja: UNIQUE KEY na (client_id, offer_id) w tabeli `products`.
|
||||
-- Cel: zapobiec ponownemu powstaniu duplikatow tego samego produktu (ten sam offer_id u tego samego klienta) wstawianych przez rozne sciezki importu (Cron sync z Google Ads, XmlFeedImporter, Api, Allegro).
|
||||
-- Wymaga: wczesniejszego scalenia historycznych duplikatow (zob. tmp/merge_duplicate_products.php). Bez tego ALTER zwroci blad 1062.
|
||||
-- Idempotentnosc: warunek przez INFORMATION_SCHEMA.
|
||||
|
||||
-- 1. Usun istniejacy NON-UNIQUE indeks `idx_products_client_offer` zeby zwolnic nazwe i nie trzymac dwoch indeksow na tej samej parze kolumn.
|
||||
SET @sql = IF(
|
||||
EXISTS (
|
||||
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'products'
|
||||
AND INDEX_NAME = 'idx_products_client_offer'
|
||||
AND NON_UNIQUE = 1
|
||||
),
|
||||
'ALTER TABLE `products` DROP INDEX `idx_products_client_offer`',
|
||||
'DO 1'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 2. Dodaj UNIQUE KEY (client_id, offer_id). Pomijamy gdy juz istnieje indeks o tej nazwie.
|
||||
SET @sql = IF(
|
||||
EXISTS (
|
||||
SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'products'
|
||||
AND INDEX_NAME = 'uk_products_client_offer'
|
||||
),
|
||||
'DO 1',
|
||||
'ALTER TABLE `products` ADD UNIQUE KEY `uk_products_client_offer` (`client_id`, `offer_id`)'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
Reference in New Issue
Block a user