如何从 VSQL 输出中排除总行信息

How to exclude the total row information from VSQL output

我正在使用 VSQL 从 table 中使用以下命令以 CSV 格式提取数据:

vsql -h [host_address] -d [db_name] -u [user_name] -w [password] -A -F , -t -f script_to_extract_data.sql -o output.csv

但是,它会输出列 headers、数据行和一个额外的行,指示 table 中的总行数,如下所示:

Geography,Product,Campaign,VariableName,Outlet,Creative,Period,VariableValue
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-03,24.06
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-08,67.17
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-17,404.67
(3 rows)

如果我排除 -t 选项,它将只输出如下数据:

Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-03,24.06
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-08,67.17
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-17,404.67

我想要列 headers 和数据,但不是像这样的总行数:

Geography,Product,Campaign,VariableName,Outlet,Creative,Period,VariableValue
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-03,24.06
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-08,67.17
Geo_00000,Product,BABY,web_sales,Total,Total,2016-10-17,404.67

通读 VSQL commandline options,我认为我没有办法限制不显示的总行数??任何有通过命令行使用 VSQL 经验的人都可以帮助我,我将不胜感激。谢谢!

没有记录的方法可以做到这一点。

您可以将 select 注入到您的脚本中以打印出 header,同时保持 tuples-only 开启。

\t
\a
\f ,
\o output.csv
select 'Geography', 'Product', 'Campaign', 'VariableName', 'Outlet', 'Creative', 'Period', 'VariableValue';

select Geography, Product, Campaign, VariableName, Outlet, Creative, Period, VariableValue
from mytable;
\o

而且我猜想如果将字段列出两次真的非常困扰您,您可以使用变量。

\set fields Geography,Product,Campaign,VariableName,Outlet,Creative,Period,VariableValue

然后在两个查询中引用 :fields(只需在 header 列表周围使用 ')。在这种情况下,header 列表只需要是一个字符串,并且分隔符必须是 ,,因为它也会在 sql 中使用。只是一个想法。

没有 -t 添加 -P footer=off...这将为您提供没有页脚​​的页眉,如您所愿。

vsql -h [host_address] -p [port] -d [db_name] -u [user_name] -w [password] -AP footer=off -F , -f script_to_extract_data.sql -o output.csv