2014-02-27 56 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文件,所以直接使用它... –