我想在Postgresql中使用一个函数来获取与历史相关的最新ID:
CREATE TABLE "tbl_ids" (
"ID" oid,
"Name" text,
"newID" oid
);
创建这个简单的表后,我不知道从哪里开始我的功能,在你问之前:我知道COALESCE() - 函数,但是我将来会有更多的父ID。 ..
CREATE FUNCTION get_lastes_id(ID oid, newID oid) RETURNS oid AS $$
BEGIN
IF new IS NOT NULL THEN
--USE old--
END
IF new IS NULL THEN
get_latest_id(new, "newID")
END
END;
我必须说出来,因为无论如何你都会发现:我是Postgresql函数的新手,我甚至不确定这是否可行。但假设COALESCE() - 函数也存在,它必须是服务器端函数我想:/
答案 0 :(得分:0)
首先,目前尚不清楚你在问什么。 oid可能不是最好使用的类型,因为它们是为系统库设计的内部类型,因此你不能保证它们会以你期望的方式运行。
其次,如果您想使用递归来获取最新信息,那么在我看来这是一个糟糕的选择工具。如果您希望事情表现良好,请尝试在集合操作中思考,而不是考虑不确定的算法。
如果您想要一个触发器来获取名称的最新(最大)oid并将其分配给“newID”,那么:
CREATE OR REPLACE FUNCTION set_newID() RETURNS TRIGGER LANGUAGE PLPGSQL AS
$$
DECLARE maxid oid;
BEGIN
IF new."newID" IS NOT NULL THEN
RETURN new; -- do nothing
END IF;
SELECT max("ID") INTO maxid FROM tbl_ids WHERE "Name" = new."Name";
new."newID" = maxid;
RETURN new;
END;
$$;
适用于oid和int。但是,它必须在触发器修改的每一行上从数据库中选择一行,以便您在批量插入时遇到性能问题。
哦,使用全部小写更好,所以你不必引用每个标识符。