【发布时间】:2020-06-08 14:00:22
【问题描述】:
我有两张表,一张我创建一个元素,另一张我用不同的语言保存所述元素的详细信息。
第一张桌子:
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;
但它会引发一个错误,说明键约束(idelement、语言)已经存在。
只需复制出现在错误消息中的 SQL 并在另一个窗口中执行它就不会出现任何问题,而且问题仅在 pgsql 函数中出现。
编辑:我会补充说,这一直有效,直到我注意到我让人们以大写或小写形式插入语言 iso 的问题,所以我强制语言始终为大写,从那时起我收到错误消息。
【问题讨论】:
标签: postgresql key plpgsql postgresql-9.6