aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-12-19 17:32:26 +0100
committerLuc Donnet2017-12-21 15:32:42 +0100
commitcf3dcfb4f6349b091c2ac3159cb20df0baafa897 (patch)
treed9dd34bb3a29848a3d4c121e737e18401d36408e
parentbb79de10b08161586dec9118354b1a153e2c67fd (diff)
downloadchouette-core-cf3dcfb4f6349b091c2ac3159cb20df0baafa897.tar.bz2
Add `down` to 20171218174509 Hstore to JSON migration
Copy Cédric's JSON to Hstore migration for the `down` here to give us the ability to roll back. I'm guessing the solution probably comes from here: https://stackoverflow.com/questions/28315948/casting-json-to-hstore-in-postgres-9-3/28319295#28319295 Refs #5316
-rw-r--r--db/migrate/20171218174509_change_compliance_control_compliance_check_control_attributes_format_from_hstore_to_json.rb25
1 files changed, 24 insertions, 1 deletions
diff --git a/db/migrate/20171218174509_change_compliance_control_compliance_check_control_attributes_format_from_hstore_to_json.rb b/db/migrate/20171218174509_change_compliance_control_compliance_check_control_attributes_format_from_hstore_to_json.rb
index ec5a95ec9..0576dddf2 100644
--- a/db/migrate/20171218174509_change_compliance_control_compliance_check_control_attributes_format_from_hstore_to_json.rb
+++ b/db/migrate/20171218174509_change_compliance_control_compliance_check_control_attributes_format_from_hstore_to_json.rb
@@ -1,5 +1,5 @@
class ChangeComplianceControlComplianceCheckControlAttributesFormatFromHstoreToJson < ActiveRecord::Migration
- def change
+ def up
change_column :compliance_controls,
:control_attributes,
'json USING hstore_to_json(control_attributes)'
@@ -7,4 +7,27 @@ class ChangeComplianceControlComplianceCheckControlAttributesFormatFromHstoreToJ
:control_attributes,
'json USING hstore_to_json(control_attributes)'
end
+
+ def down
+ execute <<-SQL
+ CREATE OR REPLACE FUNCTION my_json_to_hstore(json)
+ RETURNS hstore
+ IMMUTABLE
+ STRICT
+ LANGUAGE sql
+ AS $func$
+ SELECT hstore(array_agg(key), array_agg(value))
+ FROM json_each_text($1)
+ $func$;
+ SQL
+
+ change_column :compliance_controls,
+ :control_attributes,
+ 'hstore USING my_json_to_hstore(control_attributes)'
+ change_column :compliance_checks,
+ :control_attributes,
+ 'hstore USING my_json_to_hstore(control_attributes)'
+
+ execute "DROP FUNCTION my_json_to_hstore(json)"
+ end
end