2016-05-18 246 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... 
                  ^

有人能帮助我弄清楚如何可以恰当地逃避那个单引号,或者提出一个完成我的任务的替代方法?

回答