我使用下面的命令来获取我的SQL查询的结果。
su - postgres -c 'psql -d dbname' with stdin "COPY ( my SQL query ) TO STDOUT WITH CSV HEADER"
这在我的服务器上运行正常,但在不同的机器上,它正在打印带有SQL查询输出的bash警告。
例如 -
/etc/profile: line 46: HISTSIZE: readonly variable
/etc/profile: line 50: HISTCONTROL: readonly variable
/etc/profile.d/20-tmout.sh: line 1: TMOUT: readonly variable
/etc/profile.d/history.sh: line 6: hcmnt_tty: readonly variable
name
abc
无论如何,请告诉我,以便我可以跳过上述警告信息并仅获取数据。
如果我想在这种情况下使用/ dev / null如何修改上述命令以仅获取数据。
答案 0 :(得分:0)
如果您的意思是“如何仅丢弃错误输出?”,那么可以采用的方法是将标准错误流重定向到遗忘(/dev/null
),如下所示:< / p>
your-command 2>/dev/null
这样,如果命令将数据输出到标准输出,它就会通过,但是对标准错误套接字的任何输出都将被丢弃,因此您将看不到这些错误消息。
顺便说一下,2
这里是标准错误的简写文件描述符。
答案 1 :(得分:0)
很抱歉这是未经测试的,但我遇到了同样的错误,您的数据库会话不是可读/写的。您可以将语句回显给psql以强制执行适当的会话,如下所示。我不确定stdin可能会如何影响
echo 'SET TRANSACTION READ WRITE; SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE ; COPY ( my SQL query ) TO STDOUT WITH CSV HEADER' | su - postgres -c 'psql -d dbname' with stdin
答案 2 :(得分:0)
谨慎 - bash hack
su - postgres -c 'psql -d dbname' with stdin "COPY ( my SQL query ) TO STDOUT WITH CSV HEADER" | grep -v "readonly"