-- 1. Ajouter les extensions -- 2. Créer la table des produits -- 4. importer les produits \COPY produit FROM '/tmp/produits/confiture.csv' (FORMAT CSV, header, ENCODING 'UTF8'); \COPY produit FROM '/tmp/produit.csv' (FORMAT CSV, header, ENCODING 'UTF8'); -- 5. ajouter une colonne vecteur alter table produit add column nutrition vector(10); -- 6. Création de l’index ivfflat create index produit_nutrition_hnsw on produit using hnsw (nutrition vector_l2_ops) with (m = 16, ef_construction = 200); -- 7. calculer la moyenne et l'écart-type pour chaque colonne, puis construire le vecteur : WITH stats AS ( SELECT AVG(energie) AS mu_energie, STDDEV_SAMP(energie) AS sigma_energie, AVG(proteines) AS mu_proteines, STDDEV_SAMP(proteines) AS sigma_proteines, AVG(glucides) AS mu_glucides, STDDEV_SAMP(glucides) AS sigma_glucides, AVG(sucres) AS mu_sucres, STDDEV_SAMP(sucres) AS sigma_sucres, AVG(graisses) AS mu_graisses, STDDEV_SAMP(graisses) AS sigma_graisses, AVG(graisses_saturees) AS mu_graisses_saturees, STDDEV_SAMP(graisses_saturees) AS sigma_graisses_saturees, AVG(sel) AS mu_sel, STDDEV_SAMP(sel) AS sigma_sel, AVG(fibres) AS mu_fibres, STDDEV_SAMP(fibres) AS sigma_fibres, AVG(nutriscore) AS mu_nutriscore, STDDEV_SAMP(nutriscore) AS sigma_nutriscore, AVG(additifs) AS mu_additifs, STDDEV_SAMP(additifs) AS sigma_additifs FROM produit ) UPDATE produit SET nutrition = ( SELECT ARRAY[ ((COALESCE(energie, mu_energie) - mu_energie) / NULLIF(sigma_energie,0)), ((COALESCE(proteines, mu_proteines) - mu_proteines) / NULLIF(sigma_proteines,0)), ((COALESCE(glucides, mu_glucides) - mu_glucides) / NULLIF(sigma_glucides,0)), ((COALESCE(sucres, mu_sucres) - mu_sucres) / NULLIF(sigma_sucres,0)), ((COALESCE(graisses, mu_graisses) - mu_graisses) / NULLIF(sigma_graisses,0)), ((COALESCE(graisses_saturees, mu_graisses_saturees) - mu_graisses_saturees) / NULLIF(sigma_graisses_saturees,0)), ((COALESCE(sel, mu_sel) - mu_sel) / NULLIF(sigma_sel,0)), ((COALESCE(fibres, mu_fibres) - mu_fibres) / NULLIF(sigma_fibres,0)), ((COALESCE(nutriscore, mu_nutriscore) - mu_nutriscore) / NULLIF(sigma_nutriscore,0)), ((COALESCE(additifs, mu_additifs) - mu_additifs) / NULLIF(sigma_additifs,0)) ]::vector FROM stats );