在使用ANT执行下面显示的触发器代码时,我收到错误
org.postgresql.util.PSQLException: ERROR: unterminated quoted string at or near "' DECLARE timeout integer"
Position: 57
Run Code Online (Sandbox Code Playgroud)
我能够通过PGADmin(由postgres提供)和命令行实用程序"psql"成功执行以下代码并添加触发器功能但是在通过ANT执行时它每次都会失败
BEGIN TRANSACTION;
CREATE OR REPLACE FUNCTION sweeper() RETURNS trigger as '
DECLARE
timeout integer;
BEGIN
timeout = 30 * 24 * 60 * 60 ;
DELETE FROM diagnosticdata WHERE current_timestamp - teststarttime > (timeout * ''1 sec''::interval);
return NEW;
END;
' LANGUAGE 'plpgsql';
-- Trigger: sweep on diagnosticdata
CREATE TRIGGER sweep
AFTER INSERT
ON diagnosticdata
FOR EACH ROW
EXECUTE PROCEDURE sweeper();
END;
Run Code Online (Sandbox Code Playgroud) 我目前正在使用 Github 与基本的 Jenkins 集成(使用 Github 插件):每次我推送一些东西时,我的 Jenkins 测试都会被触发,并且状态会报告给 Github。
由于一些肮脏的原因(我知道根本原因在这里),我的测试可能会随机失败,然后向 Github 报告失败状态(这阻止了合并 PR 的可能性:这是预期的行为)。
您知道是否可以在不推送新提交的情况下重新启动测试吗?因为我知道如果我重新启动测试,它们就会通过。
提前致谢
我正在编写一个宏,它根据从Nagios服务器收到的警报作为电子邮件在数据库上创建票证.但是,我不能让宏在检查邮件时在无限循环中运行,因为它太资源太重而使我的桌面挂起.我需要找到一种方法只在收到新邮件时触发宏.
我在MSDN网站上查找了NewMail事件的内容,但我找不到任何连贯的内容.任何人都可以向我展示一些示例代码,以显示如何从新邮件事件中触发宏吗?
我正在使用PostgreSQL 9.1.我的数据库是结构化的,以便我的应用程序使用实际的表.对于每个表,都有历史表,仅存储更改历史记录.历史表包含相同的字段,实际表格和字段形成一些额外信息,例如.编辑时间.历史表仅由触发器处理.
我有两种触发器:
Before INSERT 触发器在创建表时向表添加一些额外信息(例如,create_time).Before UPDATE触发器和before DELETE触发器将旧值从实际表复制到历史表.问题是我想使用触发器来存储进行这些更改的用户的ID.而id我是来自php应用程序的id,而不是PostgreSQL用户id.
有没有合理的方法呢?
使用INSERT和UPDATE,可以只将id的额外字段添加到实际表中,并将用户id作为SQL查询的一部分传递给SQL.据我所知,这不适用于DELETE.
所有触发器的结构如下:
CREATE OR REPLACE FUNCTION before_delete_customer() RETURNS trigger AS $BODY$
BEGIN
INSERT INTO _customer (
edited_by,
edit_time,
field1,
field2,
...,
fieldN
) VALUES (
-1, // <- This should be user id.
NOW(),
OLD.field1,
OLD.field2,
...,
OLD.fieldN
);
RETURN OLD;
END; $BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud) 在SQL Server 2005中,有没有办法让触发器找出哪个对象负责触发触发器?我想用它来禁用一个存储的prodecure的触发器.
有没有其他方法只为当前事务禁用触发器?我可以使用以下代码,但如果我没有弄错,它也会影响并发事务 - 这将是一件坏事.
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我想避免在我的表中使用"NoTrigger"字段并执行a的技术NoTrigger = null,因为我希望保持表尽可能小.
我想避免触发器的原因是因为它包含对表的手动更新很重要的逻辑,但我的存储过程将处理这个逻辑.因为这将是一个高度使用的程序,我希望它快.
触发器会在服务器上产生额外的开销,因为它们会启动隐式事务.一旦执行了触发器,就会启动一个新的隐式事务,并且事务中的任何数据检索都将保留受影响表的锁定.
来自:http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1170220,00.html#trigger
尝试触发(触发)单击事件.它很容易在jQuery中做,但无法弄清楚如何设置事件的坐标并发送它们.
基本上,我需要在特定位置触发一次点击(在trigger()调用之前计算).
任何方式(在jQuery或其他方面)?
谢谢 -
我无法理解sql中存储过程和触发器之间的区别.如果有人能够善意向我解释这将是伟大的.
提前致谢
我经常看到它声明应该避免使用规则并使用触发器.我可以看到规则系统中的危险,但当然有规则的有效用途,对吧?这些是什么?
我出于一般兴趣而对此提出这个问题; 我对数据库不太熟悉.
例如,在过去我需要锁定某些数据,所以我做了类似这样的事情:
CREATE OR REPLACE RULE protect_data AS
ON UPDATE TO exampletable -- another similar rule for DELETE
WHERE OLD.type = 'protected'
DO INSTEAD NOTHING;
Run Code Online (Sandbox Code Playgroud)
然后,如果我想编辑受保护的数据:
START TRANSACTION;
ALTER TABLE exampletable DISABLE RULE protect_data;
-- edit data as I like
ALTER TABLE exampletable ENABLE RULE protect_data;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
我同意这是hacky,但在这种情况下我无法更改访问数据库的应用程序(甚至在它上面抛出错误).所以奖励积分查找原因,这是一个危险的/无效的使用规则系统的,但不是为什么,这是不好的设计.
当jquery.localscroll到达文档的某个点(div)时,我想触发一个事件.
让我们说我们从顶部div垂直滚动到第三个.当它到达那里时,动作就会触发.
我正在使用sql server 2008 R2.更具体地说,Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)2010年4月2日15:48:46版权所有(c)Windows NT 6.1上的Microsoft Corporation标准版(64位)(Build 7601:Service Pack 1) )(管理程序).我是sql server和procedures/triggers的新手.我有以下代码来创建一个触发器(它工作):
CREATE TRIGGER [dbo].[Insert_WithdrawalCodes]
ON [dbo].[PupilWithdrawalReason]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE [dbo].[PupilWithdrawalReason] SET DateCreated=dbo.SYSTEMTIME()
WHERE WithdrawalCodeID IN (SELECT WithdrawalCodeID FROM inserted)
END
Run Code Online (Sandbox Code Playgroud)
仅当触发器尚不存在时,如何有条件地创建?我在这做错了什么?Stackoverflow有很好的"如果不存在"的例子,但我不能让它与CREATE一起工作.这是我失败的努力之一:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'TR' AND name = 'Insert_WithdrawalCodes')
exec('CREATE TRIGGER [dbo].[Insert_WithdrawalCodes] ON [dbo].[PupilWithdrawalReason] AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE [dbo].[PupilWithdrawalReason] SET DateCreated=dbo.SYSTEMTIME() WHERE WithdrawalCodeID IN (SELECT WithdrawalCodeID FROM …Run Code Online (Sandbox Code Playgroud) triggers ×10
postgresql ×3
jquery ×2
sql ×2
sql-server ×2
t-sql ×2
ant ×1
click ×1
database ×1
function ×1
github ×1
if-statement ×1
javascript ×1
jenkins ×1
outlook ×1
outlook-vba ×1
plpgsql ×1
pull-request ×1
rules ×1
vba ×1
viewport ×1