【问题标题】:how to save sql command results into file(postgresql)如何将sql命令结果保存到文件中(postgresql)
【发布时间】:2012-04-21 17:08:04
【问题描述】:

我在 PostgreSQL 中有大量包含超过 300000 个插入命令。我什至无法将它加载到 pgAdmin 中(它崩溃了)。所以我使用命令行和 \i 来执行文件。 我想查看错误消息(如果有)。如何通过命令行将消息保存到日志文件中? 感谢你的帮助 谢谢

编辑 我已经看到了一些other posts,但还是忍不住。

【问题讨论】:

  • 300000 插入命令?从文件中读取数据不是更容易吗?
  • @wildplasser :) 我刚刚将一个 XML 文件转换为插入命令来填充数据库。这就是雇主所需要的:一个数据库! “从文件中读取数据”?您是否建议使用另一种解决方案来完成它?请帮忙。谢谢
  • 如果 XML 仅包含一个(或几个)矩形数据表,则可以相对容易地将其转换为 .csv(或 .tsv)文件。 (比将其转换为插入语句更容易,恕我直言)
  • 我已经考虑过 CSV,但实际上我做不到。但是,如果可能的话,这对我来说仍然很重要。那么,矩形数据表对您来说是什么意思?如果你的意思不是分层的,不,数据是分层的(嵌套的)。还有可能吗?工具是什么?谢谢
  • 我指的是(一组)行*列数据意义上的矩形。只是简单的表数据。如果您的意思是“非规范化”意义上的分层,那么您将遇到麻烦。如果你只是指表之间的(FK)关系,那没关系。

标签: sql postgresql command-line


【解决方案1】:
psql -e -f file_name db_name 2>&1 > log.txt

你会发现大部分有趣的日志都是从 psql 发送到 stderr,所以 将 stderr 重定向到 stdout,然后将它们放在 log.txt 文件中应该可以工作。

【讨论】:

    【解决方案2】:

    来自 unix-prompt:(windows 可能有类似的机制)。

    psql -U my_username my_databasename < the_script.sql >the_output.log
    

    更新:上面的命令假设执行它的用户能够读取“the_script.sql”并且用户可以写入“the_output.log”(在这种情况下是在当前目录中)如果你不能出于某种原因写在那里,你总是可以写到/tmp,如psql -U my_username my_databasename &lt; the_script.sql &gt;/tmp/other_output.log

    【讨论】:

    • 我使用自己的帐户(vahid)登录,数据库所有者是 postgres。所以命令看起来像这样:vahid@vahid-ThinkPad-T420:~/workspace/MATSIM$ psql -U postgres MATEST ./res.txt psql: FATAL: Peer authentication failed for user "postgres"跨度>
    • 执行 sudo 并没有改变任何东西
    • 将输出文件所有者(和中间目录)更改为 postgres 也会产生另一个问题:$ psql -U postgres MATEST /sqlresult/res.txt bash: /sqlresult/res.txt : 权限被拒绝任何想法?谢谢
    • 更改 chmod 输出文件的权限 sudo chmod 777 /sqlresult/res.txt 让我回到原来的问题:FATAL: Peer authentication failed for user "postgres"
    • 请更新您的问题,并准确告诉我们您使用了哪些命令。 “执行 sudo 并没有改变任何东西”信息量不是很大。
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多