2014-02-27 58 views
0

我在数据库中两个不同的表,如动态查询Postgres里

db=# select * from pg_tables where tablename like '%enhancedreports03_1970_01_01%'; 

SCHEMANAME |表名| tableowner |表空间| hasindexes | hasrules |触发器 ------------ + ------------------------------ + ---- ----------------- + -------------- + ------------ + ---- ------ + ------------- 报告| enhancedreports03_1970_01_01 | ss_agent_summarizer | rpt_data_tbs | t | f | f (1 row)

db=# select * from pg_tables where tablename like '%enhancedreports03_0_1970_01_01%'; 

schemaname |表名| tableowner |表空间| hasindexes | hasrules |触发器 ------------ + -------------------------------- + - ------------------- + -------------- + ------------ + - -------- + ------------- 报告| enhancedreports03_0_1970_01_01 | ss_agent_summarizer | rpt_data_tbs | t | f | ˚F (1行)

要求是采取CSV备份,我尝试使用下面的动态查询

db=# select 'copy ' || '"'|| "schemaname" ||'"' || '.' ||'"'|| "tablename" ||'"' || ' from ' || ' ''/home/postgres/' || schemaname || '_' || tablename || '.' || 'csv.gz''' || ' delimiter ''' || ',' || ''' CSV' || ';' from pg_tables where tablename like '%enhancedreports03_0_1970_01_01%' order by schemaname,tablename; 
                     ?column? 
--------------------------------------------------------------------------------------------------------------------------------------------------------- 


    copy "reports"."enhancedreports03_0_1970_01_01" from '/home/postgres/reports_enhancedreports03_0_1970_01_01.csv.gz' delimiter ',' CSV; 

但我需要的结果集是这样的

copy "reports"."enhancedreports03_1970_01_01" from '/home/postgres/reports_enhancedreports03_0_1970_01_01.csv.gz' delimiter ',' CSV; 

回答

0

编辑您的查询如

db=# select 'copy ' || '"'|| "schemaname" ||'"' || '.' ||'"'|| "tablename" ||'"' || ' from ' || ' ''/home/postgres/' || schemaname || '_' || tablename || '.' || 'csv.gz''' || ' delimiter ''' || ',' || ''' CSV' || ';' from pg_tables where tablename like '%enhancedreports03%' order by schemaname,tablename; 

我想这会给你你的愿望res ULT或者你可以这样写

CREATE OR REPLACE FUNCTION fn_export_table_csv(query text, filename text) 
RETURNS void 
LANGUAGE plpgsql 
AS $function$ 
DECLARE 
    MySql TEXT;:='COPY ('||SqlQuery||') TO '||CHR(39)|| 
    FileName||CHR(39)||' WITH DELIMITER '||CHR(39)||','||CHR(39)||' CSV HEADER'; 
BEGIN 
    RAISE NOTICE '%',MySql; 
    EXECUTE MySql; 
END; $function$ 

; 

的功能,然后使用像

db=# select 'copy ' || '"'|| "schemaname" ||'"' || '.' ||'"'|| "tablename" ||'"' || ' from ' || ' ''/home/postgres/' || schemaname || '_' || tablename || '.' || 'csv.gz''' || ' delimiter ''' || ',' || ''' CSV' || ';' from pg_tables where tablename like 'enhancedreports03_1970_01_01%' order by schemaname,tablename; 
+0

查询没有动态查询没有给我想要的结果set..What我需要的是有针对性表应该是复制到表没有下划线零(_0)..即)enhancedreports03_0_1970_01_01增强报告03_1970_01_01 – user3359124

+0

对不起,我真的不明白你目前的问题,你请解释它...对不起.. –

+0

实际上我不明白的需要dianamic查询因为你有一个单一的表和一个单一的CSV文件,所以直接使用它... –