0003_trigger.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.db import migrations
  2. class Migration(migrations.Migration):
  3. dependencies = [
  4. ('mysite', '0001_initial'),
  5. ]
  6. operations = [
  7. migrations.RunSQL("""
  8. CREATE OR REPLACE VIEW song_details_view AS
  9. SELECT
  10. s.song_id,
  11. s.title,
  12. a.album_name,
  13. m.name AS musician_name,
  14. s.duration_sec,
  15. g.genre_name,
  16. ROUND(AVG(r.score), 2) AS avg_rating
  17. FROM song s
  18. JOIN album a ON s.album_id = a.album_id
  19. JOIN musician m ON a.musician_id = m.musician_id
  20. LEFT JOIN genre g ON s.genre_id = g.genre_id
  21. LEFT JOIN rating r ON s.song_id = r.song_id
  22. GROUP BY s.song_id, a.album_name, m.name, g.genre_name;
  23. """),
  24. migrations.RunSQL("""
  25. CREATE OR REPLACE FUNCTION update_rating_timestamp()
  26. RETURNS TRIGGER AS $$
  27. BEGIN
  28. NEW.rating_date = CURRENT_DATE;
  29. RETURN NEW;
  30. END;
  31. $$ LANGUAGE plpgsql;
  32. CREATE TRIGGER trg_update_rating_date
  33. BEFORE UPDATE ON rating
  34. FOR EACH ROW
  35. EXECUTE FUNCTION update_rating_timestamp();
  36. """),
  37. ]