【发布时间】:2022-11-28 18:45:34
【问题描述】:
我无法插入行类型,因为ID列为空。
CREATE TABLE
some_table (
"id" SERIAL PRIMARY KEY,
"some_value" VARCHAR NOT NULL
);
declare
r_some_table_rt some_table%rowtype;
begin
select *
into r_some_table_rt
from some_table
where some_column = 'Some value';
if r_some_table_rt.id is null then
-- r_some_table_rt.id := default; -- Tried this
-- r_some_table_rt.id := currval(pg_get_serial_sequence('some_table', 'id')); -- And this
r_some_table_rt.some_column := 'Some value';
insert into some_table
values (r_some_table_rt.*)
returning id into r_some_table_rt.id;
end if;
return r_some_table_rt.id;
end;
PostgresError: null value in column "id" of relation "some_table" violates not-null constraint
我尝试了以下
- 使用普通插入件效果很好:
insert into some_table (some_column) values ('Some value');。 -
r_some_table.id := default;->PostgresError: DEFAULT is not allowed in this context -
r_some_table.id := currval(pg_get_serial_sequence('some_table', 'id'));->PostgresError: currval of sequence "some_table_id_seq" is not yet defined in this session
【问题讨论】:
-
如果您想复制一行,那么为什么不使用 INSERT .. SELECT?
标签: postgresql insert primary-key default rowtype