SYNOPSIS use SQL::AlterTable::SQLite qw(gen_sql_alter_table); my $sql_stmts = gen_sql_alter_table( dbh => $dbh, table => 't', delete_columns => ['b'], modify_columns => ['a', 'INT NOT NULL'], rename_columns => ['a', 'a2'], add_columns => ['c', 'TEXT'], rename_table => 't2', ); The result: [ 'CREATE TABLE "_t_tmp" ("a2" INT NOT NULL)', 'INSERT INTO "_t_tmp" ("a2") SELECT "a" FROM "t"', 'DROP TABLE "t"', 'ALTER TABLE "_t_tmp" RENAME TO "t2"', 'ALTER TABLE "t2" ADD COLUMN "c" TEXT', ] DESCRIPTION SEE ALSO * SQL::Schema::Versioned You can feed the result of gen_sql_alter_table() to SQL::Schema::Versioned's create_or_update_db_schema.