Psycopg2 - ошибка отказа в разрешении copy_expert

Я пытаюсь переключиться с Windows на Ubuntu (использую 12.04 LTS) и пытаюсь использовать некоторые из моих старых сценариев для запуска моих старых баз данных. Раньше я использовал postgresql и psycopg2 для их поддержки, и я пытаюсь сделать это снова здесь.

Моя ошибка связана с импортом файла csv в таблицу с помощью команды эксперта по копированию.

Код выглядит следующим образом:

#!/usr/bin/env python
import psycopg2 as psy
import sys

conn = psy.connect("dbname, user, host, password") # with the appropriate  values
curs = conn.cursor()

table = 'tablename' # a table with the appropriate columns etc
file = 'filename' # a csv file
SQL = "COPY %s FROM '%s' WITH CSV HEADERS" % (tablename, filename)

curs.copy_expert(SQL, sys.stdin) # Error occurs here

conn.commit()
curs.close()
conn.close()

Конкретная ошибка, которая возникает, выглядит следующим образом:

psycopg2.ProgrammingError: не удалось открыть файл «имя файла» для чтения: в доступе отказано

Будем очень благодарны любой помощи:

Я полностью застрял, и я считаю, что это связано с некоторой причудой того, как я настроил базу данных или файлы.

Добавление простой команды чтения и печати с использованием модуля csv также работает нормально (фактически из того же скрипта). Он выводит всю информацию из файла csv, а затем выдает ошибку с отказом в разрешении при попытке импортировать его в базу данных.

import csv
f = open(filename, 'rb')
read = csv.reader(f, delimiter =',')
for row in read:
    print row
f.close()

person dantes_419    schedule 08.04.2012    source источник
comment
вам нужно выполнить скрипт, используя su, поскольку система разрешений отличается между Ubuntu и Windows, вам, как правило, нужно выполнять команды, используя sudo, если вы не являетесь пользователем root.   -  person EdChum    schedule 08.04.2012
comment
Та же ошибка при вводе команды sudo. В данном случае я пользователь root. Не могли бы вы уточнить, как предварить его с помощью su? как в su python script.py?   -  person dantes_419    schedule 08.04.2012
comment
да, с su или sudo, но похоже, что это тоже не сработает, что произойдет, если вы скопируете файл csv на рабочий стол или в другое место, о котором вы точно знаете, что у вас есть полные права делать с файлом все, что вам нравится? Также каков путь к имени файла, возможно, путь несовместим с соглашением * nix, т.е. перенаправляет косую черту / вместо `\`, но обычно об этом заботится python.   -  person EdChum    schedule 09.04.2012
comment
Привет, Эд, добавление его в домашний каталог, похоже, решило проблему, файл был успешно импортирован в базу данных. Я все еще немного не уверен, почему. Возможно, что-то делать с разрешениями разных суперпользователей? Например. постгрес против меня? Раньше я использовал r/home/nigel/‹еще два каталога›, теперь, используя только /home/nigel, скрипт работал успешно.   -  person dantes_419    schedule 09.04.2012
comment
не уверен, почему, но некоторые каталоги заблокированы по умолчанию, поэтому вам всегда нужно либо переключать пользователя, либо быть суперпользователем, возможно, просто это местоположение все еще находится вне пределов для всех пользователей, в любом случае рад, что с вами разобрались. опубликую резюме моих комментариев в качестве ответа, чтобы вы могли его принять   -  person EdChum    schedule 09.04.2012


Ответы (1)


Попробуйте выполнить команду в качестве суперпользователя, используя su или sudo, и если это не поможет, другая возможность заключается в том, что расположение имени файла выходит за пределы, поэтому я бы попытался скопировать его на рабочий стол или в ваш домашний каталог или папку. где вы знаете, что у вас определенно есть полные разрешения, и посмотрите, работает ли это.

person EdChum    schedule 08.04.2012
comment
Ура, Эд, добавление файла в домашнюю папку решило проблему. - person dantes_419; 09.04.2012