If you do it frequently. You can write a function to do it for you.
You can do by two ways.
- Check first then insert or update.
CREATE OR REPLACE FUNCTION insert_test_table(int, timestamp, varchar)
RETURNS int AS
$BODY$
BEGIN
IF (EXISTS(SELECT id FROM test_table WHERE id = $1)) THEN
UPDATE test_table SET dt = $2, amt = $3 WHERE id = $1;
RETURN 2;
ELSE
INSERT INTO test_table (id, dt, amt) VALUES($1, $2, $3);
RETURN 1;
END IF;
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql;
- Use Exception:
CREATE OR REPLACE FUNCTION insert_test_table(int, timestamp, varchar)
RETURNS int AS
$BODY$
BEGIN
INSERT INTO test_table (id, dt, amt) VALUES($1, $2, $3);
RETURN 1;
EXCEPTION WHEN unique_violation THEN
BEGIN
UPDATE test_table SET dt = $2, amt = $3 WHERE id = $1;
RETURN 2
END;
END;
$BODY$
LANGUAGE plpgsql;
The second way maybe conflict with other unique constraint, so be careful.