mirror of
https://github.com/yusufipk/RepoHub.git
synced 2026-09-11 10:36:07 +00:00
feat: add schema application to database initialization script
- Read and execute schema.sql file after database creation - Handle idempotent schema application by ignoring duplicate object errors - Maintain graceful error handling for non-critical schema conflicts
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
const { Pool } = require('pg')
|
const { Pool } = require('pg')
|
||||||
|
const fs = require('fs')
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
const DB_HOST = process.env.DB_HOST || 'localhost'
|
const DB_HOST = process.env.DB_HOST || 'localhost'
|
||||||
const DB_PORT = parseInt(process.env.DB_PORT || '5432', 10)
|
const DB_PORT = parseInt(process.env.DB_PORT || '5432', 10)
|
||||||
@@ -33,9 +35,38 @@ async function main() {
|
|||||||
} finally {
|
} finally {
|
||||||
await admin.end().catch(() => {})
|
await admin.end().catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Connect to the target DB and apply schema
|
||||||
|
const db = new Pool({
|
||||||
|
host: DB_HOST,
|
||||||
|
port: DB_PORT,
|
||||||
|
database: DB_NAME,
|
||||||
|
user: DB_USER,
|
||||||
|
password: DB_PASSWORD,
|
||||||
|
})
|
||||||
|
|
||||||
|
try {
|
||||||
|
const schemaPath = path.join(__dirname, '..', 'src', 'lib', 'database', 'schema.sql')
|
||||||
|
const schema = fs.readFileSync(schemaPath, 'utf8')
|
||||||
|
console.log('🔧 Applying schema...')
|
||||||
|
await db.query(schema)
|
||||||
|
console.log('✅ Schema applied')
|
||||||
|
} catch (err) {
|
||||||
|
// 42P07 duplicate_table, 42710 duplicate_object, 23505 unique_violation (for seed inserts)
|
||||||
|
const ignorable = new Set(['42P07', '42710', '23505'])
|
||||||
|
if (err && ignorable.has(err.code)) {
|
||||||
|
console.log('ℹ️ Schema objects already exist; skipping')
|
||||||
|
} else {
|
||||||
|
console.error('❌ Schema apply error:', err)
|
||||||
|
process.exitCode = 1
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
await db.end().catch(() => {})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
main().catch((e) => {
|
main().catch((e) => {
|
||||||
console.error('❌ init:db failed:', e)
|
console.error('❌ init:db failed:', e)
|
||||||
process.exit(1)
|
process.exit(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user