Skip to content
This repository was archived by the owner on Sep 24, 2019. It is now read-only.

Commit 82b096a

Browse files
committed
rake task to load fixtures with pg/heroku issue
1 parent 9ea8a3d commit 82b096a

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

lib/tasks/load_fixtures.rake

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# weird issue with heroku + postgres referential integrity
2+
# http://pvcarrera.github.io/general/2016/02/15/rails-fixtures-and-referencial-integrity.html
3+
4+
namespace :db do
5+
desc 'Reset and populate sample data'
6+
task load_swapi_fixtures: [:reset, :drop_constraints, 'fixtures:load', :create_constraints] do
7+
puts 'Fixtures loaded in the database'
8+
end
9+
10+
desc 'Remove all database constraints'
11+
task drop_constraints: [:environment, :create_constraints_script, :drop_constraints_script] do
12+
ActiveRecord::Base.connection.execute(IO.read('tmp/drop_constraints.sql'))
13+
puts 'Constraints dropped'
14+
end
15+
16+
desc 'Recreate database constraints'
17+
task create_constraints: [:environment, :create_constraints_script, :drop_constraints_script] do
18+
ActiveRecord::Base.connection.execute(IO.read('tmp/create_constraints.sql'))
19+
puts 'Constraints recreated'
20+
end
21+
22+
file drop_constraints_script: :environment do
23+
query = (<<-SQL)
24+
SELECT 'ALTER TABLE "'||nspname||'"."'||relname||'" DROP CONSTRAINT "'||conname||'";'
25+
FROM pg_constraint
26+
INNER JOIN pg_class ON conrelid=pg_class.oid
27+
INNER JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace
28+
ORDER BY CASE WHEN contype='f' THEN 0 ELSE 1 END,contype,nspname,relname,conname
29+
SQL
30+
array_to_file(ActiveRecord::Base.connection.execute(query), 'drop_constraints.sql')
31+
end
32+
33+
file create_constraints_script: :environment do
34+
query = (<<-SQL)
35+
SELECT 'ALTER TABLE "'||nspname||'"."'||relname||'" ADD CONSTRAINT "'||conname||'" '|| pg_get_constraintdef(pg_constraint.oid)||';'
36+
FROM pg_constraint
37+
INNER JOIN pg_class ON conrelid=pg_class.oid
38+
INNER JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace
39+
ORDER BY CASE WHEN contype='f' THEN 0 ELSE 1 END DESC,contype DESC,nspname DESC,relname DESC,conname DESC
40+
SQL
41+
array_to_file(ActiveRecord::Base.connection.execute(query), 'create_constraints.sql')
42+
end
43+
44+
def array_to_file(array, file_name)
45+
Dir.mkdir('tmp') unless File.exist?('tmp')
46+
File.open("tmp/#{file_name}", 'w+') do |f|
47+
f.puts(array.values.flatten)
48+
end
49+
end
50+
end

0 commit comments

Comments
 (0)