feinte
tristanAllouis/ = 6 FĂ©vrier, 2008 - 13:16
Voila une feinte, en attendant mieux.
Je réexplique mon problème :
J'ai un fichier contenant des données et j'aimerais faire des manips sur ces données pour les séparer en deux autres fichiers.
J'aimerais regrouper l'ensemble de mes opération dans un script shell pour automatiser l'opération.
Dans mon script shell, je récupère donc le chemin du fichier passé en paramètere, puis j'appelle psql avec l'ensemble de mes instrutions. Les créations de tables se font suivant le nom du fichier passé en paramètre (variable). Ainsi, je ne peux utiliser la commande \copy car elle ne supporte par les variable lors de son appel. Et COPY me cause des problèmes de droits (voir message précédent).
Je contourne donc le problème en rappelant psql dans mon script shell avec la commande :
psql -o $cheminOUT -c "SELECT * FROM $maTable" -A
qui m'exporte la table désigné par la variable maTable dans le fichier désigné par la varaible cheminOUT.
Pour une meilleur compréhesion voici mes scripts :
script.sh----------------------------------------------
#! /bin/bash
chemin=${1%/*}
nomTableCSV=${1##*/}
nomTable=${nomTableCSV%.*}
cheminCSV="'$1'"
nomTablePR="$2""PR"
cheminPR="$chemin/$nomTablePR.txt"
nomTableDR="$2""DR"
cheminDR="$chemin/$nomTableDR.txt"
psql -v cheminCSV=$cheminCSV -v maTable=$nomTable -v maTablePR=$nomTablePR -v maTableDR=$nomTableDR < requettesPR-DR.sql
psql -o $cheminPR -c "SELECT * FROM $nomTablePR" -A #-t
psql -o $cheminDR -c "SELECT * FROM $nomTableDR" -A #-t
psql -c "DROP TABLE $nomTable"
psql -c "DROP TABLE $nomTablePR"
psql -c "DROP TABLE $nomTableDR"
psql -c "DROP TABLE maTableTMP"
echo FIN.
--------------------------------------------------------------
requettesPR-DR.sql--------------------------------------------
-- récupération de la table
CREATE TABLE :maTable (NumProfil int, NumEcho int, X double precision, Y double precision, Z double precision, Amplitude int, Largeur int, Range real, AngleIncid real);
COPY :maTable FROM :cheminCSV delimiter '\t' csv header;
-- création de la table premier retour
SELECT NumProfil, NumEcho, X, Y, Z, Amplitude, Largeur, Range
INTO :maTablePR
FROM :maTable
WHERE NumEcho=1;
-- création de la table dernier retour
SELECT NumProfil, MAX(NumEcho) AS NumEcho
INTO maTableTMP
FROM :maTable
GROUP BY NumProfil
ORDER BY NumProfil ASC;
SELECT maTableTMP.NumProfil, maTableTMP.NumEcho, :maTable.X, :maTable.Y, :maTable.Z, :maTable.Amplitude, :maTable.Largeur, :maTable.Range
INTO :maTableDR
FROM maTableTMP, :maTable
WHERE maTableTMP.NumProfil=:maTable.NumProfil AND maTableTMP.NumEcho=:maTable.NumEcho
ORDER BY NumProfil ASC;
------------------------------------------------------------------
[ Vous devez
vous connecter pour poster des commentaires ]