diff --git a/server/core/db.js b/server/core/db.js index b729282a..41a8fad0 100644 --- a/server/core/db.js +++ b/server/core/db.js @@ -187,11 +187,27 @@ module.exports = { } } }, + // -> Create DB Schema if different than the default 'public' + async createDefaultSchema () { + if (WIKI.config.db.schema && WIKI.config.db.schema !== 'public') { + // Don't create the schema if it already exists. This avoids errors + // when the user lacks permission to create new schemas while the schema + // already exists. + let matched_schemas = await self.knex.select('schema_name') + .from('information_schema.schemata') + .where('schema_name', WIKI.config.db.schema); + if (matched_schemas.length == 0) { + await self.knex.raw(`CREATE SCHEMA IF NOT EXISTS ${WIKI.config.db.schema};`) + } + } + }, // -> Migrate DB Schemas async syncSchemas () { return self.knex.migrate.latest({ tableName: 'migrations', - migrationSource + migrationSource, + schemaName: (WIKI.config.db.schema && WIKI.config.db.schema !== 'public') + ? WIKI.config.db.schema : undefined }) }, // -> Migrate DB Schemas from beta @@ -202,6 +218,7 @@ module.exports = { let initTasksQueue = (WIKI.IS_MASTER) ? [ initTasks.connect, + initTasks.createDefaultSchema, initTasks.migrateFromBeta, initTasks.syncSchemas ] : [ diff --git a/server/db/beta/index.js b/server/db/beta/index.js index aa3157c3..e2e14253 100644 --- a/server/db/beta/index.js +++ b/server/db/beta/index.js @@ -84,6 +84,8 @@ module.exports = { const baseMigrationPath = path.join(WIKI.SERVERPATH, (WIKI.config.db.type !== 'sqlite') ? 'db/beta/migrations' : 'db/beta/migrations-sqlite') await knex.migrate.latest({ tableName: 'migrations', + schemaName: (WIKI.config.db.schema && WIKI.config.db.schema !== 'public') + ? WIKI.config.db.schema : undefined, migrationSource: { async getMigrations() { const migrationFiles = await fs.readdir(baseMigrationPath)