扩展通常的插入或更新难题
我有一个提供正常 UPDATE 或 INSERT 的函数,它看起来像这样:
CREATE OR REPLACE FUNCTION updateslave ( varchar(7), smallint ) RETURNS void AS
$$
BEGIN
LOOP
UPDATE consist SET
master = $1,
time = now() WHERE slave = $2;
IF found THEN
RETURN;
END IF;
BEGIN
INSERT INTO consist(master, slave, time) VALUES ( $1, $2, now() );
RETURN;
EXCEPTION WHEN unique_violation THEN
-- do nothing, then loop and retry
END;
END LOOP;
END;
##
LANGUAGE plpgsql;
现在,问题是我正在尝试重写它以在不同的表中进行类似的操作。但是,不同的是,在另一个表中,没有单一的唯一列,而是两列的组合只存在于一行中。是否可以根据两列的组合来声明 unique_violation ?
为了使示例简单,我们假设该表看起来与我使用上述函数的表完全相同,但主从是两个共同产生唯一性的列:
Column | Type | Modifiers | Storage | Description
--------+-----------------------------+----------------------------------------------+----------+-------------
master | character varying(7) | not null default 'unused'::character varying | extended |
slave | smallint | not null | plain |
time | timestamp without time zone | default now() | plain |