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... ^
有人能帮助我弄清楚如何可以恰当地逃避那个单引号,或者提出一个完成我的任务的替代方法?
美丽。像魅力一样工作,谢谢 –