Postgres 复制到带有标头的 TSV 文件



我有一个这样的函数 -

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

最新更新