-
openwebui迁移数据库
创建一个空的 PostgreSQL 数据库。 关闭 Open WebUI。 设置 DATABASE_URL 环境变量,指向新创建的 PostgreSQL 数据库:environment:- DATABASE_URL=postgres://用户名:口令@ip:5432/数据库名- DATABASE_POOL_SIZE=10- DATABASE_POOL_MAX_OVERFLOW=20- ENABLE_OLLAMA_API=false 启动 Open WebUI 并尝试访问网站。这将强制创建数据库的表结构。 再次关闭 Open WebUI。 创建新目录:mkdir sqlite-to-postgres-migrationcd sqlite-to-postgres-migration 初始化 Node.js 项目:npm init -ynpm install sqlite3 pg 从现有的 WebUI 部署中复制 webui.db 文件。该文件位于:<webui-root>/backend/data/webui.db 在新目录中创建迁移脚本 (migrate.js),配置数据库连接信息: // Credit goes to Anthropic Claude Sonnet 3.5 for helping write this script!const sqlite3 = require('sqlite3').verbose();const { Client } = require('pg');const fs = require('fs').promises;// Configurationconst SQLITE_DB_PATH = 'webui.db'; // 改成webui.db所在目录,默认为当前目录//这里修改数据库相关信息const PG_CONFIG = { host: 'CONFIGURE ME', port: 5432, database: 'CONFIGURE ME', user: 'CONFIGURE ME', password: 'CONFIGURE ME', ssl: false};// Helper function to convert SQLite types to PostgreSQL typesfunction sqliteToPgType(sqliteType) { switch (sqliteType.toUpperCase()) { case 'INTEGER': return 'INTEGER'; case 'REAL': return 'DOUBLE PRECISION'; case 'TEXT': return 'TEXT'; case 'BLOB': return 'BYTEA'; default: return 'TEXT'; // Helper function to handle reserved keywordsfunction getSafeIdentifier(identifier) { const reservedKeywords = ['user', 'group', 'order', 'table', 'select', 'where', 'from', 'index', 'constraint']; return reservedKeywords.includes(identifier.toLowerCase()) ? `"${identifier}"` : identifier;}async function migrate() { // Connect to SQLite database const sqliteDb = new sqlite3.Database(SQLITE_DB_PATH); // Connect to PostgreSQL database const pgClient = new Client(PG_CONFIG); await pgClient.connect(); try { // Get list of tables from SQLite const tables = await new Promise((resolve, reject) => {…- 10
- 0