You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django执行migrate报错:psycopg2提示gen_random_uuid()不存在

解决Django migrate时gen_random_uuid()不存在的问题

针对你遇到的情况,直接在PostgreSQL能调用gen_random_uuid()但Django连接时报错,结合Docker环境正常的现象,从以下几个方向排查:

  • 确认扩展安装在Django使用的目标数据库中
    很多时候会误在postgres默认库安装uuid-ossp扩展,但Django实际连接的是另一个业务数据库。登录PostgreSQL,切换到Django配置的数据库,执行:

    CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
    

    执行完再验证:

    SELECT gen_random_uuid();
    
  • 检查Django数据库用户的权限
    如果Django使用的数据库用户没有足够权限访问uuid-ossp扩展,也会触发这个错误。可以给用户授予该扩展的使用权限:

    GRANT USAGE ON SCHEMA public TO your_django_user;
    GRANT EXECUTE ON FUNCTION gen_random_uuid() TO your_django_user;
    

    替换your_django_user为DATABASES配置里的用户名。

  • 验证Django连接的PostgreSQL集群是否正确
    Ubuntu环境可能存在多个PostgreSQL集群(比如系统默认和手动安装的),你直接调用SELECT用的是本地默认集群,但Django可能连接了其他集群(比如不同端口、不同数据目录)。检查Django的settings.py里DATABASES配置的HOST、PORT是否和你手动操作的集群一致。

  • 确保函数在Django的schema搜索路径中
    如果uuid-ossp扩展安装在非public schema,而Django的数据库连接没有把该schema加入搜索路径,就会找不到函数。可以在Django的数据库配置中添加OPTIONS指定搜索路径:

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'your_db_name',
            'USER': 'your_user',
            'PASSWORD': 'your_pass',
            'HOST': 'localhost',
            'PORT': '5432',
            'OPTIONS': {
                'options': '-c search_path=public,your_extension_schema'
            },
        }
    }
    

    替换your_extension_schema为扩展所在的schema名称。

内容的提问来源于stack exchange,提问作者Garuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:40:43