langgenius / dify

Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.
https://dify.ai
Other
45.3k stars 6.36k forks source link

数据库结构错误 #6784

Closed turkeymz closed 1 month ago

turkeymz commented 1 month ago

Self Checks

Dify version

0.6.15

Cloud or Self Hosted

Self Hosted (Source)

Steps to reproduce

  1. 使用main分支初始化数据库(源码部署)
  2. 切换到0.6.15版本直接启动(源码部署)

✔️ Expected Behavior

整个应用系统无缝切换启动

❌ Actual Behavior

事实上,在知识库列表中出现数据库结构的错误。麻烦提供一下新的ddl升级脚本。同时希望每次新版本升级的时候,若出现数据库结构修改,能够提供sql实现无缝升级。 日志如下 ` 2024-07-30 05:43:57,888.888 ERROR [Thread-2474 (process_request_thread)] [app.py:838] - Exception on /console/api/datasets [GET] Traceback (most recent call last): File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context self.dialect.do_execute( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 924, in do_execute cursor.execute(statement, parameters) psycopg2.errors.UndefinedTable: relation "dataset_permissions" does not exist LINE 2: FROM dataset_permissions ^

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/home/jxbd/python3/lib/python3.10/site-packages/flask/app.py", line 880, in full_dispatch_request rv = self.dispatch_request() File "/home/jxbd/python3/lib/python3.10/site-packages/flask/app.py", line 865, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(view_args) # type: ignore[no-any-return] File "/home/jxbd/python3/lib/python3.10/site-packages/flask_restful/init.py", line 489, in wrapper resp = resource(args, kwargs) File "/home/jxbd/python3/lib/python3.10/site-packages/flask/views.py", line 110, in view return current_app.ensure_sync(self.dispatch_request)(kwargs) # type: ignore[no-any-return] File "/home/jxbd/python3/lib/python3.10/site-packages/flask_restful/init.py", line 604, in dispatch_request resp = meth(args, kwargs) File "/home/jxbd/python/dify/api/controllers/console/setup.py", line 75, in decorated return view(*args, kwargs) File "/home/jxbd/python/dify/api/libs/login.py", line 91, in decorated_view return current_app.ensure_sync(func)(*args, *kwargs) File "/home/jxbd/python/dify/api/controllers/console/wraps.py", line 22, in decorated return view(args, kwargs) File "/home/jxbd/python/dify/api/controllers/console/datasets/datasets.py", line 60, in get datasets, total = DatasetService.get_datasets(page, limit, provider, File "/home/jxbd/python/dify/api/services/dataset_service.py", line 69, in get_datasets ).all() File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2673, in all return self._iter().all() # type: ignore File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2827, in _iter result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2351, in execute return self._execute_internal( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2236, in _execute_internal result: Result[Any] = compile_state_cls.orm_execute_statement( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 293, in orm_execute_statement result = conn.execute( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1418, in execute return meth( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection return connection._execute_clauseelement( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement ret = self._execute_context( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context return self._exec_single_context( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context self._handle_dbapi_exception( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2353, in _handle_dbapi_exception raise sqlalchemy_exception.with_traceback(exc_info[2]) from e File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context self.dialect.do_execute( File "/home/jxbd/python3/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 924, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "dataset_permissions" does not exist LINE 2: FROM dataset_permissions ^

[SQL: SELECT dataset_permissions.id AS dataset_permissions_id, dataset_permissions.dataset_id AS dataset_permissions_dataset_id, dataset_permissions.account_id AS dataset_permissions_account_id, dataset_permissions.tenant_id AS dataset_permissions_tenant_id, dataset_permissions.has_permission AS dataset_permissions_has_permission, dataset_permissions.created_at AS dataset_permissions_created_at FROM dataset_permissions WHERE dataset_permissions.account_id = %(account_id_1)s::UUID AND dataset_permissions.tenant_id = %(tenant_id_1)s::UUID] [parameters: {'account_id_1': '1e2cd3bf-85d6-48ca-9258-35d8960aedf7', 'tenant_id_1': 'de7f1b11-55dd-4ec5-864d-3178548aad1c'}] (Background on this error at: https://sqlalche.me/e/20/f405) `

dosubot[bot] commented 1 month ago

@turkeymz Hello! I'm here to help you with any issues, answer questions, and assist you in becoming a contributor.

要解决升级到 Dify 0.6.15 版本后出现的数据库结构错误,您需要创建缺失的 dataset_permissions 表。以下是创建该表的 DDL 升级脚本:

CREATE TABLE dataset_permissions (
    id UUID PRIMARY KEY,
    dataset_id UUID NOT NULL,
    account_id UUID NOT NULL,
    tenant_id UUID NOT NULL,
    has_permission BOOLEAN NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

在您的数据库中运行此脚本以创建 dataset_permissions 表并解决错误[1].

此外,建议在未来的版本升级中包含 SQL 脚本,以确保数据库结构的无缝升级。

To continue talking to Dosu, mention @dosu.

turkeymz commented 1 month ago
CREATE TABLE dataset_permissions (
    id UUID PRIMARY KEY,
    dataset_id UUID NOT NULL,
    account_id UUID NOT NULL,
    tenant_id UUID NOT NULL,
    has_permission BOOLEAN NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

收到,感谢

crazywoola commented 1 month ago

image.
We do not provide these DDL as you said. Please strictly follow the release guides to upgrade to latest version. If you need technical support, please reach out to business@dify.ai

turkeymz commented 1 month ago

release guides to upgrade

Thanks so much. But where is the release guides to upgrade?I will follow it in the next version.