· 8 years ago · Nov 29, 2017, 09:42 PM
1create table versions (
2 key text primary key,
3 version text );
4
5/* ### TAINT not sure whether there may be race conditions with this upsert trigger */
6create function on_before_insert_versions() returns trigger language plpgsql volatile as $$ begin
7 if exists ( select 1 from versions where key = new.key ) then
8 update versions set version = new.version where key = new.key;
9 return null;
10 end if;
11 return new;
12 end; $$;
13
14create trigger on_before_insert_versions
15 before insert on versions for each row execute procedure on_before_insert_versions();
16
17insert into versions values
18 ( 'server', '3.0.3' ),
19 ( 'api', '2' );
20
21insert into versions values
22 ( 'api', '3' );
23
24select * from versions;
25
26 key | version
27--------+---------
28 server | 3.0.3
29 api | 3