相关疑难解决方法(0)

如何在PostgreSQL中创建临时函数?

我必须在数据库中执行循环.这只是一次性要求.执行该函数后,我现在正在删除该函数.

有没有什么好的方法来创建临时/一次性功能?

sql postgresql sql-function

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

plpgsql 错误:RETURN 在返回 void 的函数中不能有参数

我正在尝试提取与特定日期和 user_ids 对应的记录计数,这些记录在数据库中的下一个日期没有对应的 user_ids。这是我试图完成它的方式(使用 plpgsql 但不定义函数:

    DO
    $BODY$
    DECLARE
        a date[]:= array(select distinct start_of_period from monthly_rankings where balance_type=2);
        res int[] = '{}';
    BEGIN
        FOR i IN array_lower(a,1) .. array_upper(a,1)-1
        LOOP
            res:=array_append(res,'SELECT COUNT(user_id) from (select user_id from monthly_rankings where start_of_period=a[i] except select user_id from monthly_rankings where start_of_period=a[i+1]) as b');
                    i:=i+1;
            END LOOP;
            RETURN res;
        $BODY$ language plpgsql
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:无法检索结果:错误:RETURN 不能在返回 void LINE 11: RETURN res; 的函数中有一个参数。我是这种程序语言的新手,无法发现该函数返回 void 的原因。我确实将值分配给了变量,并且我声明了空数组,而不是 NULL 数组。是否有语法或更重要的推理错误?

sql syntax for-loop plpgsql postgresql-9.2

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

如何在不创建函数的情况下运行plpgsql?

我想在Postgres中以编程方式运行SQL,而无需创建函数。

原因:确保我的plpgsql可以事先工作,并且在将查询提交给函数之前先对其进行“解释分析”。

我是Postgres的新手,我认为这很简单。我找不到任何示例。也许不可能吗?下面的代码如何工作?

DO
$body$
DECLARE
  v_name_short VARCHAR;
BEGIN

v_name_short := 'test Account 1';

     RETURN QUERY
        SELECT 
            a.name_short, 
            a.name_long
        FROM enterprise.account a 
        WHERE 
            CASE WHEN v_name_short IS NOT NULL THEN
               LOWER(a.name_short) = LOWER(v_name_short)
            ELSE
               1 = 1   
            END;
END;
$body$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

同样,这里的目标是测试我的SQL,就像在这种情况下,我想确保我的CASE语句仍在使用我创建的索引(LOWER(name_short))。无论如何,我收到此错误消息:

错误:无法在非SETOF函数中使用RETURN QUERY

我要问的在Postgres中可能吗?如果没有,是否可以查询函数内部的分析计划?

postgresql plpgsql

5
推荐指数
3
解决办法
6124
查看次数

DO 脚本中的 PSQL 命令行参数

我有一个NewSchemaSafe.sql基于项目目录创建新模式的脚本;它是从 Windows 命令行调用的,如下所示:

for %%a in (.) do set this=%%~na
-- other stuff here
psql -U postgres -d SLSM -e -v v1=%this% -f "NewSchemaSafe.sql"
Run Code Online (Sandbox Code Playgroud)

NewSchemaSafe.sql 如下:

-- NewSchemaSafe.sql
-- NEW SCHEMA SETUP 
--    - checks if schema exists
--    - if yes, renames existing with current monthyear as suffix
-- NOTE: will always delete any schema with the 'rename' name (save_schema)
--       since any schema thus named must have resulted from this script 
--       on this date - …
Run Code Online (Sandbox Code Playgroud)

postgresql command-line plpgsql parameter-passing psql

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