{"record":{"id":"8ea8158d6c1045ce","repo":"nocobase/nocobase","slug":"multi-app-share-collection-plugin-only-support-pos","errorCode":null,"errorMessage":"multi-app-share-collection plugin only support postgres","messagePattern":"multi-app-share-collection plugin only support postgres","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/plugin.ts","lineNumber":131,"sourceCode":"      await subApp.db.sequelize.query(`\n        SELECT setval('${\n          sequenceName[0]['pg_get_serial_sequence']\n        }', (SELECT max(\"id\") FROM ${subAppPluginsCollection.quotedTableName()}));\n      `);\n\n      await subApp.reload();\n\n      console.log(`sync plugins from ${mainApp.name} app to sub app ${subApp.name}`);\n    });\n  }\n}\n\nexport class MultiAppShareCollectionPlugin extends Plugin {\n  afterAdd() {}\n\n  async beforeEnable() {\n    if (!this.db.inDialect('postgres')) {\n      throw new Error('multi-app-share-collection plugin only support postgres');\n    }\n    const plugin = this.pm.get('multi-app-manager');\n    if (!plugin?.enabled) {\n      throw new Error(`${this.name} plugin need multi-app-manager plugin enabled`);\n    }\n  }\n\n  async beforeLoad() {\n    if (!this.db.inDialect('postgres')) {\n      throw new Error('multi-app-share-collection plugin only support postgres');\n    }\n\n    const traverseSubApps = async (\n      callback: (subApp: Application) => void,\n      options?: {\n        loadFromDatabase: boolean;\n      },\n    ) => {","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/nocobase/nocobase/blob/fa42722fefe44265490dff2c27d79e2882bce4fa/packages/plugins/@nocobase/plugin-multi-app-share-collection/src/server/plugin.ts#L113-L149","documentation":"multi-app-share-collection shares collections across sub-applications using PostgreSQL schemas (schema-per-app). beforeEnable checks db.inDialect('postgres') and throws if the database is MySQL, SQLite, MariaDB, etc., because the sharing mechanism depends on Postgres-only features. It then also verifies multi-app-manager is enabled.","triggerScenarios":"Enabling @nocobase/plugin-multi-app-share-collection on a deployment whose DB dialect is not postgres (e.g. MySQL or SQLite), via the plugin manager or install flow.","commonSituations":"Dev environments running SQLite while production uses Postgres, migrations from MySQL deployments trying to adopt multi-app sharing, docker images configured with the wrong DB_* env vars.","solutions":["Switch the NocoBase deployment to PostgreSQL (set DB_DIALECT/DB_* env vars, migrate data) before enabling the plugin.","If Postgres is not an option, do not use multi-app-share-collection; keep per-app databases.","Confirm DB_DIALECT in the environment matches the actually running database server."],"exampleFix":"// before (docker env)\nDB_DIALECT=mysql\n// after\nDB_DIALECT=postgres\nDB_HOST=postgres\nDB_PORT=5432\n","handlingStrategy":"validation","validationCode":"if (app.db.inDialect('postgres')) {\n  await app.pm.enable('multi-app-share-collection');\n} else {\n  console.warn('multi-app-share-collection requires PostgreSQL; not enabled');\n}","typeGuard":"function supportsShareCollection(db: { inDialect(d: string): boolean }): boolean {\n  return db.inDialect('postgres');\n}","tryCatchPattern":"try {\n  await app.pm.enable('multi-app-share-collection');\n} catch (e) {\n  if (String(e.message).includes('only support postgres')) {\n    console.error('Switch to PostgreSQL before enabling this plugin');\n  } else throw e;\n}","preventionTips":["Standardize all environments (dev/CI/prod) on PostgreSQL.","Gate plugin enablement scripts on db.inDialect('postgres').","Audit DB_DIALECT env vars when provisioning new deployments."],"tags":["database","postgres","multi-app","compatibility"],"backgroundTag":"unsupported-database-dialect","analyzedSha":"fa42722fefe44265490dff2c27d79e2882bce4fa","analyzedAt":"2026-09-01T00:54:31.202Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}