如何在Psql输出中隐藏结果集装饰
如何隐藏psql输出中的列名和行数 我正在通过psql运行SQL查询:如何在Psql输出中隐藏结果集装饰,sql,postgresql,Sql,Postgresql,如何隐藏psql输出中的列名和行数 我正在通过psql运行SQL查询: psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;" 我期望的结果是: 1,abc 2,def 3,xyz 但我得到的却是: id,text ------- 1,abc 2,def 3,xyz (3 rows) 当然,在事实发生后过滤掉最上面的两行和最下面的一行并不是不可能的,但是有没有一种方法可以只用psql来实现呢?翻阅
psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;"
我期望的结果是:
1,abc
2,def
3,xyz
但我得到的却是:
id,text
-------
1,abc
2,def
3,xyz
(3 rows)
当然,在事实发生后过滤掉最上面的两行和最下面的一行并不是不可能的,但是有没有一种方法可以只用psql来实现呢?翻阅手册页,我看到了控制字段分隔符的选项,但没有看到隐藏无关输出的选项。您可以使用-t或-tuples only选项:
除了result.txt需要是绝对路径之外。“复制”命令还支持更智能的CSV格式;请参阅。您还可以从psql中重定向输出并使用相同的选项。使用\o设置输出文件,使用\t仅输出元组,或使用\pset仅关闭行计数页脚
\o /home/flynn/queryout.txt
\t on
SELECT * FROM a_table;
\t off
\o
或者
\o /home/flynn/queryout.txt
\pset footer off
. . .
通常你会想要设置-A和-F
您可以找到完整bash调用的示例:或者,如果您想要页眉而不是行计数页脚,那么使用-pset=footer=offCOPY运行psql确实是一个有效的替代方法,但是文件将在服务器上结束,而不是在运行psql的机器上…@fvu:好的观点。我通常在服务器上运行psql,所以对我来说这不是问题。如果您希望文件最终位于客户机文件系统上,请使用psql,即在复制命令前面添加反斜杠,我认为@GabrielBurt comment应该是一个独立的答案。这正是我想要生成一个带有页眉但没有令人讨厌的nnnn行页脚的csv的目的。psql-U username-X-a-w-t-c select count*从yourtable生成的结果是:1
\o /home/flynn/queryout.txt
\t on
SELECT * FROM a_table;
\t off
\o
\o /home/flynn/queryout.txt
\pset footer off
. . .
# generate t.col1, t.col2, t.col3 ...
while read -r c; do test -z "$c" || echo , $table_name.$c | \
perl -ne 's/\n//gm;print' ; \
done < <(cat << EOF | PGPASSWORD=${postgres_db_useradmin_pw:-} \
psql -A -F -v -q -t -X -w -U \
${postgres_db_useradmin:-} --port $postgres_db_port --host $postgres_db_host -d \
$postgres_db_name -v table_name=${table_name:-}
SELECT column_name
FROM information_schema.columns
WHERE 1=1
AND table_schema = 'public'
AND table_name =:'table_name' ;
EOF
)
echo -e "\n\n"