require 'sequel' def migrate db = Sequel.connect(adapter: :postgres, database: 'vlv2') db.create_table :threads do primary_key :id String :title String :creator, index: true Integer :remote_id, index: true, unique: true String :last_post_creator DateTime :last_post_created_at DateTime :created_at, index: true end db.create_table :posts do primary_key :id String :body String :creator, index: true Integer :remote_id, index: true, unique: true foreign_key :thread_id, :threads DateTime :created_at, index: true end db.create_function(:update_last_post, <<-SQL, language: :plpgsql, returns: :trigger) BEGIN UPDATE threads SET last_post_created_at = NEW.created_at, last_post_creator = NEW.creator WHERE threads.id = NEW.thread_id; RETURN NEW; END SQL db.run(<<-SQL) CREATE TRIGGER update_last_post AFTER INSERT ON posts FOR EACH ROW EXECUTE PROCEDURE update_last_post(); SQL end