在 PostgreSQL 数据库表中,我需要复制上个月的记录块,更改某些列中的值,并将更新的记录附加到表中。详细信息包括:
- 键
id
配置nextval
为自动创建唯一键值 - 目标记录
'200814'
在group_tag
- 新记录需要
'200911'
在group_tag
- 其他几个字段需要更新,如
SELECT
到目前为止我的脚本:
INSERT INTO hist.group_control(
id,
group_tag,
process_sequence,
state,
cbsa_code,
window_starts_on,
preceding_group,
preceding_origin,
preceding_window_starts_on
)
SELECT id,
'200911',
1,
state,
cbsa_code,
'2020-09-11',
'200814',
preceding_origin,
'2020-08-14'
FROM hist.group_control WHERE group_tag='200814';
这会产生一个错误:
SQL Error [23505]: ERROR: duplicate key value violates unique constraint "group_control_pkey"
Detail: Key (id)=(12250) already exists.
键值最多13008
存在的记录。我本来希望nextval
确定这一点并将id
值从13009
. 我试图简单地不包括id
在认为该nextval
函数会自动运行的语句中,但这也出错了。由于各自的错误,以下变体无效:
alter sequence group_control_id_seq restart with 13009;
SQL Error [42501]: ERROR: must be owner of relation group_control_id_seq
SELECT setval('group_control_id_seq', 13009, true);
SQL Error [42501]: ERROR: permission denied for sequence group_control_id_seq
任何人都知道如何编写主语句以不生成重复键,或者如何告诉nextval
从值开始13009