2015-02-02 12 views
1

Я пытаюсь обновить базу данных PostgreSQL файлом CSV, который я загружаю на сервер. Я пробовал много часов, и он работает отлично, но не может заставить его работать на сервере. Вот моя команда:Копирование базы данных PostgreSQL из CSV на сервере

path = "/data/reporting/releases/20150202181737/data/storyboards.csv" 

sql = "COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM \'#{path}\' DELIMITER ',' CSV;" 

ActiveRecord::Base.connection.execute(sql) 

Вот сообщение об ошибке:

COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV; 
PG::InsufficientPrivilege: ERROR: must be superuser to COPY to or from a file 
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone. 
: COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV; 
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR: must be superuser to COPY to or from a file 
HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone. 
: COPY storyboards (id, name, category, service_line, account_id, account_name, account_salesforce_id, banner_image) FROM '/data/reporting/releases/20150202181737/data/storyboards.csv' DELIMITER ',' CSV; 

Вы можете порекомендовать решение этого вопроса, как я уверен, что я не единственный, кто пытался это сделать , Я размещаю свое приложение на Engineyard. Это проблема с конфигурацией Engineyard?

ответ

1

Если вы хотите скопировать данные из CSV CSV, которые являются клиентскими для сервера, тогда проблем не должно быть. Вы можете сделать это (за пределами Ruby полностью, если хотите, или вы можете выложить изнутри Ruby), используя команду psql и ее команду \copy. Поскольку он работает с локальной файловой системой, у вас не будет проблем, если вы можете получить доступ к локальному файловому пути.

Для копирования CSV на сервере, вы должны быть суперпользователя, как ошибка указывает на то.

this answer на основе, казалось бы, что Postgres пользователя настроен быть суперпользователя в Engineyard, так что если вы используете этот пользователь, вы должны быть хорошо.

Это потребует отдельного подключения от обычного подключения приложения в Rails, так что бы не предположительно с помощью Postgres пользователей, но независимо от того пользователя, которое вы создали для вашего приложения (так как ваше приложение не должно вообще работать с привилегии суперпользователя по разным причинам).

Если это не является частью какой-то автоматизированного рабочего процесса, который имеет быть на стороне сервера, я бы рекомендовал только с помощью Psql из вашей коробки с \copy.

Смежные вопросы