alter table channel rename to old_channel; -- Add new columns create table channel ( id text not null primary key, name text not null unique, created_at text not null ); -- Transfer data from original table insert into channel select channel.id, channel.name, coalesce( min(message.sent_at), strftime('%FT%R:%f+00:00', 'now', 'utc') ) as created_at from old_channel as channel left join message on channel.id = message.channel group by channel.id, channel.name; -- Fix up `message` foreign keys alter table message rename to old_message; create table message ( id text not null primary key, sequence bigint not null, channel text not null references channel (id), sender text not null references login (id), body text not null, sent_at text not null, unique (channel, sequence) ); insert into message select * from old_message; -- Bury the bodies respectfully drop table old_message; drop table old_channel;