小编You*_*tan的帖子

计算PostgreSQL中的累积和

我想找到累积或运行的字段数量,并将其从分段插入表格.我的暂存结构是这样的:

ea_month    id       amount    ea_year    circle_id
April       92570    1000      2014        1
April       92571    3000      2014        2
April       92572    2000      2014        3
March       92573    3000      2014        1
March       92574    2500      2014        2
March       92575    3750      2014        3
February    92576    2000      2014        1
February    92577    2500      2014        2
February    92578    1450      2014        3          
Run Code Online (Sandbox Code Playgroud)

我希望我的目标表看起来像这样:

ea_month    id       amount    ea_year    circle_id    cum_amt
February    92576    1000      2014        1           1000 
March       92573    3000      2014        1           4000
April       92570    2000      2014        1           6000
February    92577    3000      2014 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql analytic-functions cumulative-sum window-functions

62
推荐指数
1
解决办法
6万
查看次数

执行postgreql函数时提交事务

我有Postgresql函数,它必须将大约150万个数据插入表中.我想要的是我希望看到每个记录插入填充表格.目前当我尝试使用大约1000条记录时会发生什么,只有在完成函数执行后才会填充get.如果我在中途停止功能,则不会填充任何数据.即使在插入了一定数量的记录后停止,我怎样才能提交记录?

postgresql function commit

17
推荐指数
3
解决办法
2万
查看次数

无法写入散列连接临时文件:设备上没有剩余空间

我正在执行PostgreSQL函数来更新具有大量数据的表,并且每天更新大约100000条记录.在更新期间,我收到一条错误消息:

"could not write to hash-join temporary file: No space left on device"
Run Code Online (Sandbox Code Playgroud)

我真的没能得到一些有用的东西来克服这个错误.我得到了一些东西,它说要设置临时表空间.但我无法找到如何创建临时表空间,在执行更新过程期间将存储数据.

对此的快速帮助将不胜感激.提前致谢.

postgresql performance space tablespace

11
推荐指数
1
解决办法
1万
查看次数

如何将输出参数传递给存储过程?

我用以下格式编写了一个存储过程:

ALTER PROCEDURE usp_data_migration 
   (@sourceDatabase varchar(50),
    @sourceTable varchar(50),
    @targetDatabase varchar(50),
    @targetTable varchar(50),
    @finaloutput varchar(max) output)
AS
BEGIN
----Set of SQL Blocks


END
Run Code Online (Sandbox Code Playgroud)

然后,我正在执行程序:

DECLARE @finaloutput1 varchar(300)

EXEC usp_data_migration 'Yousuf', 'emp', '[City Branch]', 'emp_tgt', @finaloutput1 output 

SELECT @finaloutput1 
Run Code Online (Sandbox Code Playgroud)

通过这种方式执行我没有正确的输出.

当我执行这种方式时:

DECLARE @finaloutput1 varchar(300)

EXEC usp_data_migration @sourceDatabase = 'Yousuf',
                        @sourceTable = 'emp',
                        @targetDatabase = '[City Branch]',
                        @targetTable = 'emp_tgt',
                        @finaloutput1 output 

SELECT @finaloutput1 
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息:

消息119,级别15,状态1,行41
必须将参数编号5和后续参数作为"@name = value"传递.在使用"@name = value"形式之后,必须以"@name = value"形式传递所有后续参数.

如果我删除了输出参数并执行了该过程,我得到了我想要的输出但是我无法将结果作为输出.

EXEC usp_data_migration @sourceDatabase = 'Yousuf',
                        @sourceTable = 'emp',
                        @targetDatabase …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server stored-procedures output-parameter output

8
推荐指数
2
解决办法
7万
查看次数

plpgsql函数内部的事务

我已经编写了一个自动化功能,如下所述,它根据一些规则调用其他一些功能.该函数给出了我想要的结果,但我面临的问题是它在内部处理每个函数后都没有提交数据.一旦主要功能完成,它就会提交整个数据.我想做一个内部事务,它应该在内部函数执行完成时提交数据.我尝试在每个PERFORM语句之后给出一个COMMIT语句,但是我收到一个错误,说"无法在PL/pgSQL中开始/结束事务".

任何人都可以建议我如何在函数内部进行事务处理.

CREATE OR REPLACE FUNCTION ccdb.fn_automation_for_updation()
  RETURNS void AS
$BODY$

DECLARE 
sec_col refcursor;
cnt integer;
sec_code ccdb.update_qtable%ROWTYPE;
new_cnt integer;

BEGIN

SELECT COUNT(*)
INTO cnt
FROM ccdb.update_qtable
WHERE status_flag IN (-1,1);

OPEN sec_col FOR
    SELECT * FROM ccdb.update_qtable WHERE status_flag IN (-1,1);

FOR i IN 1..cnt
LOOP

    FETCH sec_col INTO sec_code;

        PERFORM ccdb.o_dtr_update(sec_code.section_code);

        PERFORM ccdb.o_consumer_update_for_update(sec_code.section_code);

        PERFORM ccdb.o_consumer_update_for_insert(sec_code.section_code);

        PERFORM ccdb.o_bills_update_for_update(sec_code.section_code);

        PERFORM ccdb.o_bills_update_for_insert(sec_code.section_code);

        PERFORM ccdb.o_payments_update_for_update_new(sec_code.section_code);

        PERFORM ccdb.o_payments_update_for_insert(sec_code.section_code);

        PERFORM ccdb.o_payments_map_update_for_update(sec_code.section_code);

        PERFORM ccdb.o_payments_map_update_for_insert(sec_code.section_code);

        SELECT COUNT(*) INTO new_cnt FROM ccdb.update_qtable WHERE status_flag IN (-1,1);

        IF …
Run Code Online (Sandbox Code Playgroud)

postgresql transactions plpgsql

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

ROW_NUMBER() PARTITION BY ORDER BY 等效项的 DAX 表达式

我有一个这样的SQL语句:

(ROW_NUMBER() OVER (PARTITION BY a.[market], [MEASURE_TYPE] 
                    ORDER BY AM, REP, ORDER_KEY)) AS ORDER_KEY
Run Code Online (Sandbox Code Playgroud)

我想写一个DAX来实现上面的SQL语句。

sql row-number dax powerbi

6
推荐指数
1
解决办法
9656
查看次数

在PostgreSQL中使用月份名称进行排序

我有一个表有一个字段Month_Name,它包含月份的名称.我想按月名称排序,而不是按字母顺序排序,而是按照其实际顺序排序,例如1月,2月等.如何使用PostgreSQL实现此功能?

有什么方法可以将Month Name转换为其数值吗?

id        billed_unit    billed_amount    town_id    ea_month    ea_year    
3959920   3695.17        25856.84         CHRY     April         2014
3959920   3695.17        25856.84         CHRY     August        2014
3959920   3695.17        25856.84         CHRY     February      2014
3959920   3695.17        25856.84         CHRY     July          2014
3959920   3695.17        25856.84         CHRY     June          2014
3959920   3695.17        25856.84         CHRY     March         2014
Run Code Online (Sandbox Code Playgroud)

postgresql date sql-order-by

4
推荐指数
1
解决办法
4125
查看次数

如何用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
查看次数

如何在PostgreSQL中获取数据库中的函数列表及其参数?

我有一个拥有1000多个功能的数据库.我想授予某些用户执行权限.我无法手动完成,因此我想获得一个函数列表并编写代码以生成所有函数的GRANT EXECUTE脚本.我尝试了以下脚本,但这不是给我参数.我无法通过此查询获取参数.

SELECT  'GRANT EXECUTE ON FUNCTION '||nspname||'.'||proname||' TO gis;'
FROM    pg_catalog.pg_namespace n
JOIN    pg_catalog.pg_proc p
ON      pronamespace = n.oid
WHERE   nspname = 'ccdb'
Run Code Online (Sandbox Code Playgroud)

如何使用数据类型获得所需的结果?

喜欢,

GRANT EXECUTE ON FUNCTION <schema_name>.<table_name>(<list of arguments>) TO <user_name>;
Run Code Online (Sandbox Code Playgroud)

postgresql permissions function plpgsql

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

如何使用动态SQL获取值

我有一个查询如下,根据要求执行.

DECLARE @count varchar(20)
SET @count = (SELECT COUNT(*) FROM emp)
PRINT 'Employee Count: '+@count
SELECT @count
Run Code Online (Sandbox Code Playgroud)

但是,如果我想要使用动态SQL,我没有得到我想要的结果.我的动态SQL代码如下:

DECLARE @count varchar(10)
DECLARE @sqlQuery varchar(500)
SET @sqlQuery = 'SET '+@count +'= (SELECT COUNT(*) FROM emp)'
EXEC (@sqlQuery)
PRINT 'Employee Count: '+@count
SELECT @count
Run Code Online (Sandbox Code Playgroud)

这段代码给了我一个NULL作为输出.

应该做什么?可以帮我说一下我哪里出错了?

sql t-sql sql-server dynamic-sql

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

如何根据PostgreSQL中的当前季度查找上一季度的值?

我需要找到特定日期的上一季度的价值.例如,我在2015年1月12日通过了一个日期,我需要将结果作为2014年第四季度.

如果我使用下面的查询,我得到的结果为0

SELECT EXTRACT(quarter FROM '2015-01-01'::timestamp) - 1;

Result : 0
Run Code Online (Sandbox Code Playgroud)

有人能告诉我如何获得如上所述的理想结果吗?

postgresql datetime

0
推荐指数
1
解决办法
3408
查看次数