相关疑难解决方法(0)

我应该在交易中包含SELECT吗?

使用数据库事务将多个更新分组时,我是否应该在事务中包含SELECT?例如,让我说:

  1. 得到一个记录
  2. 使用记录中的数据检查该记录的编辑权限
  3. 更新一些记录
  4. 更新一些其他记录

我应该在"获取记录"阶段之前开始交易,还是围绕更新?

我正在使用Postgres/Django,transaction.atomic()但我认为这不重要.

database django postgresql transactions

5
推荐指数
1
解决办法
128
查看次数

如何用PostgreSQL中的游标提高函数的性能?

我有两个嵌套游标的功能.外部光标从源获取客户的付款详细信息,并根据某些业务逻辑插入到目标中.内部光标接受每笔付款的付款细节,它一个接一个地发生.

付款表有大约125000行,大约335000行用于付款详细信息.所有这些行都将迁移到目标表.执行该功能需要两个多小时,数据库CPU使用率高达99%.
我正在使用PostgreSQL 9.2.

如何提高功能的性能?

我正在使用的代码:

CREATE OR REPLACE FUNCTION ccdb_dummy.o_payments1(a integer)
  RETURNS void AS
$BODY$
DECLARE
cursor_1  refcursor;
cursor_2  refcursor;
rowcount integer;
rowcount1 integer;
payment_no bigint;
query_1 character varying(250);
lc_cin_num bigint;
test character varying(50);
t_payments ccdb_stg.o_payments_stg%ROWTYPE;
t_payments_details ccdb_stg.o_payment_head_dtls_stg%ROWTYPE;

BEGIN
rowcount := 0;

open cursor_1 for select * from ccdb_stg.o_payments_stg WHERE section_code = a;

select count(1) into rowcount from ccdb_stg.o_payments_stg WHERE section_code = a;

for i IN 1..rowcount loop

fetch cursor_1 into t_payments;

payment_no= nextval('ccdb_stg.payments_seq');

select cin into lc_cin_num from …
Run Code Online (Sandbox Code Playgroud)

postgresql function plpgsql cursor database-performance

3
推荐指数
1
解决办法
2640
查看次数