相关疑难解决方法(0)

并联多个阵列

我的最后一个问题将数组传递给存储到postgres有点不清楚.现在,澄清我的目标:

我想创建一个Postgres存储过程,它将接受两个输入参数.一个将是一些数量的列表,例如(100, 40.5, 76),另一个将是一些发票的 列表('01-2222-05','01-3333-04','01-4444-08').之后我想使用这两个数字和字符列表并对它们做一些事情.例如,我想从这一组数字中取出每个金额,并将其分配给相应的发票.

在Oracle中类似的东西看起来像这样:

SOME_PACKAGE.SOME_PROCEDURE (
    789,
    SYSDATE,
    SIMPLEARRAYTYPE ('01-2222-05','01-3333-04','01-4444-08'), 
    NUMBER_TABLE (100,40.5,76),
    'EUR',      
    1, 
    P_CODE,
    P_MESSAGE);
Run Code Online (Sandbox Code Playgroud)

当然,这两种类型SIMPLEARRAYTYPE,并NUMBER_TABLE出现在靠前的DB定义.

arrays postgresql arraylist plpgsql set-returning-functions

14
推荐指数
2
解决办法
8679
查看次数

使用 JSON 参数的 Postgres 批量插入函数

这是plpgsqlpostgres的一个函数9.6。它尝试INSERT一行,如果插入没有失败(由于违反键约束),那么它会运行更多的命令。

CREATE FUNCTION foo(int, text, text)
  RETURNS void AS
$$
BEGIN
  INSERT INTO table1 (id, val1, val2) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING;
  IF FOUND THEN
    INSERT INTO table2 (table1_id, val1) VALUES ($1, $2);
    UPDATE table3 SET (val2, time) = ($3, now()) WHERE table1_id = $1;
  END IF;
END
$$
Run Code Online (Sandbox Code Playgroud)

这个函数处理单条记录,但如何修改它来处理一批数千条记录?

我找到了一个答案,它建议将 3 个函数参数中的每一个都设为数组。但是有没有办法做到这一点,我传递的参数更能代表记录在我的应用程序中的外观?

例如,理想的解决方案是我的应用程序代码调用select foo($1),其中参数$1对象JSON 数组,其中每个内部对象都是要插入的记录。

[ 
  { "id": "1", "val1": …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json plpgsql sql-insert

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