我有2个表,一个表中创建一个元素,另一个表中以不同的语言保存该元素的详细信息。
第一张桌子:
CREATE TABLE public.element
(
idelement integer NOT NULL DEFAULT nextval('element_idelement_seq'::regclass),
image_location text,
price numeric(6,2) NOT NULL DEFAULT 0,
CONSTRAINT element_pkey PRIMARY KEY (idelement)
)
第二张桌子:
CREATE TABLE public.elementdetails
(
idelement integer NOT NULL,
title text,
description text,
notes text,
language text NOT NULL,
CONSTRAINT elementdetails_pkey PRIMARY KEY (idelement, language)
)
我使用函数在plpgsql中插入新元素
IF _idelement = 0 THEN
INSERT INTO element (price) VALUES (0.0);
SELECT lastval() INTO _idelement;
EXECUTE FORMAT('INSERT INTO elementdetails(idelement, %I, language) VALUES (%L, %L, %L))', _fieldname, _idelement, _value, _language);
END IF;
但是会引发一个错误,指出关键约束(要素,语言)已经存在。
仅复制出现在错误消息中的SQL并在另一个窗口中执行它就不会出现问题,并且该问题仅在pgsql函数中出现。
编辑:我要补充一点,这一直有效,直到我注意到一个让人们以大写或小写形式插入iso的问题为止,所以我强迫该语言始终为大写,因为这样我得到了错误消息。 / p>
答案 0 :(得分:0)
我发现了问题:
那句话之后,我还有另一句话
IF _idelement > 0 THEN
EXECUTE FORMAT('INSERT INTO elementdetails(idelement, %I, language) VALUES (%L, %L, %L))', _fieldname, _idelement, _value, _language);
END IF;
但是我忘了把它放在ELSE之后,所以执行了两个INSERT都会引发错误。