如何隐藏psql输出中的列名和行数?
我正在通过psql运行SQL查询:
psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;"
Run Code Online (Sandbox Code Playgroud)
我期待输出像:
1,abc
2,def
3,xyz
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
id,text
-------
1,abc
2,def
3,xyz
(3 rows)
Run Code Online (Sandbox Code Playgroud)
当然,在事实之后过滤掉前两行和底行并不是不可能的,但有没有办法只用psql来做?阅读其手册页,我看到了控制字段分隔符的选项,但没有用于隐藏无关输出.
rua*_*akh 79
您可以使用-t或--tuples-only选项:
psql --user=myuser -d mydb --output=result.txt -t -c "SELECT * FROM mytable;"
编辑(超过一年后)添加:
您也可以查看该COPY命令.我不再需要任何PostgreSQL实例来测试,但我认为你可以写下这些内容:
psql --user=myuser -d mydb -c "COPY mytable TO 'result.txt' DELIMITER ','"
(除了result.txt需要是绝对路径).该COPY命令还支持更智能的CSV格式; 看它的文件.
epi*_*fil 19
您还可以从psql中重定向输出并使用相同的选项.使用\ o设置输出文件,使用\ t仅输出元组(或仅\pset关闭rowcount"footer").
\o /home/flynn/queryout.txt
\t on
SELECT * FROM a_table;
\t off
\o
Run Code Online (Sandbox Code Playgroud)
或者,
\o /home/flynn/queryout.txt
\pset footer off
. . .
Run Code Online (Sandbox Code Playgroud)
usually when you want to parse the psql generated output you would want to set the -A and -F ...
# 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"
Run Code Online (Sandbox Code Playgroud)
You could find example of the full bash call here:
| 归档时间: |
|
| 查看次数: |
33582 次 |
| 最近记录: |