-- 演目テーブルの項目commentsから曲タイトルを抜き出して曲テーブルへ格納します。 insert into songs(song_title) select regexp_replace(comments,'^1:\[(.*?)\].+$','\1') as "song_title" from setlists group by "song_title" order by "song_title" ; -- 演目テーブルの項目commentsから場所を抜き出して場所テーブルへ格納します。 insert into places(place) select TRIM(regexp_replace(setlists.comments,'^.+3:\[(.*?)\].+$','\1')) as "place" from setlists group by "place" order by "place" ; -- 演目テーブルの項目commentsから会場を抜き出して会場テーブルへ格納します。 insert into venues(venue) select TRIM(regexp_replace(setlists.comments,'^.+4:\[(.*?)\].+$','\1')) as "venue" from setlists group by "venue" order by "venue" ; -- 演目テーブルの項目commentsからツアーのタイトルを抜き出してツアーテーブルへ格納します。 insert into tours(tour_title) select TRIM(regexp_replace(setlists.comments,'^.+5:\[(.*?)\]$','\1')) as "tour_title" from setlists group by "tour_title" order by "tour_title" ; -- 演目テーブルの項目song_idに曲テーブルの項目idを設定します。 update setlists set song_id = songs.id from songs where songs.song_title = regexp_replace(setlists.comments,'^1:\[(.*?)\].+$','\1') ; -- 演目テーブルから集約処理で邪魔になる情報(曲タイトル)を項目commentsから取り除きます。 update setlists set comments = TRIM(regexp_replace(setlists.comments,'^.+(2:\[.*\])$','\1')) ; -- 演目テーブルから公演テーブルへ格納します。 -- 演目テーブルの曲情報が無い状態で集約すると、1レコードが1公演の情報、となります。 insert into events(comments) select comments from setlists group by comments order by comments ; -- 公演テーブルの項目event_dateに項目commentsの公演日を転記します。 update events set event_date = to_date(regexp_replace(comments,'^2:\[(.*?)\].+$','\1'), 'YYYY-MM-DD') ; -- 演目テーブルの項目event_idに公演テーブルの項目idを設定します。 update setlists set event_id = events.id from events where events.comments = setlists.comments ; -- 公演テーブルの項目commentsを使って公演テーブルのtour_idにツアーテーブルの項目idを設定します。 update events set tour_id = tours.id from tours where tour_title = trim(regexp_replace(events.comments,'^.+?5:\[(.*?)\]$','\1')) ; -- 公演テーブルの項目commentsを使って公演テーブルのplace_idに場所テーブルの項目idを設定します。 update events set place_id = places.id from places where place = trim(regexp_replace(events.comments,'^.+?3:\[(.*?)\].+$','\1')) ; -- 公演テーブルの項目commentsを使って公演テーブルのvenue_idに会場テーブルの項目idを設定します。 update events set venue_id = venues.id from venues where venue = trim(regexp_replace(events.comments,'^.+?4:\[(.*?)\].+$','\1')) ; -- このテーブルへは手書きで追加します。このテーブルはなくてもかまいません。 insert into setlist_types(id,list_name) values(1,'セットリスト'); insert into setlist_types(id,list_name) values(2,'アンコール'); insert into setlist_types(id,list_name) values(3,'Wアンコール'); -- テーブルtours にはツアー開始、終了の項目があります。 -- この項目をテーブルeventsのデータで設定します。 update tours set tour_start = mindate ,tour_end = maxdate from (select tour_id ,min(event_date) as mindate ,max(event_date) as maxdate from events group by tour_id ) T where tours.id = T.tour_id ; -- 各テーブルの項目 comments には取り込みと関連付け作業で使ったデータが残ったままですのでこれを削除します。 update tours set comments = null; update songs set comments = null; update events set comments = null; update setlists set comments = null; -- 結果をコミット commit;