expressSandbox/PG/knex.js
2024-12-09 18:00:39 +08:00

78 lines
1.7 KiB
JavaScript

const knex = require('knex')({
client: 'pg',
connection: {
host: 'yhm.ink',
user: 'postgres',
password: '123456',
database: 'sandbox',
port: 54321,
},
// connection:`postgres://postgres:123456@yhm.ink:54321/sandbox`
})
async function createTableIfNotExist({ tableName, columns }) {
const exists = await knex.schema.hasTable(tableName)
if (!exists) {
await knex.schema.createTable(tableName, (table) => {
table.increments('id').primary()
table.timestamp('created_at').defaultTo(knex.fn.now())
table.timestamp('updated_at').defaultTo(knex.fn.now())
columns.forEach((column) => {
const { name, type, references } = column
const tableExist = table[type](name)
references && tableExist.references(references).onDelete('CASCADE')
})
})
console.log(`table ${tableName} created`)
} else {
console.log(`table ${tableName} exists`)
}
}
async function createTables(tables) {
for (const table of tables) {
await createTableIfNotExist(table)
}
}
const tables = [
{
tableName: 'types',
columns: [
{ name: 'name', type: 'string' },
{ name: 'parent_id', type: 'integer', references: 'types.id' },
],
},
{
tableName: 'codes',
columns: [
{
name: 'type_id',
type: 'integer',
references: 'types.id',
},
{
name: 'title',
type: 'string',
},
{
name: 'description',
type: 'string',
},
{
name: 'code',
type: 'json',
},
{
name: 'preview',
type: 'text',
},
],
},
]
createTables(tables)
module.exports = {
knex,
}