【发布时间】:2013-04-07 07:44:31
【问题描述】:
您好,在同一张表上复制数据库记录的最简单方法是什么?
我的问题是我正在执行此操作的表有很多列,例如 100+,我不喜欢解决方案的外观。这是我所做的(这是在 plpqsql 函数中): ...
1.重复记录
INSERT INTO history
(SELECT NEXTVAL('history_id_seq'), col_1, col_2, ... , col_100)
FROM history
WHERE history_id = 1234
ORDER BY datetime DESC
LIMIT 1)
RETURNING
history_id INTO new_history_id;
2。更新一些列
UPDATE history
SET
col_5 = 'test_5',
col_23 = 'test_23',
datetime = CURRENT_TIMESTAMP
WHERE history_id = new_history_id;
这是我试图解决的问题
- 列出所有这 100 多列看起来很糟糕
- 当最终添加新列时,函数也应该更新
- 在单独的数据库实例上,列顺序可能不同,这会导致函数失败
我不确定我是否可以像insert into <table> (<columns_list>) values (<query>) 一样再次列出它们(解决问题 3),但查询看起来更难看。
我想实现“插入”之类的东西,但这似乎不可能,唯一主键约束会引发重复错误。
有什么建议吗?
提前感谢您的宝贵时间。
【问题讨论】:
标签: postgresql plpgsql postgresql-9.0