Psycopg2 - kesalahan izin copy_expert ditolak

Saya mencoba beralih dari Windows ke ubuntu (saya menggunakan 12,04 LTS) dan saya mencoba menggunakan beberapa skrip lama saya untuk menjalankan database lama saya. Sebelumnya saya menggunakan postgresql dan psycopg2 untuk memeliharanya dan saya mencoba melakukannya lagi di sini.

Kesalahan saya adalah saat mengimpor file csv ke tabel menggunakan perintah copy expert.

Kode adalah sebagai berikut:

#!/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()

Kesalahan spesifik yang terjadi adalah sebagai berikut:

psycopg2.ProgrammingError: tidak dapat membuka file "nama file" untuk dibaca: Izin ditolak

Bantuan apa pun akan sangat dihargai:

Saya benar-benar buntu dan saya yakin ini disebabkan oleh beberapa kekhasan dalam cara saya mengatur database atau file.

Menambahkan perintah baca dan cetak sederhana menggunakan modul csv juga berfungsi dengan baik (sebenarnya dari skrip yang sama) Ini akan menampilkan semua informasi dari file csv dan kemudian kesalahan dengan izin ditolak ketika mencoba mengimpornya ke database

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 sumber
comment
apakah Anda perlu menjalankan skrip menggunakan su karena sistem izin berbeda antara ubuntu dan windows, Anda cenderung perlu menjalankan perintah menggunakan sudo kecuali Anda adalah pengguna root.   -  person EdChum    schedule 08.04.2012
comment
Kesalahan yang sama saat mengawali perintah dengan sudo. Dalam hal ini saya adalah pengguna root. Bisakah Anda menjelaskan cara mengawalinya dengan su? seperti di su python script.py?   -  person dantes_419    schedule 08.04.2012
comment
ya dengan su atau sudo tapi sepertinya itu tidak akan berhasil juga, apa jadinya jika Anda menyalin file csv ke desktop atau lokasi lain yang Anda pasti tahu Anda memiliki izin penuh untuk melakukan apa pun yang Anda suka dengan file tersebut? Juga apa jalur ke nama file, mungkin jalur tersebut tidak kompatibel dengan konvensi *nix yaitu. meneruskan garis miring / alih-alih `\` tetapi ini biasanya ditangani oleh python.   -  person EdChum    schedule 09.04.2012
comment
Hai Ed, menambahkannya ke direktori home sepertinya menyelesaikan masalah, file berhasil diimpor ke database. Saya masih sedikit tidak yakin mengapa. Mungkin ada hubungannya dengan izin pengguna super yang berbeda? Misalnya. postgres vs saya? Saya menggunakan r/home/nigel/‹dua direktori lagi› sebelumnya, sekarang hanya menggunakan /home/nigel skrip berhasil.   -  person dantes_419    schedule 09.04.2012
comment
juga tidak yakin mengapa tetapi direktori tertentu dikunci secara default sehingga Anda selalu harus berganti pengguna atau menjadi pengguna super, mungkin saja lokasinya masih di luar batas untuk semua pengguna, pokoknya senang itu menyelesaikan masalah Anda. akan memposting ringkasan komentar saya sebagai jawaban sehingga Anda dapat menerimanya   -  person EdChum    schedule 09.04.2012


Jawaban (1)


Coba jalankan perintah sebagai pengguna super dengan menggunakan su atau sudo dan jika ini tidak membantu, kemungkinan lainnya adalah lokasi nama file di luar batas jadi saya akan mencoba menyalinnya ke desktop atau direktori atau folder home Anda di mana Anda tahu Anda pasti memiliki izin penuh dan lihat apakah ini berhasil.

person EdChum    schedule 08.04.2012
comment
Cheers Ed, menambahkan file ke folder home memecahkan masalah. - person dantes_419; 09.04.2012