问题标签 [postgresql-triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
45 浏览

postgresql - 插入postgresql后如何卷曲网站?

我想在插入的值大于 51 后卷曲网站,是否可以仅使用 postgresql 查询/触发器来完成,或者有更好的方法吗?

curl "example.com"当插入的值大于 51 时,我很难使用触发器执行批处理文件并执行它,但我不确定这是否是最佳解决方案。

0 投票
0 回答
10 浏览

limit - 如何限制一个触发器在postgresql中每小时可以触发的次数?

当 table1 中插入的值大于 51 时,我有一个触发器在 table2 上插入新行:

我想知道如何防止触发器或函数每小时运行超过 N 次。

0 投票
1 回答
41 浏览

postgresql - Postgres:如果列在 INSERT 或 UPDATE 语句中,则从触发器引发异常

我想使用触发器审核 PostgreSQL 表中的 created_by、created_timestamp、modified_by 和 modified_timestamp 列。创建 BEFORE INSERT 和 BEFORE UPDATE 触发器以将这些值设置为 current_user 和 now() 相当简单。

但是,如果有人试图这样做:

我宁愿抛出一个异常,例如“不允许在 INSERT 查询中手动设置 created_by。”而不是让触发器静默地将 'someOtherUser' 更改为 current_user。

我想我可以通过以下方式在触发器中完成此操作:

这对 INSERT 查询和触发器按预期工作。

但是,对 UPDATE 触发器使用相同的策略,我发现它有点困难,因为除了 UPDATE 查询中的更改值之外,NEW 记录还具有来自现有行的未更改值。(至少,我认为这就是正在发生的事情。)

我可以将 new.created_by 与 old.created_by 进行比较以确保它们相同,从而防止查询更改值,但即使最终结果相似(即表中的值没有改变),这实际上与根本不允许列在 UPDATE 查询中是不一样的。

是否有一种优雅的方法来确定 INSERT 或 UPDATE 查询中是否存在列?我在这里看到了一些转换为 JSON 并以这种方式进行测试的建议,但这对我来说似乎是一个相当丑陋的解决方案。

是否有其他解决方案来确保这些列(created_by、created_timestamp 等)仅由触发器函数设置,并且不能在 INSERT 和 UPDATE 查询中手动设置?

0 投票
1 回答
56 浏览

sql - 插入触发器来操作现有行的时间戳

我有一张有 2 个日期列的表格

我想在插入exp_date具有相同内容的新行时更新现有行的,旧行的 将在新行的前一天。或值都不会在插入查询中codeexp_dateeff_dateeff_dateexp_date

例如:

ID 代码 eff_date 过期日期
1 12345 2021-01-31 2021-02-27
2 12345 2021-02-28 2021-03-30
3 12345 2021-03-31 2021-04-29
4 12345 2021-04-30 2021-05-30
5 12345 2021-05-31 2025-12-31

在此表中,我们希望通过检查最新的现有行(最新的)并将其更新到新行的前一天来更新id=1行插入行的时间。id=2eff_dateexp_dateeff_date

exp_dateforid=1将成为2021-02-27因为eff_date新的 row is 2021-02-28

这可以通过插入触发器来完成吗?

0 投票
1 回答
24 浏览

sql - 如何从“BEFORE TRIGGER”内部在远程 postgres 服务器中执行相同的查询

我计划在从插入、更新和删除触发器之前在本地服务器上执行查询时,在远程数据库服务器上运行完全相同的查询。

我的用例是这样的:

  1. 使用 db_link 连接远程服务器
  2. 想要在本地服务器中进一步处理之前对远程服务器执行相同的查询。

您可能会告诉我在新查询中使用 OLD 和 NEW 对象来格式化数据,但我在 UPDATE 和 DELETE 查询中有一种情况,因为我们正在使用 WHERE 子句,这并不一致,因为我们将使用哪个列来执行操作未知,例如

还有另一种可能

现在的问题是如何在触发器中访问这个完整的查询以在远程服务器上运行相同的查询

0 投票
2 回答
51 浏览

postgresql - Postgres 触发器在类似的派生表上插入更新删除

描述:

  • 我在跑步postgresql 13
  • 我有两个不同架构下的表,t1并且t2.
  • t2从某种意义上t1说,它们共享所有相同的列和数据,但t2始终处于t1有效性的下游。
  • 两个表中的行共享相同的主键,我假设这将用作它们之间的链接。

问:

  • 我想创建一个触发器来反映任何变化t1并且同步t2是相同的。
  • 我从INSERTor开始UPDATE,但如果DELETE很容易添加,我也想实现它。

触发代码:

当我执行此代码并对 进行测试UPDATEt1,同一行t2不会反映更改或给我任何错误。

我试过了:

  • 离散地将所有行标记为使用NEW.格式更新,但遇到主键列不可编辑的问题t2
  • WHERE在子句之后添加一个子句VALUES,类似于WHERE primary_key=NEW.primary_key,但出现错误。
  • 我看到的另一个选择是IF在 之前添加一个语句 INSERT,或者WHEN在触发器中添加一个子句,但都没有奏效。