#node.js #postgresql #insert #migration #dbmigrate
#node.js #postgresql #вставить #миграция #dbmigrate
Вопрос:
У меня есть миграция ролей.
'use strict';
var dbm;
var type;
var seed;
/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function (options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
};
exports.up = function (db) {
return db.createTable('roles', {
role_id: { type: 'int', primaryKey: true, unique: true, autoIncrement: true },
role_name: 'text',
})
}
exports.down = function (db) {
return db.dropTable('roles')
};
exports._meta = {
"version": 1
};
Теперь я хотел бы установить некоторые роли по умолчанию. Как я предполагаю это сделать?
'use strict';
var dbm;
var type;
var seed;
/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function (options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
};
exports.up = function (db) {
const sql = "DELETE FROM roles"
db.runSql(sql, function (err) {
if (err) return console.log(err)
})
return db.insert(
'roles',
['user_role'],
[['admin', 'technician']]
)
};
exports.down = function (db) {
const sql = "DELETE FROM roles"
db.runSql(sql, function (err) {
if (err) return console.log(err)
})
return null
};
exports._meta = {
"version": 1
};
Независимо от того, что я пытаюсь, я всегда получаю
строка в кавычках, заключенная в кавычки, находится рядом с «‘admin);»
как ошибка.
Он запускается в контейнере docker, и я уже выполнял run migrate_up
обе миграции
В документации указано, что мне нужно это сделать: insert(tableName, columnNameArray, valueArray, callback)
Итак, как мне добавить несколько строк в один оператор?
Ответ №1:
У меня была похожая проблема, мне удалось вставить их один за другим, поместить их обещания в массив, а затем вызвать promise all для них. итак, в вашем случае.
exports.up = function (db) {
const sql = "DELETE FROM roles"
db.runSql(sql, function (err) {
if (err) return console.log(err)
})
const promises = [];
promises.push(db.insert('roles', { user_role : 'admin'}))
promises.push(db.insert('roles', { user_role : 'technician'}))
return Promise.all(promises)
};
Ответ №2:
Вот что я в итоге сделал. Надеюсь, это поможет кому-то еще
'use strict'
var dbm
var type
var seed
/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function (options, seedLink) {
dbm = options.dbmigrate
type = dbm.dataType
seed = seedLink
}
exports.up = function (db) {
// If there are roles, we need to delete them anyway
const sql = 'DELETE FROM roles'
db.runSql(sql, function (err) {
if (err) return console.log(err)
})
return db.insert('roles', ['role_name'], ['admin']).then(
function (result) {
return db.insert('roles', ['role_name'], ['technician'])
},
function (err) {
if (err) return console.log(err)
},
)
}
exports.down = function (db) {
const sql = 'DELETE FROM roles'
db.runSql(sql, function (err) {
if (err) return console.log(err)
})
return null
}
exports._meta = {
version: 1,
}