session-pg-simple requiere que se cree una tabla para almacenar sesiones, quiero agregar esta tabla a mi script de migración knex.js.
CREATE TABLE "session" ( "sid" varchar NOT NULL COLLATE "default", "sess" json NOT NULL, "expire" timestamp(6) NOT NULL ) WITH (OIDS=FALSE); ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE; CREATE INDEX "IDX_session_expire" ON "session" ("expire");Este es el script de creación de tablas de https://github.com/voxpelli/node-connect-pg-simple/blob/HEAD/table.sql
exports.up = function (knex) { return Promise.all([ knex.schema .createTable("session", function (table) { table.text("sid").notNullable().collate("default"); table.json("sess").notNullable(); table.timestamp("expire", { precision: 6 }).notNullable(); }) .then( knex.schema.raw( 'ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;' ) ) .then( knex.schema.raw( 'CREATE INDEX "IDX_session_expire" ON "session" ("expire");' ) ), knex.schema.createTable("users", function (table) { //... }), ]); };Los 2 .thens después de la creación de la tabla inicial no se ejecutan, intenté agregarlos al final de Promise.all([]) pero tampoco funcionó. ¿Cómo implemento esas 2 líneas en mi script?
Promise.all no es necesario then , y te perdiste la declaración de return en los bloques. De todos modos, su código se puede simplificar enormemente, knex admite encadenamiento , lo que significa que puede crear una cadena de métodos que se llamarán uno tras otro:
exports.up = function (knex) { return knex.schema .createTable("session", function (table) { table.text("sid").notNullable().collate("default"); table.json("sess").notNullable(); table.timestamp("expire", { precision: 6 }).notNullable(); }) .raw( 'ALTER TABLE "session" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;' ) .raw( 'CREATE INDEX "IDX_session_expire" ON "session" ("expire");' ) .createTable("users", function (table) { //... }) };Con este código, no necesita modificar la tabla o crear un índice dentro de raw :
exports.up = knex => { return Promise.all([ knex.schema.createTable('session', function (table) { table.string('sid').primary().notNullable(); table.json('sess').notNullable(); table.timestamp('expire', { precision: 6 }).notNullable(); }) ]); }; exports.down = knex => { return Promise.all([knex.schema.dropTableIfExists('sessions') ]); };