Files
SnapOtter/apps/docs/hi/guide/database.md
T
SnapOtterandGitHub 5558cf18b8 docs(guide): describe both library save modes in database.md and architecture.md (#580)
Closes #578. Rewrites the user file library save-mode description in the English database.md and architecture.md guides (independent-new by default, parent-linked on overwrite) and updates all 20 translated copies of each, with i18n_source_hash re-stamped so the parity gate stays green.
2026-07-19 22:59:34 +08:00

12 KiB

description, i18n_source_hash, i18n_provenance, i18n_output_hash
description i18n_source_hash i18n_provenance i18n_output_hash
SnapOtter के लिए PostgreSQL डेटाबेस स्कीमा, टेबल, माइग्रेशन और बैकअप प्रक्रियाएँ। 50d5d4f220cf human 5592d4435806

डेटाबेस

SnapOtter डेटा स्थायित्व के लिए Drizzle ORM (pg-core / node-postgres) के साथ PostgreSQL 17 का उपयोग करता है। स्कीमा apps/api/src/db/schema.ts में परिभाषित है।

कनेक्शन DATABASE_URL एनवायरनमेंट वेरिएबल के माध्यम से कॉन्फ़िगर किया जाता है (डिफ़ॉल्ट postgres://snapotter:snapotter@postgres:5432/snapotter)। Docker Compose में, Postgres कंटेनर अपना डेटा SnapOtter-pgdata नामित वॉल्यूम में संग्रहीत करता है।

टेबल

users

उपयोगकर्ता खातों को संग्रहीत करता है। DEFAULT_USERNAME और DEFAULT_PASSWORD से पहले रन पर स्वचालित रूप से बनाया जाता है।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
username varchar अद्वितीय, आवश्यक
passwordHash varchar scrypt हैश
role varchar admin, editor, या user
mustChangePassword boolean अनिवार्य पासवर्ड रीसेट फ़्लैग
createdAt timestamp बनाने का समय
updatedAt timestamp अंतिम अपडेट समय

sessions

सक्रिय लॉगिन सत्र। प्रत्येक पंक्ति एक सत्र टोकन को एक उपयोगकर्ता से जोड़ती है।

कॉलम प्रकार नोट्स
id varchar प्राथमिक कुंजी (सत्र टोकन)
userId uuid users.id के लिए फ़ॉरेन कुंजी
expiresAt timestamp समाप्ति समय
createdAt timestamp बनाने का समय

teams

उपयोगकर्ताओं को व्यवस्थित करने के लिए समूह। एडमिन उपयोगकर्ताओं को टीमों में असाइन कर सकते हैं।

कॉलम प्रकार विवरण
id uuid प्राथमिक कुंजी
name varchar (अद्वितीय, अधिकतम 50 वर्ण) टीम का नाम
createdAt timestamp बनाने का समय

api_keys

प्रोग्रामेटिक एक्सेस के लिए API कुंजियाँ। कच्ची कुंजी निर्माण पर एक बार दिखाई जाती है; केवल हैश संग्रहीत किया जाता है।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
userId uuid users.id के लिए फ़ॉरेन कुंजी
keyHash varchar कुंजी का scrypt हैश
name varchar उपयोगकर्ता द्वारा दिया गया लेबल
createdAt timestamp बनाने का समय
lastUsedAt timestamp प्रत्येक प्रमाणित अनुरोध पर अपडेट किया जाता है

कुंजियाँ si_ से उपसर्गित होती हैं जिसके बाद 96 हेक्स वर्ण होते हैं (48 रैंडम बाइट्स)।

pipelines

सहेजे गए टूल चेन जिन्हें उपयोगकर्ता UI में बनाते हैं।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
name varchar पाइपलाइन का नाम
description varchar वैकल्पिक विवरण
steps jsonb { toolId, settings } ऑब्जेक्ट का ऐरे
createdAt timestamp बनाने का समय

user_files

स्थायी फ़ाइल लाइब्रेरी। सहेजा गया संपादन डिफ़ॉल्ट रूप से एक स्वतंत्र रूट पंक्ति के रूप में डाला जाता है ("नई के रूप में सहेजें": version 1, parentId null, ताकि मूल सूचीबद्ध रहे), या जब आप मूल को अधिलेखित करते हैं तो एक पैरेंट-लिंक्ड संस्करण के रूप में (parentId सेट, version बढ़ा हुआ, उसे प्रतिस्थापित करते हुए)। toolChain कॉलम लागू किए गए टूल को रिकॉर्ड करता है।

कॉलम प्रकार विवरण
id uuid प्राथमिक कुंजी
userId uuid users के लिए FK (CASCADE DELETE)
originalName varchar मूल अपलोड फ़ाइलनाम
storedName varchar डिस्क पर फ़ाइलनाम
mimeType varchar MIME प्रकार
size integer बाइट्स में फ़ाइल का आकार
width integer px में छवि की चौड़ाई
height integer px में छवि की ऊँचाई
version integer संस्करण संख्या (1 = मूल)
parentId uuid या null user_files के लिए FK (पैरेंट संस्करण)
toolChain jsonb इस संस्करण को बनाने के लिए क्रम में लागू किए गए टूल ID
createdAt timestamp बनाने का समय

jobs

प्रगति रिपोर्टिंग और सफ़ाई के लिए प्रोसेसिंग जॉब को ट्रैक करता है।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
type varchar टूल या पाइपलाइन पहचानकर्ता
status varchar queued, processing, completed, या failed
progress real 0.0-1.0 अंश
inputFiles jsonb इनपुट फ़ाइल पथों का ऐरे
outputPath varchar परिणाम फ़ाइल का पथ
settings jsonb उपयोग की गई टूल सेटिंग्स
error varchar विफल होने पर त्रुटि संदेश
createdAt timestamp बनाने का समय
completedAt timestamp पूर्ण होने का समय

settings

सर्वर-व्यापी सेटिंग्स के लिए की-वैल्यू स्टोर जिन्हें एडमिन UI से बदल सकते हैं।

कॉलम प्रकार नोट्स
key varchar प्राथमिक कुंजी
value varchar सेटिंग मान
updatedAt timestamp अंतिम अपडेट समय

roles

सूक्ष्म अनुमतियों वाली कस्टम भूमिकाएँ।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
name varchar अद्वितीय भूमिका नाम
description varchar वैकल्पिक विवरण
permissions jsonb अनुमति स्ट्रिंग्स का ऐरे
createdAt timestamp बनाने का समय

audit_log

सुरक्षा-प्रासंगिक क्रिया लॉग।

कॉलम प्रकार नोट्स
id uuid प्राथमिक कुंजी
userId uuid users के लिए FK
action varchar क्रिया प्रकार
details jsonb क्रिया-विशिष्ट डेटा
createdAt timestamp क्रिया का समय

माइग्रेशन

Drizzle स्कीमा माइग्रेशन संभालता है। माइग्रेशन फ़ाइलें apps/api/drizzle/ में रहती हैं। विकास के दौरान:

cd apps/api
npx drizzle-kit generate   # generate a migration from schema changes
npx drizzle-kit migrate    # apply pending migrations

प्रोडक्शन में, लंबित माइग्रेशन स्टार्टअप पर स्वचालित रूप से लागू किए जाते हैं।

बैकअप और रिस्टोर

रिलेशनल डेटाबेस Postgres कंटेनर के SnapOtter-pgdata वॉल्यूम में रहता है, ऐप के /data वॉल्यूम में नहीं।

विकल्प 1: pg_dump (अनुशंसित)

# Dump the database while the stack is running
docker exec SnapOtter-postgres pg_dump -U snapotter snapotter > backup.sql

# Restore into a fresh database
cat backup.sql | docker exec -i SnapOtter-postgres psql -U snapotter snapotter

विकल्प 2: वॉल्यूम स्नैपशॉट

# Stop the stack, then snapshot the pgdata volume
docker compose down
docker run --rm -v SnapOtter-pgdata:/data -v $(pwd)/backup:/backup \
  alpine tar czf /backup/snapotter-pgdata.tar.gz -C /data .

1.x (SQLite) से माइग्रेट करना

SnapOtter 1.x से अपग्रेड करने की अपनी अलग गाइड है: Upgrading from 1.x to 2.0 देखें। संक्षेप में, अपने मौजूदा /data वॉल्यूम का पुनः उपयोग करें और 2.0 पहले बूट पर /data/snapotter.db का स्वतः पता लगाकर उसे इम्पोर्ट करता है (या इसे स्पष्ट रूप से इंगित करने के लिए SQLITE_MIGRATE_PATH सेट करें)। पहले पूरे /data वॉल्यूम का बैकअप लें, केवल snapotter.db का नहीं: 1.x SQLite WAL मोड का उपयोग करता है, इसलिए एक रुका हुआ कंटेनर अक्सर अपना अधिकांश डेटा एक लगभग-खाली snapotter.db के बगल में snapotter.db-wal में छोड़ देता है।