songquanpeng / one-api

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.
https://openai.justsong.cn/
MIT License
15.95k stars 3.69k forks source link

使用postgresql数据库时密码中含有特殊符号时,存在解析问题 #1557

Closed SchrodingerFish closed 2 days ago

SchrodingerFish commented 3 days ago

问题描述 如题 复现步骤 Docker部署时配置PostgreSQL:SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi 例如数据库密码中,含有~!@#$%^&*等特殊符号时会存在解析问题,造成部署时连不上数据库 预期结果 使用url解析可避免该问题

igophper commented 3 days ago

好的,我会在本地尝试复现一下

SchrodingerFish commented 3 days ago
        // 获取数据库连接字符串
    host := os.Getenv("DATABASE_HOST")
    port := os.Getenv("DATABASE_PORT")
    user := os.Getenv("DATABASE_USER")
    password := os.Getenv("DATABASE_PASSWORD")
    dbname := os.Getenv("DATABASE_NAME")

    // 对密码进行 URL 编码
    encodedPassword := url.QueryEscape(password)

    // 构建连接字符串
    databaseURL := fmt.Sprintf("postgres://%s:%s@%s:%s/%s", user, encodedPassword, host, port, dbname)

    // 配置连接池
    config, err := pgxpool.ParseConfig(databaseURL)
    if err != nil {
        log.Fatalf("Unable to parse DATABASE_URL: %v", err)
    }

我试过这种处理可以解决这个问题

igophper commented 3 days ago

后续会修复此问题,也欢迎提pr

igophper commented 2 days ago

关于特殊字符的处理,目前来说确实存在该问题。一种不修改代码的解决方法。 使用环境变量单独定义有特殊字符的字段 如果你的密码有特殊字符,那你可以这样定义环境变量 PGPASSWORD=123456ps@wd~%^&* 然后你的SQL_DSN环境变量可以这样定义 SQL_DSN=postgres://postgres@localhost:5432/oneapi

关于postgres的环境变量可以参考 https://github.com/jackc/pgx