web-dev-qa-db-ja.com

匿名のDOコードブロックのロールバックを停止しますか?

この匿名の [〜#〜] do [〜#〜] コード機能を使用してコードを実行しています。失敗すると、加えられたすべての変更が破棄され、データベースが開始前の状態にロールバックされることを確認しています。この機能を停止するにはどうすればよいですか?

1
Zeruno

トランザクション内にない限り、DO内でコミットできます。

create table foo (z double precision);

do language PLPGSQL $$
declare i int; 
begin 
  for i in 1 .. 12 loop 
    insert into foo values (sqrt(10-i)); 
    commit; 
  end loop; 
end;$$;
ERROR:  cannot take square root of a negative number
CONTEXT:  SQL statement "insert into foo values (sqrt(10-i))"
PL/pgSQL function inline_code_block line 1 at SQL statement
select count(*) from foo;

10

1
jjanes