← back to Fm Wallpaper Sync
build_dryrun.sql
53 lines
\set ON_ERROR_STOP on
BEGIN;
CREATE TEMP TABLE fm_wallpaper_stage (
combo_sku text, series text, js_pattern text, mfr_pattern text, supplier text,
jpg_name text, width text, border text, rpt text, five_ten text, account text,
line text, minimum text, date_line text, page text, retail text, cost text, net text,
record_id text
) ON COMMIT DROP;
\copy fm_wallpaper_stage FROM '__CSV__' WITH (FORMAT csv, HEADER true)
DO $$ DECLARE n int; BEGIN SELECT count(*) INTO n FROM fm_wallpaper_stage;
IF n < 250000 THEN RAISE EXCEPTION 'stage row count % below floor', n; END IF; END $$;
CREATE TEMP TABLE _pre AS SELECT
(SELECT count(*) FROM fmpro) rows,
(SELECT count(*) FILTER (WHERE nullif(phone,'') IS NOT NULL) FROM fmpro) phone,
(SELECT count(*) FILTER (WHERE nullif(email_1,'') IS NOT NULL) FROM fmpro) email,
(SELECT count(*) FILTER (WHERE nullif(vendor_code,'') IS NOT NULL) FROM fmpro) vcode,
(SELECT count(*) FILTER (WHERE nullif(account_num,'') IS NOT NULL) FROM fmpro) acct;
DROP TABLE IF EXISTS fm_wallpaper_live_new;
CREATE TABLE fm_wallpaper_live_new AS
SELECT DISTINCT ON (norm) norm AS combo_sku,
nullif(upper(series),'') series, nullif(js_pattern,'') js_pattern,
nullif(split_part(mfr_pattern,' -- ',1),'') mfr_pattern, nullif(supplier,'') supplier,
nullif(jpg_name,'') jpg_name, record_id, now() refreshed_at
FROM (SELECT *, upper(regexp_replace(combo_sku,'[^A-Za-z0-9]','','g')) norm FROM fm_wallpaper_stage) s
WHERE norm ~ '^[A-Z]+[0-9]+'
ORDER BY norm, (nullif(mfr_pattern,'') IS NOT NULL)::int DESC, (nullif(supplier,'') IS NOT NULL)::int DESC;
DROP TABLE IF EXISTS fm_wallpaper_live;
ALTER TABLE fm_wallpaper_live_new RENAME TO fm_wallpaper_live;
UPDATE fmpro f SET mfr_sku=COALESCE(NULLIF(f.mfr_sku,''),l.mfr_pattern),
sku_prefix=COALESCE(NULLIF(f.sku_prefix,''),l.series),
image_filename=COALESCE(NULLIF(f.image_filename,''),l.jpg_name)
FROM fm_wallpaper_live l WHERE upper(f.sku)=l.combo_sku;
INSERT INTO fmpro (id, sku, mfr_sku, sku_prefix, image_filename, vendor_name, added_date)
SELECT (SELECT COALESCE(max(id),0) FROM fmpro)+row_number() OVER (),
l.combo_sku,l.mfr_pattern,l.series,l.jpg_name,l.supplier,CURRENT_DATE
FROM fm_wallpaper_live l WHERE NOT EXISTS (SELECT 1 FROM fmpro f WHERE upper(f.sku)=l.combo_sku);
\echo '=== PRE (fmpro) ==='
SELECT * FROM _pre;
\echo '=== POST (fmpro) — phone/email/vcode/acct must NOT drop ==='
SELECT (SELECT count(*) FROM fmpro) rows,
count(*) FILTER (WHERE nullif(phone,'') IS NOT NULL) phone,
count(*) FILTER (WHERE nullif(email_1,'') IS NOT NULL) email,
count(*) FILTER (WHERE nullif(vendor_code,'') IS NOT NULL) vcode,
count(*) FILTER (WHERE nullif(account_num,'') IS NOT NULL) acct FROM fmpro;
\echo '=== deltas ==='
SELECT (SELECT count(*) FROM fmpro)-(SELECT rows FROM _pre) AS fmpro_new_rows,
(SELECT count(*) FROM fm_wallpaper_live) AS live_distinct;
ROLLBACK;