276 lines
7.0 KiB
PL/PgSQL
276 lines
7.0 KiB
PL/PgSQL
-- ============================================================
|
|
-- DEALERS CSV IMPORT - WORKING SOLUTION
|
|
-- ============================================================
|
|
-- This script provides a working solution for importing dealers
|
|
-- from CSV with auto-generated columns (dealer_id, created_at, updated_at, is_active)
|
|
-- ============================================================
|
|
|
|
-- METHOD 1: If your CSV does NOT have dealer_id, created_at, updated_at, is_active
|
|
-- ============================================================
|
|
-- Use this COPY command if your CSV has exactly 44 columns (without the auto-generated ones)
|
|
|
|
\copy public.dealers(
|
|
sales_code,
|
|
service_code,
|
|
gear_code,
|
|
gma_code,
|
|
region,
|
|
dealership,
|
|
state,
|
|
district,
|
|
city,
|
|
location,
|
|
city_category_pst,
|
|
layout_format,
|
|
tier_city_category,
|
|
on_boarding_charges,
|
|
date,
|
|
single_format_month_year,
|
|
domain_id,
|
|
replacement,
|
|
termination_resignation_status,
|
|
date_of_termination_resignation,
|
|
last_date_of_operations,
|
|
old_codes,
|
|
branch_details,
|
|
dealer_principal_name,
|
|
dealer_principal_email_id,
|
|
dp_contact_number,
|
|
dp_contacts,
|
|
showroom_address,
|
|
showroom_pincode,
|
|
workshop_address,
|
|
workshop_pincode,
|
|
location_district,
|
|
state_workshop,
|
|
no_of_studios,
|
|
website_update,
|
|
gst,
|
|
pan,
|
|
firm_type,
|
|
prop_managing_partners_directors,
|
|
total_prop_partners_directors,
|
|
docs_folder_link,
|
|
workshop_gma_codes,
|
|
existing_new,
|
|
dlrcode
|
|
)
|
|
FROM 'C:/Users/COMP/Downloads/DEALERS_CLEAN.csv'
|
|
WITH (
|
|
FORMAT csv,
|
|
HEADER true,
|
|
ENCODING 'UTF8'
|
|
);
|
|
|
|
|
|
-- ============================================================
|
|
-- METHOD 2: If your CSV HAS dealer_id, created_at, updated_at, is_active columns
|
|
-- ============================================================
|
|
-- Use this approach if your CSV has 48 columns (including the auto-generated ones)
|
|
-- This creates a temporary table, imports, then inserts with defaults
|
|
|
|
-- Step 1: Create temporary table matching your CSV structure
|
|
-- This accepts ALL columns from CSV (whether 44 or 48 columns)
|
|
CREATE TEMP TABLE dealers_temp (
|
|
dealer_id TEXT,
|
|
sales_code TEXT,
|
|
service_code TEXT,
|
|
gear_code TEXT,
|
|
gma_code TEXT,
|
|
region TEXT,
|
|
dealership TEXT,
|
|
state TEXT,
|
|
district TEXT,
|
|
city TEXT,
|
|
location TEXT,
|
|
city_category_pst TEXT,
|
|
layout_format TEXT,
|
|
tier_city_category TEXT,
|
|
on_boarding_charges TEXT,
|
|
date TEXT,
|
|
single_format_month_year TEXT,
|
|
domain_id TEXT,
|
|
replacement TEXT,
|
|
termination_resignation_status TEXT,
|
|
date_of_termination_resignation TEXT,
|
|
last_date_of_operations TEXT,
|
|
old_codes TEXT,
|
|
branch_details TEXT,
|
|
dealer_principal_name TEXT,
|
|
dealer_principal_email_id TEXT,
|
|
dp_contact_number TEXT,
|
|
dp_contacts TEXT,
|
|
showroom_address TEXT,
|
|
showroom_pincode TEXT,
|
|
workshop_address TEXT,
|
|
workshop_pincode TEXT,
|
|
location_district TEXT,
|
|
state_workshop TEXT,
|
|
no_of_studios TEXT,
|
|
website_update TEXT,
|
|
gst TEXT,
|
|
pan TEXT,
|
|
firm_type TEXT,
|
|
prop_managing_partners_directors TEXT,
|
|
total_prop_partners_directors TEXT,
|
|
docs_folder_link TEXT,
|
|
workshop_gma_codes TEXT,
|
|
existing_new TEXT,
|
|
dlrcode TEXT,
|
|
created_at TEXT,
|
|
updated_at TEXT,
|
|
is_active TEXT
|
|
);
|
|
|
|
-- Step 2: Import CSV into temporary table
|
|
-- This will work whether your CSV has 44 or 48 columns
|
|
\copy dealers_temp FROM 'C:/Users/COMP/Downloads/DEALERS_CLEAN.csv' WITH (FORMAT csv, HEADER true, ENCODING 'UTF8');
|
|
|
|
-- Optional: Check what was imported
|
|
-- SELECT COUNT(*) FROM dealers_temp;
|
|
|
|
-- Step 3: Insert into actual dealers table
|
|
-- IMPORTANT: We IGNORE dealer_id, created_at, updated_at, is_active from CSV
|
|
-- These will use database DEFAULT values (auto-generated UUID, current timestamp, true)
|
|
INSERT INTO public.dealers (
|
|
sales_code,
|
|
service_code,
|
|
gear_code,
|
|
gma_code,
|
|
region,
|
|
dealership,
|
|
state,
|
|
district,
|
|
city,
|
|
location,
|
|
city_category_pst,
|
|
layout_format,
|
|
tier_city_category,
|
|
on_boarding_charges,
|
|
date,
|
|
single_format_month_year,
|
|
domain_id,
|
|
replacement,
|
|
termination_resignation_status,
|
|
date_of_termination_resignation,
|
|
last_date_of_operations,
|
|
old_codes,
|
|
branch_details,
|
|
dealer_principal_name,
|
|
dealer_principal_email_id,
|
|
dp_contact_number,
|
|
dp_contacts,
|
|
showroom_address,
|
|
showroom_pincode,
|
|
workshop_address,
|
|
workshop_pincode,
|
|
location_district,
|
|
state_workshop,
|
|
no_of_studios,
|
|
website_update,
|
|
gst,
|
|
pan,
|
|
firm_type,
|
|
prop_managing_partners_directors,
|
|
total_prop_partners_directors,
|
|
docs_folder_link,
|
|
workshop_gma_codes,
|
|
existing_new,
|
|
dlrcode
|
|
)
|
|
SELECT
|
|
NULLIF(sales_code, ''),
|
|
NULLIF(service_code, ''),
|
|
NULLIF(gear_code, ''),
|
|
NULLIF(gma_code, ''),
|
|
NULLIF(region, ''),
|
|
NULLIF(dealership, ''),
|
|
NULLIF(state, ''),
|
|
NULLIF(district, ''),
|
|
NULLIF(city, ''),
|
|
NULLIF(location, ''),
|
|
NULLIF(city_category_pst, ''),
|
|
NULLIF(layout_format, ''),
|
|
NULLIF(tier_city_category, ''),
|
|
NULLIF(on_boarding_charges, ''),
|
|
NULLIF(date, ''),
|
|
NULLIF(single_format_month_year, ''),
|
|
NULLIF(domain_id, ''),
|
|
NULLIF(replacement, ''),
|
|
NULLIF(termination_resignation_status, ''),
|
|
NULLIF(date_of_termination_resignation, ''),
|
|
NULLIF(last_date_of_operations, ''),
|
|
NULLIF(old_codes, ''),
|
|
NULLIF(branch_details, ''),
|
|
NULLIF(dealer_principal_name, ''),
|
|
NULLIF(dealer_principal_email_id, ''),
|
|
NULLIF(dp_contact_number, ''),
|
|
NULLIF(dp_contacts, ''),
|
|
NULLIF(showroom_address, ''),
|
|
NULLIF(showroom_pincode, ''),
|
|
NULLIF(workshop_address, ''),
|
|
NULLIF(workshop_pincode, ''),
|
|
NULLIF(location_district, ''),
|
|
NULLIF(state_workshop, ''),
|
|
CASE WHEN no_of_studios = '' THEN 0 ELSE no_of_studios::INTEGER END,
|
|
NULLIF(website_update, ''),
|
|
NULLIF(gst, ''),
|
|
NULLIF(pan, ''),
|
|
NULLIF(firm_type, ''),
|
|
NULLIF(prop_managing_partners_directors, ''),
|
|
NULLIF(total_prop_partners_directors, ''),
|
|
NULLIF(docs_folder_link, ''),
|
|
NULLIF(workshop_gma_codes, ''),
|
|
NULLIF(existing_new, ''),
|
|
NULLIF(dlrcode, '')
|
|
FROM dealers_temp;
|
|
|
|
-- Step 4: Clean up temporary table
|
|
DROP TABLE dealers_temp;
|
|
|
|
-- ============================================================
|
|
-- METHOD 3: Using COPY with DEFAULT (PostgreSQL 12+)
|
|
-- ============================================================
|
|
-- Alternative approach using a function to set defaults
|
|
|
|
-- Create a function to handle the import with defaults
|
|
CREATE OR REPLACE FUNCTION import_dealers_from_csv()
|
|
RETURNS void AS $$
|
|
BEGIN
|
|
-- This will be called from a COPY command that uses a function
|
|
-- See METHOD 1 for the actual COPY command
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- ============================================================
|
|
-- VERIFICATION QUERIES
|
|
-- ============================================================
|
|
|
|
-- Check import results
|
|
SELECT
|
|
COUNT(*) as total_dealers,
|
|
COUNT(dealer_id) as has_dealer_id,
|
|
COUNT(created_at) as has_created_at,
|
|
COUNT(updated_at) as has_updated_at,
|
|
COUNT(*) FILTER (WHERE is_active = true) as active_count
|
|
FROM dealers;
|
|
|
|
-- View sample records with auto-generated values
|
|
SELECT
|
|
dealer_id,
|
|
dlrcode,
|
|
dealership,
|
|
created_at,
|
|
updated_at,
|
|
is_active
|
|
FROM dealers
|
|
LIMIT 5;
|
|
|
|
-- Check for any issues
|
|
SELECT
|
|
COUNT(*) FILTER (WHERE dealer_id IS NULL) as missing_dealer_id,
|
|
COUNT(*) FILTER (WHERE created_at IS NULL) as missing_created_at,
|
|
COUNT(*) FILTER (WHERE updated_at IS NULL) as missing_updated_at
|
|
FROM dealers;
|
|
|