-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigration_script.sql
More file actions
138 lines (122 loc) · 3.87 KB
/
migration_script.sql
File metadata and controls
138 lines (122 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
-- =====================================================
-- MIGRATION VERS LA NOUVELLE STRUCTURE ULTRA POLYVALENTE
-- =====================================================
-- 1. Créer la nouvelle structure
\i database_schema.sql
-- 2. Migrer les données existantes vers la nouvelle structure
-- Migrer les utilisateurs
INSERT INTO users (id, phone_number, is_verified, last_location, created_at, updated_at)
SELECT
id,
phone_number,
is_verified,
last_location,
created_at,
updated_at
FROM old_users;
-- Migrer les ambassadeurs
INSERT INTO ambassadors (user_id, full_name, created_at, updated_at)
SELECT
user_id,
full_name,
created_at,
updated_at
FROM old_ambassadors;
-- Migrer les catégories
INSERT INTO categories (id, name, created_at, updated_at)
SELECT
id,
name,
created_at,
updated_at
FROM old_categories;
-- Migrer les commerces vers les activités
INSERT INTO activities (
id, name, description, category_id, address, location,
phone_number, whatsapp_number, is_verified, is_active, is_open,
price_level, rating, review_count, ambassador_id, opening_hours,
created_at, updated_at
)
SELECT
id,
name,
description,
category_id,
address,
location,
phone_number,
whatsapp_number,
is_verified,
TRUE as is_active,
is_open,
price_level,
rating,
review_count,
ambassador_id,
opening_hours,
created_at,
updated_at
FROM old_merchants;
-- Migrer les photos
INSERT INTO media (activity_id, file_url, file_type, category, created_at)
SELECT
merchant_id,
image_url,
'image' as file_type,
'gallery' as category,
created_at
FROM old_merchant_photos;
-- Migrer les logs de recherche
INSERT INTO search_logs (user_id, query, user_location, results_count, created_at)
SELECT
user_id,
query,
location,
results_count,
created_at
FROM old_search_logs;
-- 3. Supprimer les anciennes tables
DROP TABLE IF EXISTS old_merchant_photos CASCADE;
DROP TABLE IF EXISTS old_merchant_status_history CASCADE;
DROP TABLE IF EXISTS old_merchants CASCADE;
DROP TABLE IF EXISTS old_ambassadors CASCADE;
DROP TABLE IF EXISTS old_categories CASCADE;
DROP TABLE IF EXISTS old_users CASCADE;
DROP TABLE IF EXISTS old_search_logs CASCADE;
DROP TABLE IF EXISTS old_conversations CASCADE;
DROP TABLE IF EXISTS old_messages CASCADE;
DROP TABLE IF EXISTS old_subscriptions CASCADE;
DROP TABLE IF EXISTS old_audits CASCADE;
-- 4. Mettre à jour les séquences
SELECT setval('users_id_seq', (SELECT MAX(id) FROM users));
SELECT setval('activities_id_seq', (SELECT MAX(id) FROM activities));
SELECT setval('categories_id_seq', (SELECT MAX(id) FROM categories));
SELECT setval('ambassadors_id_seq', (SELECT MAX(id) FROM ambassadors));
-- 5. Créer les index de performance
CREATE INDEX CONCURRENTLY idx_activities_full_text ON activities
USING GIN (to_tsvector('french', name || ' ' || COALESCE(description, '')));
CREATE INDEX CONCURRENTLY idx_activities_location_rating ON activities
USING GIST (location) WHERE is_active = TRUE AND is_open = TRUE;
-- 6. Analyser les tables pour optimiser les performances
ANALYZE activities;
ANALYZE users;
ANALYZE search_logs;
ANALYZE user_interactions;
-- 7. Vérification de la migration
DO $$
DECLARE
user_count INTEGER;
activity_count INTEGER;
category_count INTEGER;
ambassador_count INTEGER;
BEGIN
SELECT COUNT(*) INTO user_count FROM users;
SELECT COUNT(*) INTO activity_count FROM activities;
SELECT COUNT(*) INTO category_count FROM categories;
SELECT COUNT(*) INTO ambassador_count FROM ambassadors;
RAISE NOTICE 'Migration terminée avec succès !';
RAISE NOTICE 'Utilisateurs migrés: %', user_count;
RAISE NOTICE 'Activités migrées: %', activity_count;
RAISE NOTICE 'Catégories migrées: %', category_count;
RAISE NOTICE 'Ambassadeurs migrés: %', ambassador_count;
END $$;