Скопировать на POSTGRESQL из STDIN в Python / Django (на Heroku) - PullRequest
2 голосов
/ 19 января 2012

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

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

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())

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

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

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

Ответы [ 3 ]

3 голосов
/ 19 января 2012

Можно ли просто использовать

heroku db:push

http://devcenter.heroku.com/articles/taps

0 голосов
/ 20 января 2012

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

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

0 голосов
/ 19 января 2012

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

COPY table_name FROM STDIN DELIMITERS ',' CSV HEADER

А затем используйте специфичный для драйвера вызов для «помещения данных копирования» на сервер. Если вы используете psycopg2 и можете получить базовый дескриптор соединения от django, документация по его использованию для операторов COPY находится здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...