2012-01-19 2 views
2

Я настраиваю приложение Django на Heroku и нуждаюсь в преобразовании из backdresql в sqlite3 db. К сожалению, я использую общую базу данных и поэтому не могу получить прямой доступ к оболочке db с помощью psql, а также не могу выполнить команду COPY с файлом.COPY to POSTGRESQL от STDIN в Python/Django (на Heroku)

Например, это не работает:

from django.db import connection, transaction 
cursor = connection.cursor() 
cursor.execute("copy table_name from 'table_dump.dmp' delimiters ',' csv;") 

Я получаю эту ошибку:

DatabaseError: 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 в виде строки, например, так:

cursor.execute("copy tabe_name from '%s' delimiters ',' csv header;" % f.read()) 

(по большей части, это довольно маленькие файлы 131Kb на макс.)

И я получаю ту же ошибку (в дополнение к много горя не избежать моего "правильно - сколько обратные косые мне нужен?)

Итак, что это самый простой способ COPY к PostgreSQL в рамках Django shell? Я думал, что это будет так же просто, как подавать строку вместо ссылки на файл.

ответ

0

Вам необходимо отправить команду на сервер, как это:

COPY table_name FROM STDIN DELIMITERS ',' CSV HEADER 

И затем использовать драйвер конкретного вызов «поместить копии данных» на сервер. Если вы используете psycopg2 и можете получить базовый ключ подключения от django, документация для его использования для заявлений COPY находится здесь: http://packages.python.org/psycopg2/cursor.html#cursor.copy_expert

0

Отводы - это идеальный ход для sqlite. Вы можете получить доступ к новым Shared Postgres, доступным в лабораториях Heroku. Вы можете найти дополнительную информацию по этому адресу: http://devcenter.heroku.com/articles/labs-heroku-shared-postgresql

Это позволит вам скопировать, как вы ожидаете.

+0

Звучит как приятное решение, но, к сожалению, я не могу его использовать: 'Добавление героя-shared-postgresql к вечеринке-гора-6907 ... failed' ' Это дополнение доступно только избранным пользователям – tchaymore

+0

You должен сначала быть частью геройских лабораторий. Вы можете добавить себя в лаборатории Heroku: http://devcenter.heroku.com/articles/labs. Затем вы можете включить аддон. – CraigKerstiens

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