psycopg2被拒绝/ tmp的权限

时间:2014-03-20 08:12:24

标签: python postgresql python-2.7 ubuntu-12.04 psycopg2

通过psycopg2运行copy命令时出现错误

psycopg2.ProgrammingError: could not open file "/tmp/<>.txt" for writing: Permission denied

我不知道问题的病因,但过去我能够在没有这个问题的情况下运行复制命令。与this question的答案不同,将输出位置更改为主文件夹不会更改结果。我尝试使用/tmp重置chmod -R 777 /tmp权限,但没有成功。使用sudo权限运行脚本也不起作用。接下来我应该尝试解决此问题?

该程序的代码示例是:

import psycopg2 as post
con = post.connect(<dbname>, <host>, <user>, <password>)
cur = con.cursor()
with open('/tmp/out_path.txt', 'w') as f:
    cur.copy_expert("COPY <table> TO '/tmp/out_path.txt' WITH CSV HEADER" + 
                    "DELIMITER AS E'\t'", f)
# close connections, etc

我在Ubuntu 12.04服务器上,PostgreSQL 9.3,Python 2.7。客户端和主机都在同一台机器上 - 我在通过ssh登录时运行脚本。

1 个答案:

答案 0 :(得分:2)

with open('/tmp/out_path.txt', 'w') as f:
    cur.copy_expert("""
        COPY <table> TO STDOUT WITH CSV HEADER DELIMITER AS E'\t'
    """, f)

From the docs

  

sql语句应该以COPY表TO STDOUT的形式将表导出到作为参数传递的文件对象