Postgres复制到带标题的TSV文件

时间:2019-09-09 22:13:13

标签: sql postgresql

我有类似的功能-

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

2 个答案:

答案 0 :(得分:0)

您可以使用COPY命令 示例:

COPY (select * from ind('Mob')) TO '/tmp/ind.tsv'  CSV  HEADER DELIMITER E'\t';

文件'/tmp/ind.tsv'将包含您的数据

答案 1 :(得分:0)

出于某种原因,Postgres不允许使用tsv的标头进行复制。

如果您使用的是基于Linux的系统,则可以使用以下脚本来完成此操作:

this

或者,如果您的脚本很长,并且您不想使用-c命令传递它,则可以使用.sql文件中的相同方法,请使用“ --quiet”以避免将通知传递到文件中

#create file with tab delimited column list (use \t between each column name)
echo -e "user_id\temail" > 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