10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/data_migrations/setup.rb', line 10
def install_upsert
ActiveRecord::Base.connection.execute " CREATE FUNCTION upsert (sql_update TEXT, sql_insert TEXT)\n RETURNS VOID\n LANGUAGE plpgsql\n AS $$\n BEGIN\n LOOP\n -- first try to update\n EXECUTE sql_update;\n -- check if the row is found\n IF FOUND THEN\n RETURN;\n END IF;\n -- not found so insert the row\n BEGIN\n EXECUTE sql_insert;\n RETURN;\n EXCEPTION WHEN unique_violation THEN\n -- do nothing and loop\n END;\n END LOOP;\n END;\n $$;\n sql\nrescue ActiveRecord::StatementInvalid\n # ignore duplicate installs\nend\n"
|