plpgsql相关内容

PostgreSQL IF 语句

如何在 Postgres 中进行此类查询? IF (select count(*) from orders) >0然后从订单中删除别的INSERT INTO 订单值 (1,2,3); 解决方案 DO$做$开始如果存在(从订单中选择) THEN从订单中删除;别的插入订单值 (1,2,3);万一;结尾$做$ 标准 SQL 中没有过程元素.IF 语句 是默认过程语言 PL/pgSQL 的一部分. ..
发布时间:2021-12-05 21:48:15 其他开发

有没有办法在 Postgres 中禁用函数重载

我和我的用户不使用 PL/pgSQL 中的函数重载.每个(模式,名称)元组总是有一个函数.因此,我们只想按名称删除函数,更改其签名而不必先删除它,等等.例如,考虑以下函数: 创建或替换函数 myfunc(day_number SMALLINT)退货表(a INT)作为$BODY$开始返回查询(SELECT 1 as a);结尾;$BODY$语言 plpgsql; 为了节省时间,我们想如下调用它 ..
发布时间:2021-12-05 21:42:25 其他开发

在 PostgreSQL 中动态生成交叉表的列

我正在尝试在 PostgreSQL 中创建 crosstab 查询,以便它自动生成 crosstab 列而不是对其进行硬编码.我编写了一个函数,可以动态生成crosstab 查询所需的列列表.想法是使用动态 sql 替换 crosstab 查询中此函数的结果. 我知道如何在 SQL Server 中轻松完成此操作,但我对 PostgreSQL 的有限了解阻碍了我的进步.我正在考虑将生成列的动 ..
发布时间:2021-12-05 21:41:24 其他开发

多次调用带有数组参数的集合返回函数

这是的变体返回多列的 plpgsql 函数被多次调用.但是,我希望找到针对我的特定情况的解决方案. 我有一个函数,它处理带有给定参数的行数组,并返回一组行 + 一个新列. CREATE OR REPLACE foo(data data[], parameter int) RETURNS SETOF Enhanceddata AS... 该函数适用于只有一组数据的测试用例 SELECT ..
发布时间:2021-12-05 21:37:01 其他开发

Postgres 动态查询功能

我需要创建一个函数来运行查询并返回结果,表名和列名是函数的参数.我目前有这个: CREATE OR REPLACE FUNCTION qa_scf(tname 字符变化,cname 字符变化)返回 SETOF INT AS$BODY$开始RETURN QUERY SELECT * FROM tname WHERE cname !='AK' AND cname!='CK';结尾;$BODY$语言 ..
发布时间:2021-12-05 21:36:54 其他开发

正则表达式或 LIKE 模式的转义函数

放弃阅读整个问题,我的基本问题是: PostgreSQL 中是否有转义字符串中正则表达式字符的函数? 我已经浏览了文档,但找不到这样的功能. 这里是完整的问题: 在 PostgreSQL 数据库中,我有一列包含唯一名称.我还有一个进程会定期将名称插入到该字段中,并且为了防止重复,如果需要输入一个已经存在的名称,它会在末尾附加一个空格和带有计数的括号. 即姓名、姓名(1)、 ..
发布时间:2021-12-05 21:36:30 其他开发

如何在 PostgreSQL 中进行大型非阻塞更新?

我想对 PostgreSQL 中的表进行大量更新,但我不需要在整个操作中维护事务完整性,因为我知道我正在更改的列不会被写入或在更新期间阅读.我想知道是否有一种简单的方法 在 psql 控制台中 可以使这些类型的操作更快. 例如,假设我有一个名为“orders"的表,有 3500 万行,我想这样做: UPDATE 命令 SET status = null; 为了避免被转移到离题的讨论中,让 ..
发布时间:2021-12-05 21:30:27 其他开发

使用 PL/pgSQL 在 PostgreSQL 中返回多个字段作为记录

我正在编写一个 SP,使用 PL/pgSQL. 我想返回一个记录,由几个不同表中的字段组成.可能看起来像这样: CREATE OR REPLACE FUNCTION get_object_fields(name text)返回记录为 $$开始-- 从表 t1 中获取字段 f1、f2 和 f3-- 从表 t2 中获取字段 f4、f5-- 从表 t3 中获取字段 f6、f7 和 f8-- 将字段 ..
发布时间:2021-12-05 21:30:18 其他开发

PL/pgSQL 检查一行是否存在

我正在 PL/pgSQL 中编写一个函数,我正在寻找检查一行是否存在的最简单方法. 现在我正在选择一个 integer 到一个 boolean 中,这并不真正起作用.我对 PL/pgSQL 还没有足够的经验,不知道这样做的最佳方法. 这是我的部分功能: DECLARE person_exists boolean;开始person_exists := FALSE;SELECT "perso ..
发布时间:2021-12-05 21:28:50 其他开发

PostgreSQL:错误:42601:返回“记录"的函数需要列定义列表

据我所知,我的函数与我见过的样本非常相似.有人能告诉我如何让它工作吗? 创建或替换函数 get_user_by_username(用户名 varchar(250),在线布尔值) 将记录集返回为 $$申报结果记录;开始如果在线那么更新用户设置 last_activity = current_timestamp其中 user_name = 用户名;万一;返回查询选择用户身份,用户名,最后一个活动,创 ..

GROUP BY 和聚合顺序数值

使用 PostgreSQL 9.0. 假设我有一个包含以下字段的表:company、profession 和 year.我想返回一个结果,其中包含唯一的公司和专业,但根据数字序列聚合(到数组中很好)年份: 示例表: +-----------------------------+|公司 |职业 |年 |+---------+------------+------+|谷歌 |程序员 |2 ..

将表名和列名定义为 plpgsql 函数中的参数?

它一定很简单,但我正在迈出 Postgres 函数的第一步,但我找不到任何有效的东西... 我想创建一个函数来修改表和/或列,但我找不到在函数中将表和列指定为参数的正确方法. 类似于: CREATE OR REPLACE FUNCTION foo(t table)返回无效作为 $$开始更改表 t 添加列 c1 varchar(20);更改表 t 添加列 c2 varchar(20); ..
发布时间:2021-12-05 21:15:46 其他开发

截断 Postgres 数据库中的所有表

我经常需要在重建之前从我的 PostgreSQL 数据库中删除所有数据.我将如何直接在 SQL 中执行此操作? 目前我已经设法想出了一个返回我需要执行的所有命令的 SQL 语句: SELECT '截断表' ||表名 ||';'FROM pg_tables WHERE tableowner='MYUSER'; 但是一旦我有了它们,我就看不到以编程方式执行它们的方法. 解决方案 Fr ..
发布时间:2021-12-05 21:09:27 其他开发

PL/pgSQL 中的“$$"有什么用

对 PL/pgSQL 完全陌生,this 中的双美元符号是什么意思功能: 创建或替换功能 check_phone_number(text)返回布尔值 AS $$开始如果不是 $1 ~ e'^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$' THENRAISE EXCEPTION '格式错误的字符串“%".预期格式为 +999 999';万一;返回真;结尾;$$ 语言 plpg ..
发布时间:2021-12-05 21:07:36 其他开发