postgresql 8.4を使用して、関数を作成しようとしていますが、次のようになります。
CREATE OR REPLACE FUNCTION addorupdate( smallint, varchar(7) ) RETURNS void AS
$$
BEGIN
IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
UPDATE consist SET
master = $2
where slave = $1;
ELSE
INSERT INTO consist(slave, master) VALUES ( $2, $1 );
END IF;
END;
$$
LANGUAGE SQL;
ただし、次のように失敗します。
ERROR: syntax error at or near "IF"
LINE 4: IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN
...そして私はその理由を理解するのに多くの時間とカフェインを浪費していて、新鮮な目を持つ人を使って私を助けることができました。
私が何を達成しようとしているのかが明確でない場合:slavesは一意の値の列です。存在する場合は、現在のマスターで更新します。そうでない場合は、INSERTします。
更新: 言語をplpgsqlに変更し、次をスローするようになりました。
ERROR: language "plpgsql" does not exist
アップデート:
CREATE LANGUAGE plpgsql;
(:解決済み:)