2016-05-18 271 views
2

我在爲我的分區表在plpgsql中構建了一個觸發器函數,並且我的所有邏輯工作正常,但在將實際記錄插入到表中時遇到問題。在Postgres中使用單引號替換雙引號(plpgsql)

我有一個變量引用來引用我具體的表,這樣的(據我所知)迫使我使用EXECUTE命令,像這樣:

EXECUTE 'INSERT INTO ' || tablename || ' VALUES ' || NEW.*; 

然而,這不處理拆包該記錄以Postgres的INSERT函數可以理解的方式存儲在NEW中。它將記錄轉換爲字符串,同時保留其中的所有雙引號。即上面的代碼在執行時會變成以下代碼:

INSERT INTO cfs_hgt_05152016_05202016 
VALUES ("2016-05-16 00:00:00","2016-05-12 06:00:00",HGT,"1000 mb",9,-71,-38.5371) 

問題在於Postgres認爲這些值現在是由於雙引號引起的列。

COPY cfs_hgt_master, line 1: ""2016-05-16 00:00:00","2016-05-12 06:00:00","HGT","1000 mb",9,-71,-38.5371" 
ERROR: column "2016-05-16 00:00:00" does not exist 

我試圖通過以下操作來解決這個問題:

record_text := regexp_replace(NEW.*, '"', '\'', 'gi'); 
EXECUTE 'INSERT INTO ' || tablename || ' VALUES ' || record_text; 

但逃逸單引號這樣會產生一個錯誤:

psql:cfs_hgt_trigger_function.sql:36: ERROR: unterminated quoted string at or near "' || record_text; 
LINE 30: ... EXECUTE 'INSERT INTO ' || tablename || ' VALUES ' || recor... 
                  ^

有人能幫助我弄清楚如何可以恰當地逃避那個單引號,或者提出一個完成我的任務的替代方法?

回答

相關問題