Files
chill-import-from-canvas/sql/remove-import-data.sql
Boris Waaub c388967ebd feat: Enhance CSV import process and data cleanup
- Added support for importing 'periodes' data and adjusted related SQL scripts.
- Introduced a new SQL preparation script to set up the import schema.
- Updated the import_all_csv.sh script to handle new CSV files and tables.
- Implemented checks for required SQL files and improved error handling.
- Modified data types and structures in the import process for better consistency.
- Created a new remove-import-data.sql script to clean up imported data effectively.
- Enhanced the handling of postal codes and addresses in the import logic.
- Added comments and structured the SQL scripts for better readability and maintainability.
2026-03-16 13:48:12 +01:00

417 lines
18 KiB
PL/PgSQL

BEGIN;
-- Nettoyage des donnees importees a partir des tables du schema import.
-- Ce script suppose que sql/import.sql a ete execute au moins partiellement.
-- 1. Commentaires et liaisons des periodes
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'periodes' AND column_name = 'period_id'
) THEN
UPDATE chill_person_accompanying_period acp
SET pinnedcomment_id = NULL
FROM import.periodes ip
WHERE acp.id = ip.period_id;
DELETE FROM chill_person_accompanying_period_comment com
USING import.periodes ip
WHERE com.accompanyingperiod_id = ip.period_id;
DELETE FROM chill_person_accompanying_period_work work
USING import.periodes ip
WHERE work.accompanyingperiod_id = ip.period_id;
DELETE FROM chill_person_accompanying_period_social_issues asi
USING import.periodes ip
WHERE asi.accompanyingperiod_id = ip.period_id;
DELETE FROM chill_person_accompanying_period_location_history hist
USING import.periodes ip
WHERE hist.period_id = ip.period_id;
DELETE FROM accompanying_periods_scopes scopes_link
USING import.periodes ip
WHERE scopes_link.accompanying_period_id = ip.period_id;
DELETE FROM chill_person_accompanying_period_participation part
USING import.periodes ip
WHERE part.accompanyingperiod_id = ip.period_id;
UPDATE chill_person_accompanying_period acp
SET addresslocation_id = NULL,
personlocation_id = NULL,
user_id = NULL,
origin_id = NULL,
job_id = NULL
FROM import.periodes ip
WHERE acp.id = ip.period_id;
DELETE FROM chill_person_accompanying_period acp
USING import.periodes ip
WHERE acp.id = ip.period_id;
END IF;
END $$;
-- 2. Menages, adresses et personnes
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'personnes' AND column_name = 'person_id'
) THEN
DELETE FROM chill_person_household_composition comp
USING import.personnes ip
WHERE comp.household_id = ip.person_id;
DELETE FROM chill_person_household_to_addresses hh_addr
USING import.personnes ip
WHERE hh_addr.household_id = ip.person_id;
DELETE FROM chill_person_household_members member
USING import.personnes ip
WHERE member.person_id = ip.person_id;
DELETE FROM chill_person_household hh
USING import.personnes ip
WHERE hh.id = ip.person_id;
DELETE FROM chill_person_person_center_history hist
USING import.personnes ip
WHERE hist.person_id = ip.person_id;
DELETE FROM chill_person_person person
USING import.personnes ip
WHERE person.id = ip.person_id;
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'personnes' AND column_name = 'address_id'
) THEN
DELETE FROM chill_main_address addr
USING import.personnes ip
WHERE addr.id = ip.address_id;
END IF;
END $$;
-- 3. Adresses temporaires de periodes et localisations
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'address_location_id'
) THEN
DELETE FROM chill_main_address addr
USING import.choix_periodes icp
WHERE addr.id = icp.address_location_id;
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'localisations' AND column_name = 'address_id'
) THEN
DELETE FROM chill_main_address addr
USING import.localisations loc
WHERE addr.id = loc.address_id;
END IF;
END $$;
-- 4. Localisations et types de localisation
DELETE FROM chill_main_location loc
USING import.localisations il
WHERE loc.name = trim(il.locname);
DELETE FROM chill_main_location_type lt
USING import.choix_localisations icl
WHERE lt.title::jsonb->>'fr' = trim(icl.title)
AND NOT EXISTS (
SELECT 1 FROM chill_main_location loc
WHERE loc.locationtype_id = lt.id
);
-- 5. Tiers et categories
DELETE FROM chill_3party.thirdparty_category tpc
USING chill_3party.third_party tp, import.tiers it
WHERE tpc.thirdparty_id = tp.id
AND (
tp.name = trim(it.nom)
OR tp.name = trim(it.personne_nom)
);
DELETE FROM chill_3party.third_party tp
USING import.tiers it
WHERE tp.name = trim(it.personne_nom)
OR tp.name = trim(it.nom);
DELETE FROM chill_3party.party_category pc
USING import.tiers it
WHERE pc.name::jsonb->>'fr' = trim(it.categorie)
AND NOT EXISTS (
SELECT 1 FROM chill_3party.thirdparty_category tpc
WHERE tpc.category_id = pc.id
);
-- 6. Utilisateurs importes et historique des metiers
DELETE FROM chill_main_user_job_history hist
USING import.users iu
WHERE hist.user_id = (
SELECT id FROM users WHERE username = split_part(iu.email, '@', 1)
);
DELETE FROM users u
USING import.users iu
WHERE u.username = split_part(iu.email, '@', 1);
DELETE FROM chill_main_user_job job
USING import.users iu
WHERE job.label::jsonb->>'fr' = trim(iu.metier)
AND NOT EXISTS (
SELECT 1 FROM chill_main_user_job_history hist
WHERE hist.job_id = job.id
);
-- 7. Tables de reference ajoutees pendant l'import principal
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'work_social_action1'
) AND EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'work_social_issue1'
) THEN
DELETE FROM chill_person_social_action sa
USING import.choix_periodes icp
LEFT JOIN LATERAL (
SELECT si.id
FROM chill_person_social_issue si
WHERE si.title::jsonb->>'fr' = icp.work_social_issue1::jsonb->>'fr'
ORDER BY (si.parent_id IS NULL), si.id
LIMIT 1
) issue ON true
WHERE sa.title::jsonb->>'fr' = icp.work_social_action1::jsonb->>'fr'
AND (
(sa.issue_id IS NULL AND issue.id IS NULL)
OR sa.issue_id = issue.id
);
END IF;
END $$;
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'enfant1'
) THEN
DELETE FROM chill_person_social_issue child_issue
USING import.choix_periodes icp
WHERE child_issue.title::jsonb->>'fr' = icp.enfant1::jsonb->>'fr';
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'parent1'
) THEN
DELETE FROM chill_person_social_issue parent_issue
USING import.choix_periodes icp
WHERE parent_issue.title::jsonb->>'fr' = icp.parent1::jsonb->>'fr'
AND parent_issue.parent_id IS NULL;
END IF;
END $$;
DELETE FROM users u
USING import.choix_periodes icp
WHERE u.username::text = icp.referrer::text
AND u.password = ''
AND u.enabled = false;
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'acp_scopes1'
) THEN
DELETE FROM scopes s
USING import.choix_periodes icp
WHERE s.name::jsonb->>'fr' = icp.acp_scopes1::jsonb->>'fr'
AND NOT EXISTS (
SELECT 1 FROM accompanying_periods_scopes aps
WHERE aps.scope_id = s.id
);
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'job1'
) THEN
DELETE FROM chill_main_user_job job
USING import.choix_periodes icp
WHERE job.label::jsonb->>'fr' = icp.job1::jsonb->>'fr'
AND NOT EXISTS (
SELECT 1 FROM chill_person_accompanying_period acp
WHERE acp.job_id = job.id
);
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'origin1'
) THEN
DELETE FROM chill_person_accompanying_period_origin origin
USING import.choix_periodes icp
WHERE origin.label::jsonb->>'fr' = icp.origin1::jsonb->>'fr'
AND NOT EXISTS (
SELECT 1 FROM chill_person_accompanying_period acp
WHERE acp.origin_id = origin.id
);
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_periodes' AND column_name = 'closingmotive1'
) THEN
DELETE FROM chill_person_accompanying_period_closingmotive motive
USING import.choix_periodes icp
WHERE motive.name::jsonb->>'fr' = icp.closingmotive1::jsonb->>'fr';
END IF;
END $$;
DO $$
BEGIN
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_personnes' AND column_name = 'household_position1'
) THEN
DELETE FROM chill_person_household_position pos
USING import.choix_personnes icp
WHERE pos.label::jsonb->>'fr' = icp.household_position1::jsonb->>'fr';
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_personnes' AND column_name = 'household_composition_type1'
) THEN
DELETE FROM chill_person_household_composition_type comp_type
USING import.choix_personnes icp
WHERE comp_type.label::jsonb->>'fr' = icp.household_composition_type1::jsonb->>'fr';
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_personnes' AND column_name = 'maritalstatus1'
) THEN
DELETE FROM chill_person_marital_status ms
USING import.choix_personnes icp
WHERE ms.name::jsonb->>'fr' = icp.maritalstatus1::jsonb->>'fr';
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_personnes' AND column_name = 'country1'
) THEN
DELETE FROM country c
USING import.choix_personnes icp
WHERE c.name::jsonb->>'fr' = icp.country1::jsonb->>'fr'
AND c.id > 249;
END IF;
IF EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'import' AND table_name = 'choix_personnes' AND column_name = 'civility1'
) THEN
DELETE FROM chill_main_civility civ
USING import.choix_personnes icp
WHERE civ.name::jsonb->>'fr' = icp.civility1::jsonb->>'fr';
END IF;
END $$;
-- 8. Suppression des colonnes techniques ajoutees par sql/import.sql
ALTER TABLE import.personnes DROP COLUMN IF EXISTS person_id;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS address_id;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS address_ref_id;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS postcode_id;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS postcode_arr;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS postcode1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS birthdate1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS deathdate1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS validfrom1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS household_startdate1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS civility1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS gender1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS nationality1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS countryofbirth1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS maritalstatus1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS numberofchildren1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS placeofbirth1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS memo1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS household_composition_type1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS household_position1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS mobilenumber1;
ALTER TABLE import.personnes DROP COLUMN IF EXISTS phonenumber1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS period_id;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS openingdate1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS closingdate1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS closingmotive1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS origin1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS job1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS acp_scopes1;
ALTER TABLE import.periodes DROP COLUMN IF EXISTS intensity1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS closingmotive1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS origin1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS job1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS acp_scopes1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS parent1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS enfant1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS work_social_action1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS work_social_issue1;
ALTER TABLE import.choix_periodes DROP COLUMN IF EXISTS address_location_id;
ALTER TABLE import.choix_personnes DROP COLUMN IF EXISTS civility1;
ALTER TABLE import.choix_personnes DROP COLUMN IF EXISTS country1;
ALTER TABLE import.choix_personnes DROP COLUMN IF EXISTS maritalstatus1;
ALTER TABLE import.choix_personnes DROP COLUMN IF EXISTS household_composition_type1;
ALTER TABLE import.choix_personnes DROP COLUMN IF EXISTS household_position1;
ALTER TABLE import.choix_localisations DROP COLUMN IF EXISTS title1;
ALTER TABLE import.localisations DROP COLUMN IF EXISTS postcode_arr;
ALTER TABLE import.localisations DROP COLUMN IF EXISTS address_id;
ALTER TABLE import.localisations DROP COLUMN IF EXISTS address_ref_id;
ALTER TABLE import.tiers DROP COLUMN IF EXISTS postcode_arr;
ALTER TABLE import.tiers DROP COLUMN IF EXISTS address_id;
ALTER TABLE import.tiers DROP COLUMN IF EXISTS address_ref_id;
-- 9. Recalage des sequences principales
SELECT setval('chill_person_accompanying_period_comment_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_comment));
SELECT setval('chill_person_accompanying_period_work_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_work));
SELECT setval('chill_person_accompanying_period_location_history_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_location_history));
SELECT setval('chill_person_accompanying_period_participation_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_participation));
SELECT setval('chill_person_accompanying_period_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period));
SELECT setval('chill_person_household_composition_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_household_composition));
SELECT setval('chill_person_household_members_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_household_members));
SELECT setval('chill_person_household_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_household));
SELECT setval('chill_person_person_center_history_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_person_center_history));
SELECT setval('chill_person_person_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_person));
SELECT setval('chill_person_social_action_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_social_action));
SELECT setval('chill_person_social_issue_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_social_issue));
SELECT setval('chill_person_accompanying_period_origin_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_origin));
SELECT setval('chill_person_accompanying_period_closingmotive_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_accompanying_period_closingmotive));
SELECT setval('chill_person_household_position_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_household_position));
SELECT setval('chill_person_household_composition_type_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_person_household_composition_type));
SELECT setval('chill_main_civility_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_civility));
SELECT setval('country_id_seq', (SELECT COALESCE(max(id), 1) FROM country));
SELECT setval('users_id_seq', (SELECT COALESCE(max(id), 1) FROM users));
SELECT setval('scopes_id_seq', (SELECT COALESCE(max(id), 1) FROM scopes));
SELECT setval('chill_main_user_job_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_user_job));
SELECT setval('chill_main_address_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_address));
SELECT setval('chill_main_location_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_location));
SELECT setval('chill_main_location_type_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_location_type));
SELECT setval('chill_main_user_job_history_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_main_user_job_history));
SELECT setval('chill_3party.party_category_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_3party.party_category));
SELECT setval('chill_3party.third_party_id_seq', (SELECT COALESCE(max(id), 1) FROM chill_3party.third_party));
COMMIT;