Déploiement sur Heroku "ERREUR: doit être superutilisateur pour copier vers ou depuis un fichier"
Je vais avoir un problème de la migration de mon application de base de données après qu'il a été poussé à Heroku. La partie du code qui déclenche l'erreur est la suivante:
execute "COPY countries FROM '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER;"
execute "COPY regions FROM '#{Rails.root}/db/migrate/Regions.txt' DELIMITER ',' CSV HEADER;"
execute "COPY cities FROM '#{Rails.root}/db/migrate/Cities.txt' DELIMITER ',' CSV HEADER;"
Voici l'erreur que je reçois:
PG::InsufficientPrivilege: ERREUR: vous devez être superutilisateur pour COPIER vers ou à partir d'un fichier
ASTUCE: n'importe qui peut COPIER sur la sortie standard ou à partir de stdin. psql \copie de la commande fonctionne également pour n'importe qui.
: COPIE des pays DE '/app/db/migrate/Countries.txt' DÉLIMITEUR ',' CSV en-TÊTE;
râteau abandonnée!
Une erreur s'est produite, et ce tous les migrations annulé:
Jusqu'à présent, j'ai tenté d'utiliser "\copy" et "COPIER à PARTIR de STDIN", comme certains de la vieille questions conseillé, mais reçois des erreurs de syntaxe. Si quelqu'un pouvait me diriger dans la bonne direction, ce serait génial.
MODIFIER: Voici les questions que je suis le référencement. Un:
J'ai essayé ceci:
execute "COPY countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER;"
et ce:
execute "COPY countries FROM '#{Rails.root}/db/migrate/Countries.txt' STDIN DELIMITER ',' CSV HEADER;"
Deux:
J'ai essayé ceci:
execute \copy countries FROM STDIN '#{Rails.root}/db/migrate/Countries.txt' DELIMITER ',' CSV HEADER
Éditer deux:
Ici était une autre tentative:
execute "COPY countries '#{Rails.root}/db/migrate/Countries.txt' FROM STDIN DELIMITER ',' CSV HEADER;"
execute "COPY regions '#{Rails.root}/db/migrate/Regions.txt' FROM STDIN DELIMITER ',' CSV HEADER;"
execute "COPY cities '#{Rails.root}/db/migrate/Cities.txt' FROM STDIN DELIMITER ',' CSV HEADER;"
L'erreur que j'ai eu de cet été:
PG::SyntaxError: ERREUR: erreur de syntaxe sur ou près de "'/app/db/migrate/Countries.txt'"
LIGNE 1: COPIE des pays de l'/app/db/migrate/Countries.txt " à PARTIR de STDIN DE...
^
: COPIE des pays de l'/app/db/migrate/Countries.txt " à PARTIR de STDIN DÉLIMITEUR ',' CSV en-TÊTE;
râteau abandonnée!
Une erreur s'est produite, et ce tous les migrations annulé:
PG::SyntaxError: ERREUR: erreur de syntaxe sur ou près de "'/app/db/migrate/Countries.txt'"
LIGNE 1: COPIE des pays de l'/app/db/migrate/Countries.txt " à PARTIR de STDIN DE...
Edit 3:
Je n'ai pas réussi à résoudre les problème j'ai eu, mais a trouvé une solution plus simple-la création d'un site d'enfouissement et le téléchargement que pour heroku à l'aide de leur importation d'outils. Qui peut être trouvé ici.
source d'informationauteur Kyle Bachan
Vous devez vous connecter pour publier un commentaire.
Se rendant compte que la question est assez vieux, je vais vous donner une autre réponse pour le bénéfice des générations futures, puisque c'est la première requête qui affiche sur Google. Une solution simple que j'ai trouvé est:
(Notez que super-UTILISATEUR PostgreSQL drapeau et ne signifie pas que vous devez devenir le système de l'utilisateur root). Vous devez exécuter les opérations suivantes dans
psql
souspostgres
utilisateur:Si vous le faites vous n'auriez pas besoin de se battre avec
\copy
ouSTDIN
importations plus. C'est une façon très rapide et efficace de raccourci (quoique un peu dangereux).Vous pouvez révoquer les privilèges de super-utilisateur après que vous avez terminé l'importation par:
Cette solution est inspirée par cette réponse.
En passant par stdin a fonctionné pour moi...
(certes, à partir de la ligne de commande. Odd s'échapper de Contenu est Windows-ish)
Exactement comme le message d'erreur dit: vous n'êtes pas un super-utilisateur et vous ne pouvez pas copier à partir d'un fichier.
Vos erreurs de syntaxe sont le résultat de-vous l'aide de qui, là aussi, le message d'erreur indique, la syntaxe non valide. Vous ne pouvez pas copier à partir d'un fichier sur Heroku, de sorte que vous allez avoir à faire avec une autre solution.
La réponse ici est ce que je recommanderais de faire.
selon Heroku les utilisateurs qu'ils créent pour postgres bases de données sont créées sans privilèges de super-utilisateur. ce qui signifie que vous n'avez pas de copie des privilèges.
Il ressemble à la méthode recommandée pour importer des données dans un heroku de la base de données est de créer un dump de la db et de les importer au lieu d'utiliser
COPY
et des fichiers csv. Jetez un oeil à: https://devcenter.heroku.com/articles/heroku-postgres-import-exportJuste après avoir lutté avec ce pour un django app, j'ai pensé que je devais partager ma solution.
NB: j'ai le schéma de mise en scène pour exécuter les charges et les transforme.
Au moyen de documents:
https://www.postgresql.org/docs/9.2/static/sql-copy.html
Vous pouvez surmonter avec les prochaines étapes:
sudo -u postgres psql
alter user [user] superuser;
select usesuper from pg_user where usename = '[user]';
P. S. N'oubliez pas
;