Sql 是否使用批处理postgres将数据从表复制到表?
我有一个大表,需要将1亿行从它复制到另一个表。 我正在尝试以1小时的间隔批量复制此脚本:Sql 是否使用批处理postgres将数据从表复制到表?,sql,postgresql,transactions,Sql,Postgresql,Transactions,我有一个大表,需要将1亿行从它复制到另一个表。 我正在尝试以1小时的间隔批量复制此脚本: DO $$ DECLARE intervalStrart TIMESTAMP := '2019-07-01 00:00:00'::timestamp; intervalEnd TIMESTAMP; stopTime TIMESTAMP :='2019-07-25 00:00:00'::timestamp; BEGIN WHILE (intervalStrart<=stopTim
DO $$
DECLARE
intervalStrart TIMESTAMP := '2019-07-01 00:00:00'::timestamp;
intervalEnd TIMESTAMP;
stopTime TIMESTAMP :='2019-07-25 00:00:00'::timestamp;
BEGIN
WHILE (intervalStrart<=stopTime) LOOP
intervalEnd= intervalStrart + interval '1 hour';
RAISE NOTICE 'Time: %', intervalStrart;
INSERT INTO marketo.activities_copy(SELECT * from marketo.activities
WHERE activitydate>=intervalStrart and activitydate<=intervalEnd)
ON CONFLICT ON CONSTRAINT activities_copy_pkey
DO NOTHING;
intervalStrart=intervalEnd;
END LOOP;
END $$;
但当我检查复制表计数时,它仍然是0。看起来此脚本正在事务中执行,并且仅在最后提交。为什么会这样?
如何使它在每次迭代时都写入?结果表明,默认情况下,函数在它们自己的事务中工作。在PASGRESS 10中,没有办法在中间进行更改,尽管我们可以使用<代码>异常< /Cord>关键字来处理错误。在postgres 11中,有一些新功能程序支持提交。除非提交数据更改,否则无法从其他会话中看到该表上的更改。@BarbarosÖzhan,谢谢。如何在此处提交更改?我试图添加
BEGIN代码>插入前和提交代码>之后,但得到一个错误错误:语法错误在第10行:开始代码>不客气。我不知道plpgsql语法,但我想您可以尝试在end-loop
子句之前,在intervalStrart=intervalEnd之后放置commit代码>。将数据插入表时可能会出现问题,请尝试单独执行相同的插入脚本,并检查它是否正在插入correctly@Ajay,我检查过了,插入正确
NOTICE: Time: 2019-07-01 00:00:00
NOTICE: Time: 2019-07-01 01:00:00
NOTICE: Time: 2019-07-01 02:00:00
NOTICE: Time: 2019-07-01 03:00:00
...