plpgsql相关内容

快速从 Python 数组转换为 PostgreSQL?

这是一个后续问题:如何在 PostgreSQL 中转换为 int 数组? 我在想如何将 Python 的有符号整数数组数组的数据类型快速转换为 PostgreSQL 的 int : import numpy as np;# 这里使用Python的任何数据格式事件 = np.array([[1,2],[3,4]]); 如果手动,[] 应替换为 {} 并用 ' 包围.在 PostgreSQL 中 ..
发布时间:2022-01-01 21:22:08 Python

是否可以动态循环遍历表的列?

我有一个表测试的触发器函数,它具有以下代码片段: IF TG_OP='UPDATE' THEN如果 OLD.locked >0 与( OLD.org_id NEW.org_id 或OLD.document_code NEW.document_code 或-- 其他栏目...)然后提出异常“消息";-- 更多代码 所以我静态检查所有列的新值及其以前的值以确保完整性.现在每次我的业务逻辑 ..
发布时间:2022-01-01 21:20:48 其他开发

如何将记录传递给 PL/pgSQL 函数?

我有8个类似的PL/pgSQL函数;它们用作视图上的 INSTEAD OF INSERT/UPDATE/DELETE 触发器以使其可写.每个视图都组合了一个通用表(在下面的示例中称为“事物")和一个特殊表(下面的“shape_things"和“flavored_things")的列.顺便说一下,PostgreSQL 的继承特性不能用在我们的例子中. 触发器必须在通用表中插入/更新行;这些部分 ..
发布时间:2022-01-01 21:20:28 其他开发

当从另一个表中删除时,如何使 PostgreSQL 在表中插入一行?

我们有一个应用程序,它将根据用户请求从表中删除一行.我无法更改应用程序代码.但是,我想根据要删除的行的信息将一行插入另一个表(有点像日志日志),其中包含来自其他几个表的信息. 我如何在 PostgreSQL 中实现这一点? 解决方案 编写触发器函数.像这样: 创建或替换函数 trg_backup_row()返回触发 AS$BODY$开始插入其他_tblSELECT (OLD).*, ..
发布时间:2022-01-01 21:17:35 其他开发

PostgreSQL 更新触发器

我有一张桌子: CREATE TABLE 注释(gid 序列号非空,注释字符变化(250),the_geom 几何,"rotationAngle" 字符变化 (3) DEFAULT 0,CONSTRAINT annotations_pkey PRIMARY KEY (gid),约束强制执行_dims_the_geom 检查(st_ndims(the_geom)= 2),约束强制执行_srid_t ..
发布时间:2022-01-01 21:14:32 其他开发

在 PostgreSQL 触发器函数中使用 pg_notify

我正在尝试从 PostgreSQL 触发器函数发出通知.我可以成功使用 NOTIFY 命令,但我对 pg_notify 没有任何运气.即使我在从 psql 控制台调用 pg_notify 函数时收到通知,但从我的触发器函数调用该函数时我从未收到通知. 我的触发器函数的这个版本按预期工作.我有一个 Java 程序正在侦听“mymessage",它收到一个带有“由 NOTIFY 触发"负载的通知 ..
发布时间:2022-01-01 21:12:09 其他开发

使用动态字段名称触发

我在更新表上创建 PostgreSQL (9.3) 触发器时遇到问题.我想在循环中设置新值 EXECUTE 'NEW.'||字段名 ||':=''一些前置数据'' ||新的.'||字段名 ||';'; 其中 fieldName 是动态设置的.但是这个字符串引发错误 错误:“NEW"处或附近的语法错误 我该如何实现这一目标? 解决方案 我找到了一个可行的解决方案:触发器应该在插入/更 ..
发布时间:2022-01-01 21:05:48 其他开发

PL/pgSQL:更新触发器中 N 列的一般方法?

我正在尝试创建一个函数,该函数将采用通用表并将 N 列转换为大写.我没有运气找到解决此类问题的方法,但我提出了以下建议: 创建或替换函数uc_on_insert()返回触发器为$$宣布p_tbl varchar = TG_TABLE_NAME;p_sch varchar = TG_TABLE_SCHEMA;我 varchar;开始因为我在(选择列名来自 INFORMATION_SCHEMA.CO ..
发布时间:2022-01-01 20:55:14 其他开发

如何从 Postgres 事件触发器获取 SQL 文本

在标记 ALTER TABLE 上的 pgsql 事件触发器中,我想知道哪个表正在被更改. pg 变量不包括这一点,GET STACKED DIAGNOSTICS 公开的变量也不包括. 在变量可用的情况下,触发器函数本身是否有任何方法可以查看负责启动该函数的 SQL 命令的文本. 例如,如果 ALTER TABLE base1 ADD COLUMN col1 int; 分别负 ..
发布时间:2022-01-01 20:51:16 其他开发

插入访问 NEW 后触发 Postgres

我有一个非常简单的触发器: 创建或替换函数 f_log_datei()返回触发器为 $$开始插入日志 (aktion, tabelle, benutzer_id) VALUES(TG_OP, 'dateien', NEW.benutzer_id);结尾;$$ LANGUAGE 'plpgsql';在插入或更新或删除后创建触发器 log_datei日期对于每个语句执行程序 f_log_datei( ..
发布时间:2022-01-01 20:45:46 其他开发

如何在 PostgreSQL 8.2 中动态使用 TG_TABLE_NAME?

我正在尝试在 PostgreSQL 8.2 中编写一个触发器函数,它将动态使用 TG_TABLE_NAME 来生成和执行 SQL 语句.我可以找到 PostgreSQL 更高版本的各种示例,但由于某些要求,我卡在了 8.2 上.这是我的功能,它可以工作,但几乎不是动态的: CREATE OR REPLACE FUNCTION cdc_TABLENAME_function() RETURNS tr ..
发布时间:2022-01-01 20:43:41 其他开发

从 COPY 命令获取行数

从文件中复制数据时,您可以使用“命令标签"获取 psql 中的行数: db=# COPY t FROM '/var/lib/postgres/test.sql';复制 10 我需要行数,并希望避免表格中出现多余的 count(). 有没有办法直接在 PL/pgSQL 函数中从 COPY 获取这个计数? 据我所知没有,但也许我遗漏了什么? 对于 PostgreSQL 9.2.但是任 ..
发布时间:2021-12-30 16:20:58 其他开发

在 PostgreSQL 中每行只执行一次延迟触发器

我在表上有一个延迟的 AFTER UPDATE 触发器,设置为在更新某个列时触发.这是我用作计数器的整数类型. 我不是 100% 确定,但看起来如果我在事务期间将该特定列增加 100 次,触发器会在事务结束时排队并执行 100 次. 无论我将该列增加多少次,我都希望触发器每行只安排一次. 我能以某种方式做到这一点吗?或者,如果触发的触发器无论是否重复都必须排队,我可以在触发器的第 ..
发布时间:2021-12-26 21:13:59 其他开发

如果不存在,如何创建序列

我尝试使用 检查 Postgres (plpgsql) 中是否存在序列. 如果序列不存在,则创建序列.运行此代码两次导致异常: 序列...已经存在. 如果序列不存在,如何创建序列? 如果序列不存在,则不应写入任何消息,也不应发生错误,因此我无法在此问题的另一个答案中使用存储过程,因为如果序列存在,它每次都会将消息写入日志文件. 做$$开始SET search_path = ..
发布时间:2021-12-26 21:12:24 其他开发