masamune 0.12.0 → 0.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a12e8b8ce6cb92c5d551e9024053d50ff59f3cd6
4
- data.tar.gz: 72bdc252c7b9b6f9e787b211eae46bc3edb69358
3
+ metadata.gz: 0fa78c46b273926ab7d772334d589a4376532612
4
+ data.tar.gz: c95f3122a4c62bd3fa65f1f0bf4b16287917553e
5
5
  SHA512:
6
- metadata.gz: 96be3850b76ec158f8a13be46ec2a5108c9ec01f99987f0a9414602b4072b768e072b72906a28ac9b8aa101940ece9e0f1255c2bcf25bc6cdf2726d9c7783c36
7
- data.tar.gz: 31863312d8fdbbad89e1e0a57fcbbe51b754feca838891d1f02cefe09f547da431f6089e36e6dafc56aa20cabea8a4d0cec432b0c0b07e11c496714668388942
6
+ metadata.gz: 2c61a1654730091053886326dce2a53b313df2041040e5dba0c54c5699c39927eae80299bf4b50333ad1a700a8322144310c6fdb65d6022ab51a26b7cfee0e4a
7
+ data.tar.gz: baba5a9769d75196fcf35442084326e0d0c27ab22b71aaf2c4e31826c03953ea23c4b8e9e9af6b4234d0ef8910c22bb8783275405d09d173e6f617867ee3c193
@@ -120,7 +120,7 @@ module Masamune::Schema
120
120
  return [] if temporary?
121
121
  unique_constraints_map.map do |_, column_names|
122
122
  [column_names, short_md5(column_names)]
123
- end
123
+ end.uniq
124
124
  end
125
125
 
126
126
  # TODO: Add optional USING
@@ -129,7 +129,7 @@ module Masamune::Schema
129
129
  index_column_map.map do |_, column_names|
130
130
  unique_index = reverse_unique_constraints_map.key?(column_names.sort)
131
131
  [column_names, unique_index, short_md5(column_names)]
132
- end
132
+ end.uniq
133
133
  end
134
134
 
135
135
  def unique_columns
@@ -242,6 +242,11 @@ module Masamune::Schema
242
242
  inherit ? parent.reserved_column_ids : []
243
243
  end
244
244
 
245
+ # NOTE: postgres bigint is 8 bytes long
246
+ def lock_id
247
+ Integer('0x' + Digest::MD5.hexdigest(name)) % (1 << 63)
248
+ end
249
+
245
250
  private
246
251
 
247
252
  def stage_table_columns(parent, selected = [], inherit = true)
@@ -61,4 +61,6 @@ WHERE
61
61
  ;
62
62
  <%- end -%>
63
63
 
64
+ ANALYZE <%= target.name %>;
65
+
64
66
  COMMIT;
@@ -77,3 +77,8 @@ WHERE
77
77
  LIMIT 1
78
78
  ;
79
79
  $$ LANGUAGE SQL;
80
+
81
+ CREATE OR REPLACE FUNCTION ddl_advisory_lock()
82
+ RETURNS INTEGER IMMUTABLE AS $$
83
+ SELECT 35; -- EDEADLK - DDL deadlock would occur
84
+ $$ LANGUAGE SQL;
@@ -78,6 +78,10 @@ SELECT <%= row.insert_values.join(', ') %>
78
78
  WHERE NOT EXISTS (SELECT 1 FROM <%= target.name %> WHERE <%= row.insert_constraints.join(' AND ') %>);
79
79
  <%- end -%>
80
80
 
81
+ <%- if files.any? || target.insert_rows.any? -%>
82
+ ANALYZE <%= target.name %>;
83
+ <%- end -%>
84
+
81
85
  <% target.aliased_rows.each do |row| %>
82
86
  <%- row.natural_keys.each do |column| -%>
83
87
  CREATE OR REPLACE FUNCTION <%= row.name(column) %>
@@ -39,5 +39,7 @@ WHERE
39
39
  <%- end -%>
40
40
  ;
41
41
 
42
+ ANALYZE <%= target.stage_table.name %>;
43
+
42
44
  <%= target.bulk_upsert(target.stage_table, target) %>
43
45
  <%- end -%>
@@ -20,15 +20,15 @@
20
20
  -- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
  -- THE SOFTWARE.
22
22
 
23
- <%- target_stage = target.stage_table(suffix: Process.pid) %>
23
+ <%- target_stage = target.stage_table %>
24
+
25
+ SELECT pg_advisory_lock(<%= target_stage.lock_id %>);
24
26
 
25
27
  DROP TABLE IF EXISTS <%= target_stage.name %> CASCADE;
26
- CREATE TABLE IF NOT EXISTS <%= target_stage.name %> (LIKE <%= target.parent.name %> INCLUDING ALL);
28
+ DROP TABLE IF EXISTS <%= target_stage.name %>_tmp CASCADE;
27
29
 
28
- ALTER TABLE <%= target_stage.name %> ADD CONSTRAINT <%= target_stage.name %>_time_key_check <%= target_stage.constraints %>;
29
- <%- target.foreign_key_columns.each do |column| -%>
30
- ALTER TABLE <%= target_stage.name %> ADD CONSTRAINT <%= target_stage.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %>;
31
- <%- end -%>
30
+ CREATE TABLE IF NOT EXISTS <%= target.name %> (LIKE <%= target.parent.name %> INCLUDING ALL);
31
+ CREATE TABLE IF NOT EXISTS <%= target_stage.name %> (LIKE <%= target.parent.name %> INCLUDING ALL);
32
32
 
33
33
  INSERT INTO
34
34
  <%= target_stage.name %> (<%= target.insert_columns(source).join(', ') %>)
@@ -50,26 +50,46 @@ GROUP BY
50
50
  <%- end -%>
51
51
  ;
52
52
 
53
- <%- target.index_columns.each do |column_names, unique| -%>
54
- <%- index_name = "#{target_stage.name}_#{column_names.join('_')}_index" -%>
55
- CREATE <%= unique ? 'UNIQUE INDEX' : 'INDEX' %> <%= index_name %> ON <%= target_stage.name %> (<%= column_names.join(', ') %>);
56
- <%- end -%>
53
+ SELECT pg_advisory_lock(ddl_advisory_lock());
57
54
 
58
55
  BEGIN;
56
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
57
+
58
+ ALTER TABLE <%= target.name %> DROP CONSTRAINT IF EXISTS <%= target.name %>_time_key_check;
59
+ <%- target.foreign_key_columns.each do |column| -%>
60
+ <%- if column.reference_constraint -%>
61
+ ALTER TABLE <%= target.name %> DROP CONSTRAINT IF EXISTS <%= target.name %>_<%= column.name %>_fkey CASCADE;
62
+ <%- end -%>
63
+ <%- end -%>
64
+
65
+ <%- target.index_columns.each do |column_names, unique, id| -%>
66
+ <%- index_name = "#{target.name}_#{id}_index" -%>
67
+ DROP INDEX IF EXISTS <%= index_name %>;
68
+ <%- end -%>
59
69
 
60
- DROP TABLE IF EXISTS <%= target.name %>;
70
+ ALTER TABLE <%= target.name %> RENAME TO <%= target_stage.name %>_tmp;
61
71
  ALTER TABLE <%= target_stage.name %> RENAME TO <%= target.name %>;
62
72
 
63
73
  ALTER TABLE <%= target.name %> INHERIT <%= target.parent.name %>;
64
- ALTER TABLE <%= target.name %> ADD CONSTRAINT <%= target.name %>_time_key_check <%= target.constraints %> NOT VALID;
74
+ ALTER TABLE <%= target.name %> ADD CONSTRAINT <%= target.name %>_time_key_check <%= target.constraints %>;
65
75
  <%- target.foreign_key_columns.each do |column| -%>
66
- ALTER TABLE <%= target.name %> ADD CONSTRAINT <%= target.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %> NOT VALID;
76
+ <%- if column.reference_constraint -%>
77
+ ALTER TABLE <%= target.name %> ADD CONSTRAINT <%= target.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %> NOT VALID DEFERRABLE INITIALLY DEFERRED;
78
+ <%- end -%>
67
79
  <%- end -%>
68
80
 
69
- <%- target.index_columns.each do |column_names, unique| -%>
70
- <%- old_index_name = "#{target_stage.name}_#{column_names.join('_')}_index" -%>
71
- <%- new_index_name = "#{target.name}_#{column_names.join('_')}_index" -%>
72
- ALTER INDEX <%= old_index_name %> RENAME TO <%= new_index_name %>;
81
+ <%- target.index_columns.each do |column_names, unique, id| -%>
82
+ <%- index_name = "#{target.name}_#{id}_index" -%>
83
+ CREATE <%= unique ? 'UNIQUE INDEX' : 'INDEX' %> <%= index_name %> ON <%= target.name %> (<%= column_names.join(', ') %>);
73
84
  <%- end -%>
74
85
 
86
+ ANALYZE <%= target.name %>;
87
+
75
88
  COMMIT;
89
+
90
+ DROP TABLE IF EXISTS <%= target_stage.name %>_tmp CASCADE;
91
+ DROP TABLE IF EXISTS <%= target_stage.name %> CASCADE;
92
+
93
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
94
+
95
+ SELECT pg_advisory_unlock(<%= target_stage.lock_id %>);
@@ -37,3 +37,5 @@ ON
37
37
  <%= conditions.to_a.join(" AND\n ") %>
38
38
  <%- end -%>
39
39
  ;
40
+
41
+ ANALYZE <%= target.stage_table.name %>;
@@ -21,17 +21,15 @@
21
21
  -- THE SOFTWARE.
22
22
 
23
23
  <%- target_partition = target.partition_table(date) %>
24
- <%- target_stage = target_partition.stage_table(suffix: Process.pid) %>
24
+ <%- target_stage = target_partition.stage_table %>
25
+
26
+ SELECT pg_advisory_lock(<%= target_partition.lock_id %>);
25
27
 
26
28
  DROP TABLE IF EXISTS <%= target_stage.name %> CASCADE;
27
- CREATE TABLE IF NOT EXISTS <%= target_stage.name %> (LIKE <%= target.name %> INCLUDING ALL);
29
+ DROP TABLE IF EXISTS <%= target_partition.name %>_tmp CASCADE;
28
30
 
29
- ALTER TABLE <%= target_stage.name %> ADD CONSTRAINT <%= target_stage.name %>_time_key_check <%= target_stage.constraints %>;
30
- <%- target.foreign_key_columns.each do |column| -%>
31
- <%- if column.reference_constraint -%>
32
- ALTER TABLE <%= target_stage.name %> ADD CONSTRAINT <%= target_stage.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %>;
33
- <%- end -%>
34
- <%- end -%>
31
+ CREATE TABLE IF NOT EXISTS <%= target_stage.name %> (LIKE <%= target.name %> INCLUDING ALL);
32
+ CREATE TABLE IF NOT EXISTS <%= target_partition.name %> (LIKE <%= target.name %> INCLUDING ALL);
35
33
 
36
34
  INSERT INTO
37
35
  <%= target_stage.name %> (<%= target.insert_columns(source).join(', ') %>)
@@ -49,28 +47,46 @@ ON
49
47
  <%- end -%>
50
48
  ;
51
49
 
52
- <%- target.index_columns.each do |column_names, unique| -%>
53
- <%- index_name = "#{target_stage.name}_#{column_names.join('_')}_index" -%>
54
- CREATE <%= unique ? 'UNIQUE INDEX' : 'INDEX' %> <%= index_name %> ON <%= target_stage.name %> (<%= column_names.join(', ') %>);
55
- <%- end -%>
50
+ SELECT pg_advisory_lock(ddl_advisory_lock());
56
51
 
57
52
  BEGIN;
53
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
54
+
55
+ ALTER TABLE <%= target_partition.name %> DROP CONSTRAINT IF EXISTS <%= target_partition.name %>_time_key_check;
56
+ <%- target.foreign_key_columns.each do |column| -%>
57
+ <%- if column.reference_constraint -%>
58
+ ALTER TABLE <%= target_partition.name %> DROP CONSTRAINT IF EXISTS <%= target_partition.name %>_<%= column.name %>_fkey CASCADE;
59
+ <%- end -%>
60
+ <%- end -%>
61
+
62
+ <%- target_partition.index_columns.each do |column_names, unique, id| -%>
63
+ <%- index_name = "#{target_partition.name}_#{id}_index" -%>
64
+ DROP INDEX IF EXISTS <%= index_name %>;
65
+ <%- end -%>
58
66
 
59
- DROP TABLE IF EXISTS <%= target_partition.name %>;
67
+ ALTER TABLE <%= target_partition.name %> RENAME TO <%= target_partition.name %>_tmp;
60
68
  ALTER TABLE <%= target_stage.name %> RENAME TO <%= target_partition.name %>;
61
69
 
62
70
  ALTER TABLE <%= target_partition.name %> INHERIT <%= target.name %>;
63
- ALTER TABLE <%= target_partition.name %> ADD CONSTRAINT <%= target_partition.name %>_time_key_check <%= target_partition.constraints %> NOT VALID;
71
+ ALTER TABLE <%= target_partition.name %> ADD CONSTRAINT <%= target_partition.name %>_time_key_check <%= target_partition.constraints %>;
64
72
  <%- target.foreign_key_columns.each do |column| -%>
65
73
  <%- if column.reference_constraint -%>
66
- ALTER TABLE <%= target_partition.name %> ADD CONSTRAINT <%= target_partition.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %> NOT VALID;
74
+ ALTER TABLE <%= target_partition.name %> ADD CONSTRAINT <%= target_partition.name %>_<%= column.name %>_fkey FOREIGN KEY (<%= column.name %>) <%= column.reference_constraint %> NOT VALID DEFERRABLE INITIALLY DEFERRED;
67
75
  <%- end -%>
68
76
  <%- end -%>
69
77
 
70
- <%- target.index_columns.each do |column_names, unique| -%>
71
- <%- old_index_name = "#{target_stage.name}_#{column_names.join('_')}_index" -%>
72
- <%- new_index_name = "#{target_partition.name}_#{column_names.join('_')}_index" -%>
73
- ALTER INDEX <%= old_index_name %> RENAME TO <%= new_index_name %>;
78
+ <%- target_partition.index_columns.each do |column_names, unique, id| -%>
79
+ <%- index_name = "#{target_partition.name}_#{id}_index" -%>
80
+ CREATE <%= unique ? 'UNIQUE INDEX' : 'INDEX' %> <%= index_name %> ON <%= target_partition.name %> (<%= column_names.join(', ') %>);
74
81
  <%- end -%>
75
82
 
83
+ ANALYZE <%= target_partition.name %>;
84
+
76
85
  COMMIT;
86
+
87
+ DROP TABLE IF EXISTS <%= target_partition.name %>_tmp CASCADE;
88
+ DROP TABLE IF EXISTS <%= target_stage.name %> CASCADE;
89
+
90
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
91
+
92
+ SELECT pg_advisory_unlock(<%= target_partition.lock_id %>);
@@ -21,5 +21,5 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  module Masamune
24
- VERSION = '0.12.0'
24
+ VERSION = '0.12.1'
25
25
  end
@@ -127,6 +127,8 @@ describe Masamune::Transform::BulkUpsert do
127
127
  user_dimension.start_at IS NULL
128
128
  ;
129
129
 
130
+ ANALYZE user_dimension;
131
+
130
132
  COMMIT;
131
133
  EOS
132
134
  end
@@ -191,6 +193,8 @@ describe Masamune::Transform::BulkUpsert do
191
193
  user_dimension_ledger.start_at IS NULL
192
194
  ;
193
195
 
196
+ ANALYZE user_dimension_ledger;
197
+
194
198
  COMMIT;
195
199
  EOS
196
200
  end
@@ -212,6 +212,8 @@ describe Masamune::Transform::DefineTable do
212
212
  CREATE INDEX visits_file_fact_stage_d5d236f_index ON visits_file_fact_stage (user_agent_type_version);
213
213
  CREATE INDEX visits_file_fact_stage_5a187ed_index ON visits_file_fact_stage (feature_type_name);
214
214
  CREATE INDEX visits_file_fact_stage_6444ed3_index ON visits_file_fact_stage (time_key);
215
+
216
+ ANALYZE visits_file_fact_stage;
215
217
  EOS
216
218
  end
217
219
 
@@ -240,6 +240,8 @@ describe Masamune::Transform::DefineTable do
240
240
  INSERT INTO user_table (name)
241
241
  SELECT 'active'
242
242
  WHERE NOT EXISTS (SELECT 1 FROM user_table WHERE name = 'active');
243
+
244
+ ANALYZE user_table;
243
245
  EOS
244
246
  end
245
247
  end
@@ -314,6 +316,8 @@ describe Masamune::Transform::DefineTable do
314
316
  SELECT default_tenant_id(), -2
315
317
  WHERE NOT EXISTS (SELECT 1 FROM user_table WHERE tenant_id = default_tenant_id() AND user_id = -2);
316
318
 
319
+ ANALYZE user_table;
320
+
317
321
  CREATE OR REPLACE FUNCTION default_user_id()
318
322
  RETURNS INTEGER IMMUTABLE AS $$
319
323
  SELECT -1;
@@ -74,6 +74,8 @@ describe Masamune::Transform::InsertReferenceValues do
74
74
  department_type_department_id IS NOT NULL
75
75
  ;
76
76
 
77
+ ANALYZE department_type_stage;
78
+
77
79
  BEGIN;
78
80
  LOCK TABLE department_type IN EXCLUSIVE MODE;
79
81
 
@@ -94,6 +96,8 @@ describe Masamune::Transform::InsertReferenceValues do
94
96
  department_type.department_id IS NULL
95
97
  ;
96
98
 
99
+ ANALYZE department_type;
100
+
97
101
  COMMIT;
98
102
  EOS
99
103
  end
@@ -91,6 +91,8 @@ describe Masamune::Transform::InsertReferenceValues do
91
91
  user_agent_type_name IS NOT NULL
92
92
  ;
93
93
 
94
+ ANALYZE user_agent_type_stage;
95
+
94
96
  BEGIN;
95
97
  LOCK TABLE user_agent_type IN EXCLUSIVE MODE;
96
98
 
@@ -111,6 +113,8 @@ describe Masamune::Transform::InsertReferenceValues do
111
113
  user_agent_type.version IS NULL
112
114
  ;
113
115
 
116
+ ANALYZE user_agent_type;
117
+
114
118
  COMMIT;
115
119
 
116
120
  CREATE TEMPORARY TABLE IF NOT EXISTS feature_type_stage (LIKE feature_type INCLUDING ALL);
@@ -125,6 +129,8 @@ describe Masamune::Transform::InsertReferenceValues do
125
129
  feature_type_name IS NOT NULL
126
130
  ;
127
131
 
132
+ ANALYZE feature_type_stage;
133
+
128
134
  BEGIN;
129
135
  LOCK TABLE feature_type IN EXCLUSIVE MODE;
130
136
 
@@ -142,6 +148,8 @@ describe Masamune::Transform::InsertReferenceValues do
142
148
  feature_type.name IS NULL
143
149
  ;
144
150
 
151
+ ANALYZE feature_type;
152
+
145
153
  COMMIT;
146
154
  EOS
147
155
  end
@@ -24,7 +24,7 @@ require 'spec_helper'
24
24
 
25
25
  describe Masamune::Transform::RollupFact do
26
26
  before do
27
- allow(Process).to receive(:pid).and_return('PID')
27
+ allow_any_instance_of(Masamune::Schema::Table).to receive(:lock_id).and_return(42)
28
28
 
29
29
  catalog.schema :postgres do
30
30
  dimension 'cluster', type: :mini do
@@ -92,19 +92,16 @@ describe Masamune::Transform::RollupFact do
92
92
 
93
93
  it 'should eq render rollup_fact template' do
94
94
  is_expected.to eq <<-EOS.strip_heredoc
95
- DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage_PID CASCADE;
96
- CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08_stage_PID (LIKE visits_hourly_fact INCLUDING ALL);
95
+ SELECT pg_advisory_lock(42);
97
96
 
98
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
99
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id);
100
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id);
101
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id);
102
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id);
103
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id);
104
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id);
97
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage CASCADE;
98
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage_tmp CASCADE;
99
+
100
+ CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08 (LIKE visits_hourly_fact INCLUDING ALL);
101
+ CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08_stage (LIKE visits_hourly_fact INCLUDING ALL);
105
102
 
106
103
  INSERT INTO
107
- visits_hourly_fact_y2014m08_stage_PID (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
104
+ visits_hourly_fact_y2014m08_stage (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
108
105
  SELECT
109
106
  (SELECT id FROM date_dimension d WHERE d.date_epoch = date_dimension.date_epoch ORDER BY d.date_id LIMIT 1),
110
107
  visits_transaction_fact_y2014m08.tenant_dimension_id,
@@ -128,37 +125,57 @@ describe Masamune::Transform::RollupFact do
128
125
  (visits_transaction_fact_y2014m08.time_key - (visits_transaction_fact_y2014m08.time_key % 3600))
129
126
  ;
130
127
 
131
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (cluster_type_id);
132
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (date_dimension_id);
133
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (tenant_dimension_id);
134
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (user_dimension_id);
135
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (user_agent_type_id);
136
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_feature_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (feature_type_id);
137
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_time_key_index ON visits_hourly_fact_y2014m08_stage_PID (time_key);
128
+ SELECT pg_advisory_lock(ddl_advisory_lock());
138
129
 
139
130
  BEGIN;
140
-
141
- DROP TABLE IF EXISTS visits_hourly_fact_y2014m08;
142
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID RENAME TO visits_hourly_fact_y2014m08;
131
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
132
+
133
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_time_key_check;
134
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_cluster_type_id_fkey CASCADE;
135
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_date_dimension_id_fkey CASCADE;
136
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_tenant_dimension_id_fkey CASCADE;
137
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_user_dimension_id_fkey CASCADE;
138
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_user_agent_type_id_fkey CASCADE;
139
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_feature_type_id_fkey CASCADE;
140
+
141
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d6b9b38_index;
142
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_0a531a8_index;
143
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d3950d9_index;
144
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_39f0fdd_index;
145
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d8b1c3e_index;
146
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_33b68fd_index;
147
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_6444ed3_index;
148
+
149
+ ALTER TABLE visits_hourly_fact_y2014m08 RENAME TO visits_hourly_fact_y2014m08_stage_tmp;
150
+ ALTER TABLE visits_hourly_fact_y2014m08_stage RENAME TO visits_hourly_fact_y2014m08;
143
151
 
144
152
  ALTER TABLE visits_hourly_fact_y2014m08 INHERIT visits_hourly_fact;
145
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600) NOT VALID;
146
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID;
147
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID;
148
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID;
149
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID;
150
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID;
151
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID;
152
-
153
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_index RENAME TO visits_hourly_fact_y2014m08_cluster_type_id_index;
154
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_date_dimension_id_index;
155
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_tenant_dimension_id_index;
156
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_user_dimension_id_index;
157
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_index RENAME TO visits_hourly_fact_y2014m08_user_agent_type_id_index;
158
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_feature_type_id_index RENAME TO visits_hourly_fact_y2014m08_feature_type_id_index;
159
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_time_key_index RENAME TO visits_hourly_fact_y2014m08_time_key_index;
153
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
154
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
155
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
156
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
157
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
158
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
159
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
160
+
161
+ CREATE INDEX visits_hourly_fact_y2014m08_d6b9b38_index ON visits_hourly_fact_y2014m08 (cluster_type_id);
162
+ CREATE INDEX visits_hourly_fact_y2014m08_0a531a8_index ON visits_hourly_fact_y2014m08 (date_dimension_id);
163
+ CREATE INDEX visits_hourly_fact_y2014m08_d3950d9_index ON visits_hourly_fact_y2014m08 (tenant_dimension_id);
164
+ CREATE INDEX visits_hourly_fact_y2014m08_39f0fdd_index ON visits_hourly_fact_y2014m08 (user_dimension_id);
165
+ CREATE INDEX visits_hourly_fact_y2014m08_d8b1c3e_index ON visits_hourly_fact_y2014m08 (user_agent_type_id);
166
+ CREATE INDEX visits_hourly_fact_y2014m08_33b68fd_index ON visits_hourly_fact_y2014m08 (feature_type_id);
167
+ CREATE INDEX visits_hourly_fact_y2014m08_6444ed3_index ON visits_hourly_fact_y2014m08 (time_key);
168
+
169
+ ANALYZE visits_hourly_fact_y2014m08;
160
170
 
161
171
  COMMIT;
172
+
173
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage_tmp CASCADE;
174
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage CASCADE;
175
+
176
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
177
+
178
+ SELECT pg_advisory_unlock(42);
162
179
  EOS
163
180
  end
164
181
  end
@@ -172,19 +189,16 @@ describe Masamune::Transform::RollupFact do
172
189
 
173
190
  it 'should eq render rollup_fact template' do
174
191
  is_expected.to eq <<-EOS.strip_heredoc
175
- DROP TABLE IF EXISTS visits_daily_fact_y2014m08_stage_PID CASCADE;
176
- CREATE TABLE IF NOT EXISTS visits_daily_fact_y2014m08_stage_PID (LIKE visits_daily_fact INCLUDING ALL);
192
+ SELECT pg_advisory_lock(42);
193
+
194
+ DROP TABLE IF EXISTS visits_daily_fact_y2014m08_stage CASCADE;
195
+ DROP TABLE IF EXISTS visits_daily_fact_y2014m08_stage_tmp CASCADE;
177
196
 
178
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
179
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id);
180
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id);
181
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id);
182
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id);
183
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id);
184
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID ADD CONSTRAINT visits_daily_fact_y2014m08_stage_PID_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id);
197
+ CREATE TABLE IF NOT EXISTS visits_daily_fact_y2014m08 (LIKE visits_daily_fact INCLUDING ALL);
198
+ CREATE TABLE IF NOT EXISTS visits_daily_fact_y2014m08_stage (LIKE visits_daily_fact INCLUDING ALL);
185
199
 
186
200
  INSERT INTO
187
- visits_daily_fact_y2014m08_stage_PID (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
201
+ visits_daily_fact_y2014m08_stage (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
188
202
  SELECT
189
203
  (SELECT id FROM date_dimension d WHERE d.date_epoch = date_dimension.date_epoch ORDER BY d.date_id LIMIT 1),
190
204
  visits_hourly_fact_y2014m08.tenant_dimension_id,
@@ -207,37 +221,57 @@ describe Masamune::Transform::RollupFact do
207
221
  visits_hourly_fact_y2014m08.feature_type_id
208
222
  ;
209
223
 
210
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_cluster_type_id_index ON visits_daily_fact_y2014m08_stage_PID (cluster_type_id);
211
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_date_dimension_id_index ON visits_daily_fact_y2014m08_stage_PID (date_dimension_id);
212
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_tenant_dimension_id_index ON visits_daily_fact_y2014m08_stage_PID (tenant_dimension_id);
213
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_user_dimension_id_index ON visits_daily_fact_y2014m08_stage_PID (user_dimension_id);
214
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_user_agent_type_id_index ON visits_daily_fact_y2014m08_stage_PID (user_agent_type_id);
215
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_feature_type_id_index ON visits_daily_fact_y2014m08_stage_PID (feature_type_id);
216
- CREATE INDEX visits_daily_fact_y2014m08_stage_PID_time_key_index ON visits_daily_fact_y2014m08_stage_PID (time_key);
224
+ SELECT pg_advisory_lock(ddl_advisory_lock());
217
225
 
218
226
  BEGIN;
219
-
220
- DROP TABLE IF EXISTS visits_daily_fact_y2014m08;
221
- ALTER TABLE visits_daily_fact_y2014m08_stage_PID RENAME TO visits_daily_fact_y2014m08;
227
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
228
+
229
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_time_key_check;
230
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_cluster_type_id_fkey CASCADE;
231
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_date_dimension_id_fkey CASCADE;
232
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_tenant_dimension_id_fkey CASCADE;
233
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_user_dimension_id_fkey CASCADE;
234
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_user_agent_type_id_fkey CASCADE;
235
+ ALTER TABLE visits_daily_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_daily_fact_y2014m08_feature_type_id_fkey CASCADE;
236
+
237
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_d6b9b38_index;
238
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_0a531a8_index;
239
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_d3950d9_index;
240
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_39f0fdd_index;
241
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_d8b1c3e_index;
242
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_33b68fd_index;
243
+ DROP INDEX IF EXISTS visits_daily_fact_y2014m08_6444ed3_index;
244
+
245
+ ALTER TABLE visits_daily_fact_y2014m08 RENAME TO visits_daily_fact_y2014m08_stage_tmp;
246
+ ALTER TABLE visits_daily_fact_y2014m08_stage RENAME TO visits_daily_fact_y2014m08;
222
247
 
223
248
  ALTER TABLE visits_daily_fact_y2014m08 INHERIT visits_daily_fact;
224
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600) NOT VALID;
225
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID;
226
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID;
227
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID;
228
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID;
229
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID;
230
- ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID;
231
-
232
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_cluster_type_id_index RENAME TO visits_daily_fact_y2014m08_cluster_type_id_index;
233
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_date_dimension_id_index RENAME TO visits_daily_fact_y2014m08_date_dimension_id_index;
234
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_tenant_dimension_id_index RENAME TO visits_daily_fact_y2014m08_tenant_dimension_id_index;
235
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_user_dimension_id_index RENAME TO visits_daily_fact_y2014m08_user_dimension_id_index;
236
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_user_agent_type_id_index RENAME TO visits_daily_fact_y2014m08_user_agent_type_id_index;
237
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_feature_type_id_index RENAME TO visits_daily_fact_y2014m08_feature_type_id_index;
238
- ALTER INDEX visits_daily_fact_y2014m08_stage_PID_time_key_index RENAME TO visits_daily_fact_y2014m08_time_key_index;
249
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
250
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
251
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
252
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
253
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
254
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
255
+ ALTER TABLE visits_daily_fact_y2014m08 ADD CONSTRAINT visits_daily_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
256
+
257
+ CREATE INDEX visits_daily_fact_y2014m08_d6b9b38_index ON visits_daily_fact_y2014m08 (cluster_type_id);
258
+ CREATE INDEX visits_daily_fact_y2014m08_0a531a8_index ON visits_daily_fact_y2014m08 (date_dimension_id);
259
+ CREATE INDEX visits_daily_fact_y2014m08_d3950d9_index ON visits_daily_fact_y2014m08 (tenant_dimension_id);
260
+ CREATE INDEX visits_daily_fact_y2014m08_39f0fdd_index ON visits_daily_fact_y2014m08 (user_dimension_id);
261
+ CREATE INDEX visits_daily_fact_y2014m08_d8b1c3e_index ON visits_daily_fact_y2014m08 (user_agent_type_id);
262
+ CREATE INDEX visits_daily_fact_y2014m08_33b68fd_index ON visits_daily_fact_y2014m08 (feature_type_id);
263
+ CREATE INDEX visits_daily_fact_y2014m08_6444ed3_index ON visits_daily_fact_y2014m08 (time_key);
264
+
265
+ ANALYZE visits_daily_fact_y2014m08;
239
266
 
240
267
  COMMIT;
268
+
269
+ DROP TABLE IF EXISTS visits_daily_fact_y2014m08_stage_tmp CASCADE;
270
+ DROP TABLE IF EXISTS visits_daily_fact_y2014m08_stage CASCADE;
271
+
272
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
273
+
274
+ SELECT pg_advisory_unlock(42);
241
275
  EOS
242
276
  end
243
277
  end
@@ -251,19 +285,16 @@ describe Masamune::Transform::RollupFact do
251
285
 
252
286
  it 'should eq render rollup_fact template' do
253
287
  is_expected.to eq <<-EOS.strip_heredoc
254
- DROP TABLE IF EXISTS visits_monthly_fact_y2014m08_stage_PID CASCADE;
255
- CREATE TABLE IF NOT EXISTS visits_monthly_fact_y2014m08_stage_PID (LIKE visits_monthly_fact INCLUDING ALL);
288
+ SELECT pg_advisory_lock(42);
256
289
 
257
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
258
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id);
259
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id);
260
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id);
261
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id);
262
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id);
263
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_monthly_fact_y2014m08_stage_PID_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id);
290
+ DROP TABLE IF EXISTS visits_monthly_fact_y2014m08_stage CASCADE;
291
+ DROP TABLE IF EXISTS visits_monthly_fact_y2014m08_stage_tmp CASCADE;
292
+
293
+ CREATE TABLE IF NOT EXISTS visits_monthly_fact_y2014m08 (LIKE visits_monthly_fact INCLUDING ALL);
294
+ CREATE TABLE IF NOT EXISTS visits_monthly_fact_y2014m08_stage (LIKE visits_monthly_fact INCLUDING ALL);
264
295
 
265
296
  INSERT INTO
266
- visits_monthly_fact_y2014m08_stage_PID (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
297
+ visits_monthly_fact_y2014m08_stage (date_dimension_id, tenant_dimension_id, user_dimension_id, user_agent_type_id, feature_type_id, total, time_key)
267
298
  SELECT
268
299
  (SELECT id FROM date_dimension d WHERE d.month_epoch = date_dimension.month_epoch ORDER BY d.date_id LIMIT 1),
269
300
  visits_daily_fact_y2014m08.tenant_dimension_id,
@@ -286,37 +317,57 @@ describe Masamune::Transform::RollupFact do
286
317
  visits_daily_fact_y2014m08.feature_type_id
287
318
  ;
288
319
 
289
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_cluster_type_id_index ON visits_monthly_fact_y2014m08_stage_PID (cluster_type_id);
290
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_date_dimension_id_index ON visits_monthly_fact_y2014m08_stage_PID (date_dimension_id);
291
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_tenant_dimension_id_index ON visits_monthly_fact_y2014m08_stage_PID (tenant_dimension_id);
292
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_user_dimension_id_index ON visits_monthly_fact_y2014m08_stage_PID (user_dimension_id);
293
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_user_agent_type_id_index ON visits_monthly_fact_y2014m08_stage_PID (user_agent_type_id);
294
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_feature_type_id_index ON visits_monthly_fact_y2014m08_stage_PID (feature_type_id);
295
- CREATE INDEX visits_monthly_fact_y2014m08_stage_PID_time_key_index ON visits_monthly_fact_y2014m08_stage_PID (time_key);
320
+ SELECT pg_advisory_lock(ddl_advisory_lock());
296
321
 
297
322
  BEGIN;
298
-
299
- DROP TABLE IF EXISTS visits_monthly_fact_y2014m08;
300
- ALTER TABLE visits_monthly_fact_y2014m08_stage_PID RENAME TO visits_monthly_fact_y2014m08;
323
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
324
+
325
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_time_key_check;
326
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_cluster_type_id_fkey CASCADE;
327
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_date_dimension_id_fkey CASCADE;
328
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_tenant_dimension_id_fkey CASCADE;
329
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_user_dimension_id_fkey CASCADE;
330
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_user_agent_type_id_fkey CASCADE;
331
+ ALTER TABLE visits_monthly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_monthly_fact_y2014m08_feature_type_id_fkey CASCADE;
332
+
333
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_d6b9b38_index;
334
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_0a531a8_index;
335
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_d3950d9_index;
336
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_39f0fdd_index;
337
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_d8b1c3e_index;
338
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_33b68fd_index;
339
+ DROP INDEX IF EXISTS visits_monthly_fact_y2014m08_6444ed3_index;
340
+
341
+ ALTER TABLE visits_monthly_fact_y2014m08 RENAME TO visits_monthly_fact_y2014m08_stage_tmp;
342
+ ALTER TABLE visits_monthly_fact_y2014m08_stage RENAME TO visits_monthly_fact_y2014m08;
301
343
 
302
344
  ALTER TABLE visits_monthly_fact_y2014m08 INHERIT visits_monthly_fact;
303
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600) NOT VALID;
304
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID;
305
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID;
306
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID;
307
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID;
308
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID;
309
- ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID;
310
-
311
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_cluster_type_id_index RENAME TO visits_monthly_fact_y2014m08_cluster_type_id_index;
312
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_date_dimension_id_index RENAME TO visits_monthly_fact_y2014m08_date_dimension_id_index;
313
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_tenant_dimension_id_index RENAME TO visits_monthly_fact_y2014m08_tenant_dimension_id_index;
314
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_user_dimension_id_index RENAME TO visits_monthly_fact_y2014m08_user_dimension_id_index;
315
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_user_agent_type_id_index RENAME TO visits_monthly_fact_y2014m08_user_agent_type_id_index;
316
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_feature_type_id_index RENAME TO visits_monthly_fact_y2014m08_feature_type_id_index;
317
- ALTER INDEX visits_monthly_fact_y2014m08_stage_PID_time_key_index RENAME TO visits_monthly_fact_y2014m08_time_key_index;
345
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
346
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
347
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
348
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
349
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
350
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
351
+ ALTER TABLE visits_monthly_fact_y2014m08 ADD CONSTRAINT visits_monthly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
352
+
353
+ CREATE INDEX visits_monthly_fact_y2014m08_d6b9b38_index ON visits_monthly_fact_y2014m08 (cluster_type_id);
354
+ CREATE INDEX visits_monthly_fact_y2014m08_0a531a8_index ON visits_monthly_fact_y2014m08 (date_dimension_id);
355
+ CREATE INDEX visits_monthly_fact_y2014m08_d3950d9_index ON visits_monthly_fact_y2014m08 (tenant_dimension_id);
356
+ CREATE INDEX visits_monthly_fact_y2014m08_39f0fdd_index ON visits_monthly_fact_y2014m08 (user_dimension_id);
357
+ CREATE INDEX visits_monthly_fact_y2014m08_d8b1c3e_index ON visits_monthly_fact_y2014m08 (user_agent_type_id);
358
+ CREATE INDEX visits_monthly_fact_y2014m08_33b68fd_index ON visits_monthly_fact_y2014m08 (feature_type_id);
359
+ CREATE INDEX visits_monthly_fact_y2014m08_6444ed3_index ON visits_monthly_fact_y2014m08 (time_key);
360
+
361
+ ANALYZE visits_monthly_fact_y2014m08;
318
362
 
319
363
  COMMIT;
364
+
365
+ DROP TABLE IF EXISTS visits_monthly_fact_y2014m08_stage_tmp CASCADE;
366
+ DROP TABLE IF EXISTS visits_monthly_fact_y2014m08_stage CASCADE;
367
+
368
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
369
+
370
+ SELECT pg_advisory_unlock(42);
320
371
  EOS
321
372
  end
322
373
  end
@@ -109,6 +109,8 @@ describe Masamune::Transform::StageDimension do
109
109
  ON
110
110
  hr_user_account_state_type.name = user_file_dimension_ledger_stage.hr_user_account_state_type_name
111
111
  ;
112
+
113
+ ANALYZE user_dimension_ledger_stage;
112
114
  EOS
113
115
  end
114
116
  end
@@ -24,7 +24,7 @@ require 'spec_helper'
24
24
 
25
25
  describe Masamune::Transform::StageFact do
26
26
  before do
27
- allow(Process).to receive(:pid).and_return('PID')
27
+ allow_any_instance_of(Masamune::Schema::Table).to receive(:lock_id).and_return(42)
28
28
 
29
29
  catalog.schema :postgres do
30
30
  dimension 'cluster', type: :mini do
@@ -102,20 +102,16 @@ describe Masamune::Transform::StageFact do
102
102
 
103
103
  it 'should eq render stage_fact template' do
104
104
  is_expected.to eq <<-EOS.strip_heredoc
105
- DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage_PID CASCADE;
106
- CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08_stage_PID (LIKE visits_hourly_fact INCLUDING ALL);
107
-
108
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
109
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id);
110
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id);
111
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id);
112
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id);
113
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_group_dimension_id_fkey FOREIGN KEY (group_dimension_id) REFERENCES group_dimension(id);
114
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id);
115
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID ADD CONSTRAINT visits_hourly_fact_y2014m08_stage_PID_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id);
105
+ SELECT pg_advisory_lock(42);
106
+
107
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage CASCADE;
108
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_tmp CASCADE;
109
+
110
+ CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08_stage (LIKE visits_hourly_fact INCLUDING ALL);
111
+ CREATE TABLE IF NOT EXISTS visits_hourly_fact_y2014m08 (LIKE visits_hourly_fact INCLUDING ALL);
116
112
 
117
113
  INSERT INTO
118
- visits_hourly_fact_y2014m08_stage_PID (date_dimension_id, tenant_dimension_id, user_dimension_id, group_dimension_id, user_agent_type_id, feature_type_id, session_type_id, total, time_key)
114
+ visits_hourly_fact_y2014m08_stage (date_dimension_id, tenant_dimension_id, user_dimension_id, group_dimension_id, user_agent_type_id, feature_type_id, session_type_id, total, time_key)
119
115
  SELECT
120
116
  date_dimension.id,
121
117
  tenant_dimension.id,
@@ -160,42 +156,63 @@ describe Masamune::Transform::StageFact do
160
156
  feature_type.name = visits_hourly_file_fact_stage.feature_type_name
161
157
  ;
162
158
 
163
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (cluster_type_id);
164
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (date_dimension_id);
165
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (tenant_dimension_id);
166
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (user_dimension_id);
167
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_group_dimension_id_index ON visits_hourly_fact_y2014m08_stage_PID (group_dimension_id);
168
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (user_agent_type_id);
169
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_feature_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (feature_type_id);
170
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_session_type_id_index ON visits_hourly_fact_y2014m08_stage_PID (session_type_id);
171
- CREATE INDEX visits_hourly_fact_y2014m08_stage_PID_time_key_index ON visits_hourly_fact_y2014m08_stage_PID (time_key);
159
+ SELECT pg_advisory_lock(ddl_advisory_lock());
172
160
 
173
161
  BEGIN;
174
-
175
- DROP TABLE IF EXISTS visits_hourly_fact_y2014m08;
176
- ALTER TABLE visits_hourly_fact_y2014m08_stage_PID RENAME TO visits_hourly_fact_y2014m08;
162
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
163
+
164
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_time_key_check;
165
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_cluster_type_id_fkey CASCADE;
166
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_date_dimension_id_fkey CASCADE;
167
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_tenant_dimension_id_fkey CASCADE;
168
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_user_dimension_id_fkey CASCADE;
169
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_group_dimension_id_fkey CASCADE;
170
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_user_agent_type_id_fkey CASCADE;
171
+ ALTER TABLE visits_hourly_fact_y2014m08 DROP CONSTRAINT IF EXISTS visits_hourly_fact_y2014m08_feature_type_id_fkey CASCADE;
172
+
173
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d6b9b38_index;
174
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_0a531a8_index;
175
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d3950d9_index;
176
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_39f0fdd_index;
177
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_e0d2a9e_index;
178
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_d8b1c3e_index;
179
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_33b68fd_index;
180
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_422efee_index;
181
+ DROP INDEX IF EXISTS visits_hourly_fact_y2014m08_6444ed3_index;
182
+
183
+ ALTER TABLE visits_hourly_fact_y2014m08 RENAME TO visits_hourly_fact_y2014m08_tmp;
184
+ ALTER TABLE visits_hourly_fact_y2014m08_stage RENAME TO visits_hourly_fact_y2014m08;
177
185
 
178
186
  ALTER TABLE visits_hourly_fact_y2014m08 INHERIT visits_hourly_fact;
179
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600) NOT VALID;
180
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID;
181
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID;
182
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID;
183
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID;
184
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_group_dimension_id_fkey FOREIGN KEY (group_dimension_id) REFERENCES group_dimension(id) NOT VALID;
185
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID;
186
- ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID;
187
-
188
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_cluster_type_id_index RENAME TO visits_hourly_fact_y2014m08_cluster_type_id_index;
189
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_date_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_date_dimension_id_index;
190
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_tenant_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_tenant_dimension_id_index;
191
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_user_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_user_dimension_id_index;
192
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_group_dimension_id_index RENAME TO visits_hourly_fact_y2014m08_group_dimension_id_index;
193
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_user_agent_type_id_index RENAME TO visits_hourly_fact_y2014m08_user_agent_type_id_index;
194
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_feature_type_id_index RENAME TO visits_hourly_fact_y2014m08_feature_type_id_index;
195
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_session_type_id_index RENAME TO visits_hourly_fact_y2014m08_session_type_id_index;
196
- ALTER INDEX visits_hourly_fact_y2014m08_stage_PID_time_key_index RENAME TO visits_hourly_fact_y2014m08_time_key_index;
187
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_time_key_check CHECK (time_key >= 1406851200 AND time_key < 1409529600);
188
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_cluster_type_id_fkey FOREIGN KEY (cluster_type_id) REFERENCES cluster_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
189
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_date_dimension_id_fkey FOREIGN KEY (date_dimension_id) REFERENCES date_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
190
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_tenant_dimension_id_fkey FOREIGN KEY (tenant_dimension_id) REFERENCES tenant_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
191
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_dimension_id_fkey FOREIGN KEY (user_dimension_id) REFERENCES user_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
192
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_group_dimension_id_fkey FOREIGN KEY (group_dimension_id) REFERENCES group_dimension(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
193
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_user_agent_type_id_fkey FOREIGN KEY (user_agent_type_id) REFERENCES user_agent_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
194
+ ALTER TABLE visits_hourly_fact_y2014m08 ADD CONSTRAINT visits_hourly_fact_y2014m08_feature_type_id_fkey FOREIGN KEY (feature_type_id) REFERENCES feature_type(id) NOT VALID DEFERRABLE INITIALLY DEFERRED;
195
+
196
+ CREATE INDEX visits_hourly_fact_y2014m08_d6b9b38_index ON visits_hourly_fact_y2014m08 (cluster_type_id);
197
+ CREATE INDEX visits_hourly_fact_y2014m08_0a531a8_index ON visits_hourly_fact_y2014m08 (date_dimension_id);
198
+ CREATE INDEX visits_hourly_fact_y2014m08_d3950d9_index ON visits_hourly_fact_y2014m08 (tenant_dimension_id);
199
+ CREATE INDEX visits_hourly_fact_y2014m08_39f0fdd_index ON visits_hourly_fact_y2014m08 (user_dimension_id);
200
+ CREATE INDEX visits_hourly_fact_y2014m08_e0d2a9e_index ON visits_hourly_fact_y2014m08 (group_dimension_id);
201
+ CREATE INDEX visits_hourly_fact_y2014m08_d8b1c3e_index ON visits_hourly_fact_y2014m08 (user_agent_type_id);
202
+ CREATE INDEX visits_hourly_fact_y2014m08_33b68fd_index ON visits_hourly_fact_y2014m08 (feature_type_id);
203
+ CREATE INDEX visits_hourly_fact_y2014m08_422efee_index ON visits_hourly_fact_y2014m08 (session_type_id);
204
+ CREATE INDEX visits_hourly_fact_y2014m08_6444ed3_index ON visits_hourly_fact_y2014m08 (time_key);
205
+
206
+ ANALYZE visits_hourly_fact_y2014m08;
197
207
 
198
208
  COMMIT;
209
+
210
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_tmp CASCADE;
211
+ DROP TABLE IF EXISTS visits_hourly_fact_y2014m08_stage CASCADE;
212
+
213
+ SELECT pg_advisory_unlock(ddl_advisory_lock());
214
+
215
+ SELECT pg_advisory_unlock(42);
199
216
  EOS
200
217
  end
201
218
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: masamune
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Andrews
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-31 00:00:00.000000000 Z
11
+ date: 2015-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor