J'utilise la commande suivante:
copy (select so.name,
so.date_order,
sol.name,
sol.product_Id,
sol.product_uom_qty ,
ai.number,
ai.date_invoice ,
so.amount_total ,
so.amount_tax
from sale_order so ,
sale_order_line sol ,
account_invoice ai
where so.id = sol.order_id
and so.name = ai.Origin
and ai.state='open')
to '/home/ekodev/Documents/test1.csv' delimiter ',' csv header;
Cependant, il donne l'erreur suivante:
********** Error **********
ERROR: must be superuser to COPY to or from a file
SQL state: 42501
Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.
Même lorsque j'ai changé l'autorisation ekodev@partner:~/Documents$ Sudo chmod a+rwX /home/ekodev/ /home/ekodev/Documents/ /home/ekodev/Documents/test1.csv
Ça ne marche toujours pas pour moi.
Quelqu'un sait-il quel est le problème?
Hors documentation:
COPY nommer un fichier n'est autorisé qu'aux superutilisateurs de base de données, car il permet de lire ou d'écrire tout fichier auquel le serveur a des privilèges d'accès.
Cela signifie que votre utilisateur de base de données doit avoir le drapeau superutilisateur. vous pouvez définir le drapeau avec
ALTER ROLE <rolename> WITH SUPERUSER
Comme cela peut être dangereux, avez-vous envisagé d'utiliser\copy à partir de psql pour copier les données côté client.
Cette solution a fonctionné pour moi en utilisant \copy
. ALTER ne l'a pas fait car cela nécessitait également des privilèges d'administrateur.
psql -h <Host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
Vous pouvez également utiliser pgAdmin pour importer des données csv. Fonctionne lorsque le rôle SuperUser n'est pas disponible, comme dans AWS par exemple.
Le rôle qui exécute la requête doit être SUPERUSER
to COPY FROM
fichier. Sinon, vous ne pouvez copier qu'à partir de STDIN
.