psycopg2 在 /tmp 上被拒绝权限

1 投票
1 回答
927 浏览
提问于 2025-04-17 23:05

在通过 psycopg2 运行 copy 命令时,我遇到了一个错误:

psycopg2.ProgrammingError: 无法打开文件 "/tmp/<>.txt" 进行写入:权限被拒绝

我不知道这个问题的具体原因,但之前我运行 copy 命令时没有遇到过这个问题。与这个问题的回答不同,把输出位置改到主文件夹也没有改变结果。我尝试用 chmod -R 777 /tmp 来重置 /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 个回答

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)

来自文档:

SQL语句应该写成 COPY table TO STDOUT 这样的格式,这样才能把表的数据导出到作为参数传入的文件对象中。

撰写回答