← back to Kravet Sheet Sync 2026 04 20
backfill_all_images_from_sku_images.sql
62 lines
-- backfill_all_images_from_sku_images.sql
-- Fill kravet_catalog.all_images from already-captured kravet_sku_images rows.
-- NO crawl required for any SKU already present in kravet_sku_images.
--
-- Match key: kravet_sku_images.mfr_sku_norm strips the trailing ".0" that
-- kravet_catalog.mfr_sku carries, so we normalize the catalog side the same way:
-- regexp_replace(upper(btrim(mfr_sku)), '\.0$', '')
--
-- SAFETY: only touches rows whose all_images is currently empty/null — never
-- overwrites an already-populated all_images. Idempotent. all_images is written
-- as a JSON array string to match the existing column convention
-- (e.g. ["https://cdn.brandfolder.io/..."]).
--
-- Built 2026-06-10 (yolo IMG-FIX kravet). Reversible: a pre-image is captured
-- below into kravet_catalog_allimages_backfill_bak_20260610 before the UPDATE.
-- Run inside a transaction; review the rowcount before COMMIT.
BEGIN;
-- 1) pre-image of every row we are about to touch (for easy revert)
CREATE TABLE IF NOT EXISTS kravet_catalog_allimages_backfill_bak_20260610 AS
SELECT id, mfr_sku, all_images
FROM kravet_catalog
WHERE 1=0;
INSERT INTO kravet_catalog_allimages_backfill_bak_20260610 (id, mfr_sku, all_images)
SELECT k.id, k.mfr_sku, k.all_images
FROM kravet_catalog k
WHERE (k.all_images IS NULL OR btrim(k.all_images) = '' OR k.all_images IN ('[]','null','{}'))
AND EXISTS (
SELECT 1 FROM kravet_sku_images i
WHERE i.mfr_sku_norm = regexp_replace(upper(btrim(k.mfr_sku)), '\.0$', '')
);
-- 2) the backfill
WITH agg AS (
SELECT i.mfr_sku_norm AS k,
to_json(array_agg(DISTINCT COALESCE(i.url_canonical, i.url)))::text AS imgs
FROM kravet_sku_images i
WHERE COALESCE(i.url_canonical, i.url) IS NOT NULL
AND btrim(COALESCE(i.url_canonical, i.url)) <> ''
GROUP BY i.mfr_sku_norm
)
UPDATE kravet_catalog k
SET all_images = a.imgs,
updated_at = now()
FROM agg a
WHERE a.k = regexp_replace(upper(btrim(k.mfr_sku)), '\.0$', '')
AND (k.all_images IS NULL OR btrim(k.all_images) = '' OR k.all_images IN ('[]','null','{}'));
-- 3) report
SELECT 'backed_up' lbl, count(*) FROM kravet_catalog_allimages_backfill_bak_20260610;
-- Review the UPDATE rowcount printed by psql, then:
-- COMMIT; -- to keep
-- ROLLBACK; -- to discard
-- Revert later if needed:
-- UPDATE kravet_catalog k SET all_images = b.all_images
-- FROM kravet_catalog_allimages_backfill_bak_20260610 b WHERE b.id = k.id;
COMMIT;