【问题标题】:Copy in Postgresql: Absolute Path Interpreted as Relative Path在 Postgresql 中复制:将绝对路径解释为相对路径
【发布时间】:2014-10-01 08:53:29
【问题描述】:

我在 Django 应用程序中运行此语句:

c = connections['default'].cursor()
    query="copy (select * from analysis.\"{0}\") to STDOUT DELIMITER ',' CSV HEADER;".format(view_name)
            with open(csvFile,'w') as f:
                c.copy_expert(query,f)
            f.close()

它不会创建正确的 csv 文件。某些值似乎在错误的列中。我正在尝试通过在 POSTGRESQL 中运行 SQL 语句来测试它:

 copy (select * from analysis."S03_2005_activity_140807_153431_with_geom") to 'C:/djangoProjects/web_output/csvfiles/S03_2005_activity_140807_153431_with_geom.csv' DELIMITER ',' CSV HEADER;

它给了我:“错误:不允许复制到文件的相对路径”。我已经研究过这个问题,它似乎通常是两个问题之一:1.混淆'\'和'/'。我的斜线应该是正确的。 2. 服务器在不同的计算机上。我认为这可能是我的问题,因为数据库位于外部计算机上,但我的 Postgresql 中有连接。它也从 Django 运行,所以我不确定为什么它不能从 PG Admin 运行。

【问题讨论】:

    标签: django postgresql psycopg2


    【解决方案1】:

    如果您想从本地计算机存储数据/获取数据并与另一台远程计算机上的 Postgres 服务器通信,您不能简单地使用COPY

    试试元命令\copy in psql。它是 SQL COPY 命令的包装器并使用本地文件。

    您的 文件名 应该在 Windows 机器上按原样工作,但 Postgres 将其解释为 本地 文件名 在服务器上,它可能是 Unix 派生的。并且文件名必须以'/'开头。

    【讨论】:

    • PgAdmin-III 不支持 psql 元命令这如此很烦人;使这类问题更难处理。 “哦,你必须使用不同的数据库客户端才能完成这项工作”。嗯。 OTOH,这源于 psql 不能用作库,这本身就是一个问题。
    • 我目前使用的方法似乎适用于我的 Django 应用程序,我使用 psql 中的 \copy 得到了相同的结果。我的数据仍然没有排列在正确的列中。问题是一列有空白单元格。
    • 列数据类型为几何。
    • 好像是excel的问题。单元格包含太多字符。如果我在记事本 ++ 中打开它,这些值会在其正确的列中排列。 Excel 允许 32,767 个字符,而我的一些几何列有 35,000+。我相信该语句在 Django 中有效,但在 Postgresql 中无效,因为无论 Django 的主机服务器如何,Django 都能够在其设置中连接到远程 Postgresql 服务器。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2012-01-31
    • 2017-08-01
    • 2011-11-07
    相关资源
    最近更新 更多