Adding a column to an existing table in Node.js & Knex
Solution 1
For migrations:
This was taken from this article
- First make a migration:
knex migrate:make add_new_column_to_table
- then in the migration update the file to:
exports.up = function(knex) {
return knex.schema.table('<table name>', table => {
table.string('<new column name>', 128);
})
};
exports.down = function(knex) {
return knex.schema.table('<table name>', table => {
table.dropColumn('<new column name>');
})
};
- then run the migration:
knex migrate:latest
Solution 2
The answers above are correct EXCEPT...
Make sure to write "knex.schema.alterTable" instead of "knex.schema.table".
Below is correct:
return knex.schema.alterTable('<table name>', table => {
table.dropColumn('<new column name>');
})
Solution 3
you should use Schema Building function provided by Knex.js
Below is an example from its official documentation:
//Chooses a database table, and then modifies the table
knex.schema.table('users', function (table) {
table.string('first_name');
table.string('last_name');
})
//Outputs:
//alter table `users` add `first_name` varchar(255), add `last_name` varchar(255);
ezg
Updated on July 09, 2022Comments
-
ezg almost 2 years
I'm using Node.js and Knex to build a service for my router. However, I can't figure out how to add a column to an existing table, any help would be appreciated. Also, I'm using PostgreSQL, but I don't think that matters for the question.
So, this is what I have for adding rows to the table:
insertData(knex, table, row) { return knex .insert(row) .into(table) .returning('*') .then(rows => { return rows[0]; }); }
I'm guessing adding a column to the table would be something similar to this? I just can't figure out/find the solution.
-
t7tran almost 2 yearsBoth are correct as one is an alias of the other.
alterTable
is more explicit. See github.com/knex/knex/issues/3990.