gpt4 book ai didi

postgresql - 由于 "malformed record literal"无法插入记录

转载 作者:行者123 更新时间:2023-11-29 11:28:40 30 4
gpt4 key购买 nike

下面的问题难住了我

SELECT string_agg(e.enumlabel, '|') as enum_value
FROM pg_type t
JOIN pg_enum e on t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE typname = 'contacts'

above|below|lateral|lateral-bottom|lateral-top|within

CREATE TABLE unit_contacts
(
id integer NOT NULL DEFAULT nextval('unit_contacts_id_seq1'::regclass),
unit_id integer NOT NULL,
old_contact contacts NOT NULL,
contact contacts NOT NULL,
old_with_unit integer NOT NULL,
with_unit integer NOT NULL,
CONSTRAINT unit_contacts__pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);

mm=> INSERT INTO unit_contacts VALUES (15, 1, 'below', 'below', 8112, 2);
ERROR: malformed record literal: "below"
LINE 1: ...SERT INTO unit_contacts VALUES (15, 1, 'below', '...

我不明白为什么我根本无法插入该行。

最佳答案

显然是命名冲突。

缺少枚举值的错误消息是:

ERROR:  invalid input value for enum rainbow: "below"
LINE 1: INSERT INTO t VALUES (1, 'below');

您的错误消息表明存在同名的复合类型,很可能来自同名的表。 避免使用相同的名称!

要重现,请考虑这个演示:

CREATE TYPE contacts  AS ENUM ('above', 'below', 'lateral');
SELECT 'above'::contacts; -- all good, before the next step

CREATE TEMP TABLE contacts (id int, x text); -- !the crucial part

SELECT string_agg(e.enumlabel, '|') as enum_value
FROM pg_type t
JOIN pg_enum e on t.oid = e.enumtypid
WHERE t.typname = 'contacts'; -- all good

CREATE TEMP TABLE t (id int, r contacts);
INSERT INTO t VALUES (1, 'above'); -- ERROR
SELECT 'above'::contacts; -- same ERROR

这只有在枚举类型和表(行类型)存在于两个不同的模式中时才会发生。 PostgreSQL 不允许在同一个模式中同时出现。在您的情况下,表的架构列在 search_path 中枚举的架构之前。创建表时。或者枚举类型当时甚至不存在。见:

在我的示例中,临时表排在第一位,因为架构 pg_temp 默认情况下在搜索路径中排在第一位。当我创建表时,“联系人”被解析为行类型 (pg_temp.contacts),而不是枚举类型 (public.contacts)。

如果您必须具有同名的表和枚举,请务必架构限定使用中的类型名称。在我的示例中:

pg_temp.contacts -- the composite type
public.contacts -- the enum type

关于postgresql - 由于 "malformed record literal"无法插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543041/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com