PostgreSQL:如何将表记录拆分/导出为按年切片 (CSV)?

kha*_*jlk 4 sql csv postgresql

我的 PostgreSQL 9.5 数据库中有一个表,其中包含两列,即 start_time (没有时区的时间戳)和值(记录),如下所示。

Start_time              Values
2003-06-07 00:00:00     12
2004-02-03 00:00:00     16
2005-07-09 00:00:00     14
2003-07-07 00:00:00     17
2004-01-31 00:00:00     11
2005-05-02 00:00:00     10
Run Code Online (Sandbox Code Playgroud)

对于 start_time,我需要导出 my_table 记录,以便它为每个年份切片生成 CSV 文件,如下所示(将每年的记录分隔在单独的 CSV 文件中)。

预期输出:

results_2003.csv
results_2004.csv
results_2005.csv
and so on...
Run Code Online (Sandbox Code Playgroud)

这个怎么做?

kli*_*lin 6

在 plpgsql DO 块内以动态执行格式使用复制命令例如:

do $$
declare
    y int;
begin
    for y in
        select distinct extract(year from start_time)
        from my_table
    loop
        execute format($ex$
            copy (
                select * 
                from my_table 
                where extract(year from start_time) = %1$s
                )
            to '\data\%1$s.csv'
            $ex$, y);
    end loop;
end $$;
Run Code Online (Sandbox Code Playgroud)