我有一个这样的函数 -
CREATE
OR REPLACE FUNCTION ind (bucket text) RETURNS table (
middle character varying (100),
last character varying (100)
) AS $body$ BEGIN return query
select
fname as first,
lname as last
from all_records
; END;
$body$ LANGUAGE PLPGSQL;
如何将select ind ('Mob')
的结果输出到 tsv 文件中?
我希望输出看起来像这样 -
first last
MARY KATHERINE
您可以使用 COPY 命令 例:
COPY (select * from ind('Mob')) TO '/tmp/ind.tsv' CSV HEADER DELIMITER E't';
文件"/tmp/ind.tsv"将包含您的数据
由于某种原因,Postgres不允许为tsv使用带有标头的复制。
如果您使用的是基于 linux 的系统,则可以使用如下脚本:
#create file with tab delimited column list (use t between each column name)
echo -e "user_idtemail" > user_output.tsv
#now you can append the results of your query to that file by copying to STDOUT
psql -h your_host_name -d your_database_name -c "copy (SELECT user_id, email FROM my_user_table) to STDOUT;" >> user_output.tsv
或者,如果您的脚本很长并且您不想使用 -c 命令传递它,则可以从 .sql 文件中使用相同的方法,使用"--quiet"以避免将通知传递到您的文件中
psql --quiet -h your_host_name -d your_database_name -f your_sql_file.sql >> user_output.tsv