小编Guy*_*y s的帖子

PL/pgSQL执行vs执行

在PL/pgSQL上执行和执行有什么区别?

从手册:

有时,评估表达式或SELECT查询但丢弃结果很有用,例如在调用具有副作用但没有有用结果值的函数时.要在PL/pgSQL中执行此操作,请使用PERFORM语句.

但是,当我尝试这样的事情时:

perform 'create table foo as (select 1)';
Run Code Online (Sandbox Code Playgroud)

什么都没发生.虽然此查询应该有副作用(创建表),但结果可以被丢弃.

我想我有一件事是正确的:为了运行我可以使用的函数:

perform pg_temp.addInheritance(foo);
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql

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

循环遍历PL/pgSQL中给定的值列表

我正在尝试遍历几个字段并在它们上运行一个函数:

FOR field IN ARRAY['f1','f2'] LOOP
    execute pg_temp.converFieldToLower(newTableNameRaw,field)
END LOOP;
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试使用的功能:

CREATE OR REPLACE FUNCTION pg_temp.converFieldToLower(t varchar, f varchar) RETURNS void AS $$
#variable_conflict use_variable
BEGIN
  EXECUTE concat_ws (' ', 'UPDATE',t,'SET',f,'= LOWER(',f,')');
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

看起来这不是声明数组的正确方法,我做错了什么?

ERROR:  syntax error at or near "ARRAY"
LINE 49:         FOR field IN ARRAY['f1','f2'] LOOP
Run Code Online (Sandbox Code Playgroud)

arrays postgresql loops plpgsql

6
推荐指数
2
解决办法
5314
查看次数

ValueError:要解压的值太多 - 是否可以忽略一个值?

以下行返回错误:

self.m, self.userCodeToUserNameList, self.itemsList, self.userToKeyHash, self.fileToKeyHash = readUserFileMatrixFromFile(x,True)
Run Code Online (Sandbox Code Playgroud)

该函数实际返回6个值.但在这种情况下,最后一个是无用的(无).所以我只想存储5个.

是否可以忽略最后一个值?

python

4
推荐指数
2
解决办法
1687
查看次数

Postgres“第一个”聚合函数

我正在使用文件 ID 字段聚合一个表。每个文件都有一个与一个(他的)文件 ID 完全匹配的名称。

select file_key, min(fullfilepath)
from table
group by file_key 
Run Code Online (Sandbox Code Playgroud)

因为我知道表的结构,所以我知道我需要任何完整文件路径。最小值和最大值都可以,但是需要很多时间。

我遇到了这个返回第一个值的聚合函数。不幸的是,这个函数需要很长时间,因为它会扫描整个表。例如,这非常慢:

select first(file_id) from table;
Run Code Online (Sandbox Code Playgroud)

最快的方法是什么?有或没有聚合功能。

postgresql aggregate-functions

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