Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(psycopg2.errors.StringDataRightTruncation) value too long for type character varying(40) #14593

Closed
5 tasks done
engchina opened this issue Mar 1, 2025 · 3 comments · Fixed by #14597 or #15179
Closed
5 tasks done
Labels
🐞 bug Something isn't working

Comments

@engchina
Copy link
Contributor

engchina commented Mar 1, 2025

Self Checks

  • This is only for bug report, if you would like to ask a question, please head to Discussions.
  • I have searched for existing issues search for existing issues, including closed ones.
  • I confirm that I am using English to submit this report (我已阅读并同意 Language Policy).
  • [FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)
  • Please do not modify this template :) and fill in all the required fields.

Dify version

v1.0.0

Cloud or Self Hosted

Self Hosted (Source)

Steps to reproduce

I've created a embeddings provider of openai_api_compatible, while creating a knowledge as below,

Image

error occured

✔️ Expected Behavior

no error

❌ Actual Behavior

, I think maybe the provider_name (in this case: 'langgenius/openai_api_compatible/openai_api_compatible') is too long for provider_name colume on v1.0.0

[SQL: INSERT INTO dataset_collection_bindings (provider_name, model_name, type, collection_name) VALUES (%(provider_name)s, %(model_name)s, %(type)s, %(collection_name)s) RETURNING dataset_collection_bindings.id, dataset_collection_bindings.created_at]
[parameters: {'provider_name': 'langgenius/openai_api_compatible/openai_api_compatible', 'model_name': 'text-embedding-3-large', 'type': 'dataset', 'collection_name': 'Vector_index_77a15f7e_2571_4da5_8ed1_e76699895229_Node'}]

Full logs as below:

2025-03-01 04:52:36,358 INFO [_internal.py:97]  127.0.0.1 - - [01/Mar/2025 04:52:36] "OPTIONS /console/api/datasets/init HTTP/1.1" 200 -
2025-03-01 04:52:36,682 ERROR [app.py:875] ecfe8abce9 Exception on /console/api/datasets/init [POST]
Traceback (most recent call last):
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
psycopg2.errors.StringDataRightTruncation: value too long for type character varying(40)


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

Traceback (most recent call last):
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 489, in wrapper
    resp = resource(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask/views.py", line 110, in view
    return current_app.ensure_sync(self.dispatch_request)(**kwargs)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 604, in dispatch_request
    resp = meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/controllers/console/wraps.py", line 147, in decorated
    return view(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/libs/login.py", line 94, in decorated_view
    return current_app.ensure_sync(func)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/controllers/console/wraps.py", line 27, in decorated
    return view(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/flask_restful/__init__.py", line 696, in wrapper
    resp = f(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/controllers/console/wraps.py", line 86, in decorated
    return view(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/controllers/console/datasets/datasets_document.py", line 374, in post
    dataset, documents, batch = DocumentService.save_document_without_dataset_id(
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/services/dataset_service.py", line 1257, in save_document_without_dataset_id
    dataset_collection_binding = DatasetCollectionBindingService.get_dataset_collection_binding(
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/services/dataset_service.py", line 2085, in get_dataset_collection_binding
    db.session.commit()
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/scoping.py", line 597, in commit
    return self._proxied.commit()
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 2028, in commit
    trans.commit(_to_root=True)
  File "<string>", line 2, in commit
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go
    ret_value = fn(self, *arg, **kw)
                ^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1313, in commit
    self._prepare_impl()
  File "<string>", line 2, in _prepare_impl
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go
    ret_value = fn(self, *arg, **kw)
                ^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 1288, in _prepare_impl
    self.session.flush()
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4352, in flush
    self._flush(objects)
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4487, in _flush
    with util.safe_reraise():
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/session.py", line 4448, in _flush
    flush_context.execute()
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
    rec.execute(self)
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
    util.preloaded.orm_persistence.save_obj(
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
    _emit_insert_statements(
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/orm/persistence.py", line 1233, in _emit_insert_statements
    result = connection.execute(
             ^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1418, in execute
    return meth(
           ^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/sql/elements.py", line 515, in _execute_on_connection
    return connection._execute_clauseelement(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1640, in _execute_clauseelement
    ret = self._execute_context(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1846, in _execute_context
    return self._exec_single_context(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1986, in _exec_single_context
    self._handle_dbapi_exception(
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 2355, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/base.py", line 1967, in _exec_single_context
    self.dialect.do_execute(
  File "/mnt/e/workspace/dify-oracle/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 941, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.DataError: (psycopg2.errors.StringDataRightTruncation) value too long for type character varying(40)
Copy link

dosubot bot commented Mar 1, 2025

To resolve the "psycopg2.errors.StringDataRightTruncation: value too long for type character varying(40)" error, you need to increase the length of the provider_name column in the dataset_collection_bindings table. Here are the steps to do this:

  1. Connect to the Docker database container:

    docker exec -it docker-db-1 bash
  2. Connect to the Dify database:

    psql -d dify
  3. Alter the provider_name column length:

    ALTER TABLE dataset_collection_bindings ALTER COLUMN provider_name TYPE VARCHAR(255);
  4. Verify the change:

    \d dataset_collection_bindings;

This will allow longer values for the provider_name column, resolving the error you're encountering [1].

To continue talking to Dosu, mention @dosu.


Help Dosu learn! Give it feedback: Great Response | Irrelevant Answer | Incorrect Sources | Too Verbose | Hallucination | Bug Report | Other

@engchina
Copy link
Contributor Author

engchina commented Mar 1, 2025

Thanks.

Have posted a PR #14597.

@wuminmin
Copy link

wuminmin commented Mar 2, 2025

hi,this is fixed on my side. but if i restart docker,the DB will cancel the change? when we just install and not need to change DB table manually?

docker exec -it docker-db-1 bash
c76893cff4d1:/# psql -d dify
psql (15.12)
Type "help" for help.

dify=# ALTER TABLE dataset_collection_bindings ALTER COLUMN provider_name TYPE VARCHAR(255);
ALTER TABLE
dify=# \d dataset_collection_bindings;
Table "public.dataset_collection_bindings"
Column | Type | Collation | Nullable | Default
-----------------+-----------------------------+-----------+----------+------------------------------
id | uuid | | not null | uuid_generate_v4()
provider_name | character varying(255) | | not null |
model_name | character varying(255) | | not null |
collection_name | character varying(64) | | not null |
created_at | timestamp without time zone | | not null | CURRENT_TIMESTAMP(0)
type | character varying(40) | | not null | 'dataset'::character varying
Indexes:
"dataset_collection_bindings_pkey" PRIMARY KEY, btree (id)
"provider_model_name_idx" btree (provider_name, model_name)

chinnsenn pushed a commit to chinnsenn/dify that referenced this issue Mar 3, 2025
@dosubot dosubot bot mentioned this issue Mar 3, 2025
5 tasks
jackzhuo pushed a commit to jackzhuo/dify that referenced this issue Mar 14, 2025
parambharat pushed a commit to parambharat/dify that referenced this issue Mar 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐞 bug Something isn't working
Projects
None yet
2 participants