PostgreSQL
La base de données la plus sophistiquée au monde.

Ouverture de session

Navigation

Contactez-nous

Administration du site :
"equipe chez postgresqlfr point org"

Contact presse :
"fr chez postgresql point org"

Contact association :
"bureau chez postgresqlfr point org"

Questions PostgreSQL :
 IRC :
  serveur irc.freenode.net
  canal #postgresqlfr

Recherche

Accéder aux archives

« Octobre 2008  
Lun Mar Mer Jeu Ven Sam Dim
  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  

Syndication

Flux XML

Sondage

Quelle est la version de PostgreSQL la plus répandue sur vos serveurs ?
8.3
10%
8.2
42%
8.1
40%
8.0
2%
7.4
6%
7.3 ou antérieure
0%
Nombre de votes: 48

Droits d'Ă©criture avec COPY

Technique - général | Droits d'écriture avec COPY

Par tristanAllouis le 05/02/2008 - 17:28

Bonjour,
J'utilise psql sous linux avec un compte super-utilisateur de la base de données (mabase=#). J'importe sans problème des fichiers dans des tables avec la commande COPY FROM.
Cependant j'ai un problème avec COPY TO : je voudrais exporter une table dans un fichier mais j'obtient l'erreur suivante :
ERREUR: n'a pas pu ouvrir le fichier « /mnt/data/tristan/brusquet/shp/lidar/lidar1PR.csv » en écriture : Permission non accordée
La commande \copy fonctionne, mais comme j'utilise des varaibles Ă  la place de mes noms de tables je ne peux m'en servir.
Quelqu'un pourait m'aider ?
Merci.

Tristan

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Côté serveur/côté client

SAS/ = 5 FĂ©vrier, 2008 - 17:52

Bonjour,

La commande COPY s'exécute sur le serveur, et nécessite que vous soyez superutilisateur, et que le système de fichier soit accessible par l'utilisateur système.

Au contraire, la commande \copy s'exécute côté client et nécessite donc moins de droit, mais surtout, l'enregistrement des fichiers se fait sur la machine qui exécute le client.

Librement,
Stéphane Schildknecht
dalibo
PostgreSQLFr


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;
------------------------------------------------------------------


© PostgreSQLFr, tous droits rĂ©servĂ©s.
Site déclaré à la CNIL sous le numéro 1074678, conformément à la Loi en vigueur.