将 INSERT IGNORE 转换为 Postgres INSERT

Pie*_*ler 2 regex sql postgresql

我目前正在开发一个正则表达式来将 sql 语法转换为 Postgres 语法。我正在使用 geany 来替换文本。目前,我尝试更改的语法是:

INSERT IGNORE INTO item_question_ (question_fk_,item_fk_) VALUES(1002,162);
Run Code Online (Sandbox Code Playgroud)

进入 :

INSERT INTO item_question_ (question_fk_,item_fk_) VALUES (1002,151) 
WHERE NOT EXISTS 
(SELECT 1 FROM item_questionnaire_ WHERE question_fk_=1002 AND item_fk_ = 151)
Run Code Online (Sandbox Code Playgroud)

我很接近,但绝对还不够。我有这个正则表达式:

(INSERT IGNORE INTO (.*)_ (.*) VALUES(.*);) //Find information
INSERT INTO \2_ \3 VALUES \4 WHERE NOT EXISTS (SELECT 1 FROM \2_ WHERE )// Transform information
Run Code Online (Sandbox Code Playgroud)

事实上,我遗漏了最重要的部分:条款WHERE

我如何获取该值question_fk_,item_fk_1002,151构建我的 where 子句?

附加说明:Postgres 版本低于 9.5。我不能使用ON CONFLICT IGNORE

Col*_*Two 5

PostgreSQL 9.5+:将IGNORE原始查询替换为ON CONFLICT IGNORE,这是 PostgreSQL 语法,用于在任何约束失败时忽略更新。