PostgreSQL嵌套表

PostgreSQL嵌套表,postgresql,Postgresql,我有一个网格,看起来像图片所附。网格的每个级别对应一个表 研究表:代理人、研究、研究编号、研究发起人、当前状态 站点表:研究、amtrackid、名称、pi、dsa、状态、IRBAPCr、ibc、obarac、ohrp、ib、prot、ic、global1572 实验室表格:amtrackid、labid、名称、cap、clia、lnv 调查者表:amtrackid、人名、姓名、简历、ml、fd、dot、hspt、pisort 如何生成一个在表格中循环的CSV文件,并提供类似嵌套网格的输出 -A

我有一个网格,看起来像图片所附。网格的每个级别对应一个表

研究表:代理人、研究、研究编号、研究发起人、当前状态

站点表:研究、amtrackid、名称、pi、dsa、状态、IRBAPCr、ibc、obarac、ohrp、ib、prot、ic、global1572

实验室表格:amtrackid、labid、名称、cap、clia、lnv

调查者表:amtrackid、人名、姓名、简历、ml、fd、dot、hspt、pisort

如何生成一个在表格中循环的CSV文件,并提供类似嵌套网格的输出

-Agent Study IND_no ND_sponsor Current_Status------------------------------------------------------------- -9-cis-UAB30;UWI10-16-01R; 101064; DCP; Completed------------------------------------------------ ------------------Site PI ...----------------------------------------------------------------------------------------------------------------- -----University of Wisconsin Hospital and Clinics;Kolesar, Jill M, PharmD... ------------------------------------ ---------Lab CAP CLIA LNV------------------------------------------------------------------------------------------------ --------UAB University of Alabama Hospital Lab ...----------------------------------------------------------------- ---------Investigator CV FD----------------------------------------------------------------------------------------------- ---------Rahman (Davis), Zahra...
这应该在应用程序/UI层完成,而不是在数据库中。因此,没有办法直接从数据库将该格式的数据保存到CSV文件中?我不想说肯定没有,但我认为通过存储过程完成这项工作的唯一方法是编写可怕的代码,速度非常慢,扩展性不好。老实说,任何外部脚本/代码/应用程序都最好这样做,因为这种格式不在RDBMS的wheelhouse.Ok中。谢谢将从应用程序方面进行尝试。
CREATE OR REPLACE FUNCTION dw_regtrack.dash_parsing_quicklist(userName character)
  RETURNS integer AS
$BODY$
DECLARE
  superData RECORD;
  studyData RECORD;
  siteData RECORD;
  siteData2 RECORD;

BEGIN
truncate table dw_regtrack.dash_output_quicklist; 

for superData in (select agent, study, ind_no, sponsor, status, user_name as uname from dw_regtrack.qlstudies st left join dw_regtrack.user_studies us ON st.study=us.study_name)
loop
    INSERT INTO dw_regtrack.dash_output_quicklist(agent,inform1,inform2,inform3,inform4,inform5)
        (select agent, study, ind_no, sponsor, status,user_name from dw_regtrack.qlstudies st left join dw_regtrack.user_studies us ON st.study=us.study_name where superData.uname='gsamara');

    --(select agent, study, ind_no, sponsor, status from dw_regtrack.qlstudies st left join dw_regtrack.user_studies us ON st.study=us.study_name where user_name='gsamara');

    for studyData in (select study, amtrackid, name, pi, status, irbappcr, ohrp, ib, prot, ic, global1572, 1572, ibc, obarac, dsa from dw_regtrack.qlstudysites2)
    loop

        insert into dw_regtrack.dash_output_quicklist(agent, inform1, inform2, inform3, inform4, inform5, inform6, inform7, inform8, inform9, inform10, inform11,inform12,inform13,inform14,inform15)
        (select '', study, amtrackid, name, pi, status, irbappcr, ohrp, ib, prot, ic, global1572, 1572, ibc, obarac, dsa from dw_regtrack.qlstudysites2 where studyData.study=superData.study);

        for siteData in (select amtrackid, labid, name, cap, clia, lnv from dw_regtrack.qlstudysitelabs)
        loop        
            insert into dw_regtrack.dash_output_quicklist(agent, inform1, inform2, inform3,inform4,inform5,inform6,inform7)
            (select '','', amtrackid, labid, name, cap, clia, lnv from dw_regtrack.qlstudysitelabs where siteData.amtrackid=StudyData.amtrackid);

        end loop;

        for siteData2 in (select amtrackid, personid, name, cv, ml, fd, hspt, dot, pisort from dw_regtrack.qlstudysiteinvests2)
        loop    
            insert into dw_regtrack.dash_output_quicklist(agent, inform1, inform2, inform3, inform4, inform5, inform6, inform7, inform8,inform9,inform10)
            (select '', '', amtrackid, personid, name, cv, ml, fd, hspt, dot, pisort from dw_regtrack.qlstudysiteinvests2 where siteData2.amtrackid=studyData.amtrackid);

        end loop;
    end loop;
end loop;

Return 1;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION dw_regtrack.dash_parsing_quicklist(character)
  OWNER TO postgres;