我想验证将触发器添加到某些表的数据库迁移的正确性。我正在使用sqitch,因此我想找到一种使用SQL查询进行检查的方法。我相信postgres系统表应该有可能,但是我目前找不到实现此目的的方法。
使用目录pg_trigger。
一个简单的表查询books
:
select tgname
from pg_trigger
where not tgisinternal
and tgrelid = 'books'::regclass;
tgname
---------------
books_trigger
(1 row)
使用pg_proc
得到触发功能的来源:
select tgname, proname, prosrc
from pg_trigger
join pg_proc p on p.oid = tgfoid
where not tgisinternal
and tgrelid = 'books'::regclass;
tgname | proname | prosrc
---------------+---------------+------------------------------------------------
books_trigger | books_trigger | +
| | begin +
| | if tg_op = 'UPDATE' then +
| | if new.listorder > old.listorder then +
| | update books +
| | set listorder = listorder- 1 +
| | where listorder <= new.listorder +
| | and listorder > old.listorder +
| | and id <> new.id; +
| | else +
| | update books +
| | set listorder = listorder+ 1 +
| | where listorder >= new.listorder +
| | and listorder < old.listorder +
| | and id <> new.id; +
| | end if; +
| | else +
| | update books +
| | set listorder = listorder+ 1 +
| | where listorder >= new.listorder +
| | and id <> new.id; +
| | end if; +
| | return new; +
| | end
(1 row)
pg_get_triggerdef()
函数用法示例:
select pg_get_triggerdef(t.oid) as "trigger declaration"
from pg_trigger t
where not tgisinternal
and tgrelid = 'books'::regclass;
trigger declaration
--------------------------------------------------------------------------------------------------------------
CREATE TRIGGER books_trigger BEFORE INSERT OR UPDATE ON books FOR EACH ROW EXECUTE PROCEDURE books_trigger()
(1 row)
在Sqitchverify
脚本中,您可以使用匿名代码块,例如:
do $$
begin
perform tgname
from pg_trigger
where not tgisinternal
and tgrelid = 'books'::regclass;
if not found then
raise exception 'trigger not found';
end if;
end $$;
问题内容: 我知道如何创建索引 以及如何检查索引是否已存在? 我需要检查它们的存在并创建它们(如果还不存在)。 问题答案: 您可以使用以下查询获取索引列表,它们的表和列: 从那里,您可以按索引名称或所涉及的列检查是否存在,并决定创建/跳过索引。
问题内容: 我目前正在处理我的付费应用程序中的特定问题。内部包含许可检查。黑客通过修改应用apk / jar对该应用进行了修补。他们正在添加一个新类,以帮助绕过许可检查。 我的目标是以某种方式检查此特定补丁。如果找到它,我知道我的应用程序已被盗用。 关于如何知道包装上的某些东西有任何提示吗? 在我看来,对应用程序进行哈希处理并不是一个真正的选择。 我认为也许检查此类是否存在会有所帮助,但是如果他们
问题内容: 我正在通过.NET应用程序中的ODBC驱动程序连接到Hive。是否存在查询以确定表是否已存在? 例如,在MSSQL中,您可以查询表,而在Netezza中,您可以查询表。 任何援助将不胜感激。 问题答案: 您可以通过两种方法进行检查: 1.)如@dimamah所建议,只需在此处添加一点,对于这种方法,您需要 2.)第二种方法是使用HiveMetastoreClient API,您可以在其
问题内容: 我对基于SQL Server 2000的旧应用程序进行了一些调整,不用说,我只想做绝对最小的操作,以免它可能会崩溃。 我有一个很大的用户表tbUsers,带有IsDeleted的BIT标志。我想将所有当前和将来的IsDeleted = 1个用户记录归档到我的归档表tbDeletedUsers中。 移动当前已删除的用户很简单,但是我想要一种方法来移动设置了IsDeleted标志的所有将来
问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即:
我需要帮助检查数据库中是否存在行。在我的例子中,该行包含一个电子邮件地址。我得到的结果是: 这是我目前使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的例子中,检查MySQL中是否存在电子邮件)?