8

以下の方法を使用して、列の型を文字列から列挙型に変更しています。これを行う別の方法はありますか?

そのようなクエリを形成するために knex.raw として使用することは可能ですか?

CREATE TYPE type AS ENUM ('disabled', 'include', 'exclude');
ALTER TABLE test_table ALTER COLUMN test_col DROP DEFAULT;
ALTER TABLE test_table ALTER COLUMN test_col TYPE logic USING(test_col::type), ALTER COLUMN test_col SET DEFAULT 'disabled'::logic;


       return schema
        .table('offers', function (table) {
            cols.forEach(function (column) {
                table.renameColumn(column, column + '_old');
            });

        }).then(function () {

            var schema = knex.schema;

            return schema.table('offers', function (table) {
                cols.forEach(function (column) {
                    table.enum(column, ['disabled', 'include', 'exclude']).defaultTo('disabled');
                });
            });

        }).then(function () {
            return knex.select('*').from('offers');
        }).then(function (rows) {

            return Promise.map(rows, function (row) {
                var data = {};
                cols.forEach(function (column) {
                    data[column] = row[column+'_old'];
                }, data);
                return knex('offers').where('id', '=', row.id).update(data);
            })

        }).then(function () {
            var schema = knex.schema;
            return schema.table('offers',function (table) {
                cols.forEach(function (column) {
                    table.dropColumn(column+'_old');
                });
            });

        });
4

0 に答える 0