@@ -10,24 +10,62 @@ class Migration(migrations.Migration):
1010 ]
1111
1212 operations = [
13- migrations .AlterField (
14- model_name = "apiusagebucket" ,
15- name = "labels" ,
16- field = models .JSONField (default = dict ),
17- ),
18- migrations .AlterField (
19- model_name = "apiusageraw" ,
20- name = "labels" ,
21- field = models .JSONField (default = dict ),
22- ),
23- migrations .AlterField (
24- model_name = "featureevaluationbucket" ,
25- name = "labels" ,
26- field = models .JSONField (default = dict ),
27- ),
28- migrations .AlterField (
29- model_name = "featureevaluationraw" ,
30- name = "labels" ,
31- field = models .JSONField (default = dict ),
13+ migrations .SeparateDatabaseAndState (
14+ state_operations = [
15+ migrations .AlterField (
16+ model_name = "apiusagebucket" ,
17+ name = "labels" ,
18+ field = models .JSONField (default = dict ),
19+ ),
20+ migrations .AlterField (
21+ model_name = "apiusageraw" ,
22+ name = "labels" ,
23+ field = models .JSONField (default = dict ),
24+ ),
25+ migrations .AlterField (
26+ model_name = "featureevaluationbucket" ,
27+ name = "labels" ,
28+ field = models .JSONField (default = dict ),
29+ ),
30+ migrations .AlterField (
31+ model_name = "featureevaluationraw" ,
32+ name = "labels" ,
33+ field = models .JSONField (default = dict ),
34+ ),
35+ ],
36+ database_operations = [
37+ migrations .RunSQL (
38+ # Only alter the columns that are currently hstore.
39+ # See 0006_add_labels to understand why we are doing this.
40+ sql = """
41+ DO $$
42+ BEGIN
43+ FOR relname IN
44+ SELECT c.relname
45+ FROM pg_class c
46+ JOIN pg_attribute a ON a.attrelid = c.oid
47+ JOIN pg_type t ON a.atttypid = t.oid
48+ WHERE c.relname IN (
49+ 'app_analytics_apiusagebucket',
50+ 'app_analytics_apiusageraw',
51+ 'app_analytics_featureevaluationbucket',
52+ 'app_analytics_featureevaluationraw'
53+ )
54+ AND a.attname = 'labels'
55+ AND t.typname = 'hstore'
56+ LOOP
57+ EXECUTE format(
58+ 'ALTER TABLE %I
59+ ALTER COLUMN labels TYPE jsonb USING hstore_to_json(labels),
60+ ALTER COLUMN labels SET DEFAULT ''{}''::jsonb',
61+ relname
62+ );
63+ END LOOP;
64+ END
65+ $$;
66+ """ ,
67+ reverse_sql = "" ,
68+ ),
69+ ],
3270 ),
3371 ]
0 commit comments