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... ^
有人能幫助我弄清楚如何可以恰當地逃避那個單引號,或者提出一個完成我的任務的替代方法?
美麗。像魅力一樣工作,謝謝 –