Bonjour,

J'ai trouvé sur le net un script shell qui me permet d'importer une série de fichiers dans une base de données postgresql (je n'ai malheureusement plus le lien...). Ayant déjà eu des aventures avec psql, je l'avais déjà ajouté à la variable path. (Notez que les seules réponses que j'ai pu trouver étaient de le renseigner dans le path, mais dans mon cas c'est déjà fait...). Dans l'attente j'ai fait la manip en exécutant chaque commande manuellement (sans script), et ça marche... Mais c'est dommage...

Du coup je peux faire ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
psql --version
psql (PostgreSQL) 14.1
Mais quand je lance mon script shell :
Il me retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
monscript.sh: line 12: psql: command not found
Le contenu de mon script :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# script d'import des données DFI de la DGFiP dans postgresql
 
psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "
-- table pour l'import des données brutes
CREATE TABLE IF NOT EXISTS dgfip_dfi_raw (raw text);
TRUNCATE dgfip_dfi_raw;
"
 
# import fichier texte dans fichier 'raw' intermédiaire
for f in *.txt.zip
do
  zcat $f | psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "copy dgfip_dfi_raw FROM STDIN WITH (FORMAT CSV, HEADER FALSE, DELIMITER '@')"
done
 
psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "
 
-- table de description des DFI
DROP TABLE IF EXISTS dgfip_dfi;
CREATE TABLE dgfip_dfi (id text, depcom char(5), id_dfi char(7), nature_dfi char(1), validation char(8), lot char(5), meres text[], filles text[]);
 
-- création des DFI et parcelles 'mères'
INSERT INTO dgfip_dfi SELECT replace(left(raw,20)||substr(raw,63,5),';','') as id, left(raw,2)||substr(raw,5,3) as depcom, substr(raw,13,7) as id_dfi, substr(raw,21,1) as nature_dfi, substr(raw,23,8) as validation, substr(raw,63,5) as lot, string_to_array(substr(replace(replace(left(substr(raw,70),-1),' ','0'),';',';'||left(raw,2)||substr(raw,5,3)||substr(raw,9,3)),2),';') as meres FROM dgfip_dfi_raw WHERE substr(raw,69,1)='1';
 
-- index sur code commune, préfixe, dfi et lot (en principe unique)
CREATE INDEX dgfip_dfi_id ON dgfip_dfi (id);
 
-- ajout des parcelles 'mères'
WITH u AS (SELECT replace(left(raw,20)||substr(raw,63,5),';','') as u_id, string_to_array(substr(replace(replace(left(substr(raw,70),-1),' ','0'),';',';'||left(raw,2)||substr(raw,5,3)||substr(raw,9,3)),2),';') as parcelles FROM dgfip_dfi_raw WHERE substr(raw,69,1)='2') UPDATE dgfip_dfi SET filles=parcelles from u WHERE id=u_id;
 
-- index sur les parcelles mères et filles
CREATE INDEX dgfip_dfi_meres ON dgfip_dfi USING GIN (meres);
CREATE INDEX dgfip_dfi_filles ON dgfip_dfi USING GIN (filles);
 
-- suppression de la table 'raw' intermédiaire
-- DROP TABLE dgfip_dfi_raw;
"
 
# export JSON
# psql -h localhost -p 5434 -U postgres -d dgfip_dfi -w -c "copy (select json_build_object('id', id, 'depcom',depcom, 'id_dfi',id_dfi, 'lot_dfi',lot, 'nature',nature_dfi, 'date',validation::date, 'meres',meres, 'filles',filles) from dgfip_dfi) to STDOUT;" | gzip -9 > dfi.json.gz
 
# export postgresql
pg_dump -h localhost -p 5434 -U postgres -d dgfip_dfi -w -t dgfip_dfi -o -O -x | gzip -9 > dfi.sql.gz
Est-ce que vous savez d'où peut venir mon problème ?