how to save sql command results into file(postgresql)
我有一大批在PostgreSQL中包含超过300000个插入命令。 我甚至无法将其加载到pgAdmin(它崩溃)。 所以我使用命令行和 i来执行文件。
我想看看错误消息(如果有的话)。 如何通过命令行将消息保存到日志文件中?
感谢您的帮助
谢谢
编辑
我已经看过其他一些帖子但无法提供帮助。
-
300000插入命令?从文件中读取数据会不会更容易?
-
@wildplasser :)我刚刚将一个XML文件转换为insert命令来填充数据库。这就是雇主的要求:数据库!"从文件中读取数据"?你建议另一个解决方案来完成它吗?请帮忙。谢谢
-
如果XML只包含一个(或几个)矩形数据表,那么它可以相对容易地转换为.csv(或.tsv)文件。 (比将其转换为插入语句更容易,恕我直言)
-
我已经考虑过CSV了,但实际上我做不到。但是,如果可能的话,对我来说仍然很重要。那么,矩形数据表是什么意思?如果你的意思是不是等级的,不,数据是分层的(嵌套的)。还有可能吗?有什么工具?谢谢
-
我的意思是行(*集合)行*列数据的意义上的矩形。只是简单的表数据。如果你的意思是"非规范化"意义上的等级,你就会陷入困境。如果你只是表(FK)表之间的关系,那就没关系。
-
我有类似的用例,我必须定期导入(并与现有数据合并)大型XML文件。您可以在PostgreSQL中完成所有操作,无需任何准备。我最近发布了一个完整的工作示例。
从unix-prompt :(窗口可能有类似的机制)。
1
| 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 < the_script.sql >/tmp/other_output.log
-
我使用自己的帐户(vahid)登录,数据库所有者是postgres。所以命令看起来像这样:vahid @ vahid-ThinkPad-T420:?/ workspace / MATSIM $ psql -U postgres MATEST ./res.txt psql:FATAL:用户"postgres"的对等身份验证失败
-
做一个sudo并没有改变什么
-
将输出文件所有者(和中间目录)更改为postgres也会产生另一个问题:$ psql -U postgres MATEST /sqlresult/res.txt bash:/sqlresult/res.txt:权限被拒绝任何想法?谢谢
-
更改chmod输出文件sudo chmod 777 /sqlresult/res.txt的权限让我回到原来的问题:致命:用户"postgres"的对等身份验证失败
-
这只是"授权"问题。通常安装会允许postgres从远程连接。本地机器的连接应该总是以某种方式进行(有时通过奇怪的结构,例如继承postgres ROLE的其他用户名)NB"bash:/sqlresult/res.txt:Permission denied"消息来自shell不是允许写入该目录。
-
我怎么能解决这个问题呢?
-
请更新您的问题,并准确告诉我们您使用的命令。"做一个sudo并没有改变任何东西"并不是很有用。
-
@rahman如果您使用的是对等身份验证,那么您应该在发出命令之前以postgres身份登录。我认为最好的方法是使用md5身份验证,如果要跳过密码对话框,还可以选择创建.pgpass文件。
1
| psql -e -f file_name db_name 2>&1 > log.txt |
您将找到的大多数有趣的日志都是从psql发送到stderr的,所以
将stderr重定向到stdout,然后将它们放在log.txt文件中应该可以正常工作。