我有一张包含数百万条记录的postgres表。现在,我想在该表中添加名为“time_modified”的新列,并在另一列“last_event_time”中添加值。运行迁移脚本需要很长时间,因此需要一个简单的解决方案才能在生产中运行。
答案 0 :(得分:1)
假设列是时间戳,您可以尝试:
alter table my_table add time_modified text;
alter table my_table alter time_modified type timestamp using last_event_time;
答案 1 :(得分:0)
我建议使用pg_sleep
函数,它在循环中的iteriation之间等待
这样就不会在your_table上调用独占锁定和其他锁定。
SELECT pg_sleep(seconds);
但执行时间很长
alter table my_table add time_modified timestamp;
CREATE OR REPLACE FUNCTION update_mew_column()
RETURNS void AS
$BODY$
DECLARE
rec record;
BEGIN
for rec in (select id,last_event_time from your_table) loop
update your_table set time_modified = rec.last_event_time where id = rec.id;
PERFORM pg_sleep(0.01);
end loop;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
并执行功能:
select update_mew_column();