Adds support for read replicas https://orm.drizzle.team/docs/read-replicas that can be used to offload read-heavy traffic. To use (both `db-postgres` and `db-vercel-postgres` are supported): ```ts import { postgresAdapter } from '@payloadcms/db-postgres' database: postgresAdapter({ pool: { connectionString: process.env.POSTGRES_URL, }, readReplicas: [process.env.POSTGRES_REPLICA_URL], }) ``` --------- Co-authored-by: Dan Ribbens <dan.ribbens@gmail.com>
119 lines
3.2 KiB
TypeScript
119 lines
3.2 KiB
TypeScript
import fs from 'fs'
|
|
import path from 'node:path'
|
|
import { fileURLToPath } from 'node:url'
|
|
|
|
const filename = fileURLToPath(import.meta.url)
|
|
const dirname = path.dirname(filename)
|
|
|
|
export const allDatabaseAdapters = {
|
|
mongodb: `
|
|
import { mongooseAdapter } from '@payloadcms/db-mongodb'
|
|
|
|
export const databaseAdapter = mongooseAdapter({
|
|
ensureIndexes: true,
|
|
// required for connect to detect that we are using a memory server
|
|
mongoMemoryServer: global._mongoMemoryServer,
|
|
url:
|
|
process.env.MONGODB_MEMORY_SERVER_URI ||
|
|
process.env.DATABASE_URI ||
|
|
'mongodb://127.0.0.1/payloadtests',
|
|
collation: {
|
|
strength: 1,
|
|
},
|
|
})`,
|
|
postgres: `
|
|
import { postgresAdapter } from '@payloadcms/db-postgres'
|
|
|
|
export const databaseAdapter = postgresAdapter({
|
|
pool: {
|
|
connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests',
|
|
},
|
|
})`,
|
|
'postgres-custom-schema': `
|
|
import { postgresAdapter } from '@payloadcms/db-postgres'
|
|
|
|
export const databaseAdapter = postgresAdapter({
|
|
pool: {
|
|
connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests',
|
|
},
|
|
schemaName: 'custom',
|
|
})`,
|
|
'postgres-uuid': `
|
|
import { postgresAdapter } from '@payloadcms/db-postgres'
|
|
|
|
export const databaseAdapter = postgresAdapter({
|
|
idType: 'uuid',
|
|
pool: {
|
|
connectionString: process.env.POSTGRES_URL || 'postgres://127.0.0.1:5432/payloadtests',
|
|
},
|
|
})`,
|
|
'postgres-read-replica': `
|
|
import { postgresAdapter } from '@payloadcms/db-postgres'
|
|
|
|
export const databaseAdapter = postgresAdapter({
|
|
pool: {
|
|
connectionString: process.env.POSTGRES_URL,
|
|
},
|
|
readReplicas: [process.env.POSTGRES_REPLICA_URL],
|
|
})
|
|
`,
|
|
'vercel-postgres-read-replica': `
|
|
import { vercelPostgresAdapter } from '@payloadcms/db-vercel-postgres'
|
|
|
|
export const databaseAdapter = vercelPostgresAdapter({
|
|
pool: {
|
|
connectionString: process.env.POSTGRES_URL,
|
|
},
|
|
readReplicas: [process.env.POSTGRES_REPLICA_URL],
|
|
})
|
|
`,
|
|
sqlite: `
|
|
import { sqliteAdapter } from '@payloadcms/db-sqlite'
|
|
|
|
export const databaseAdapter = sqliteAdapter({
|
|
client: {
|
|
url: process.env.SQLITE_URL || 'file:./payloadtests.db',
|
|
},
|
|
autoIncrement: true
|
|
})`,
|
|
'sqlite-uuid': `
|
|
import { sqliteAdapter } from '@payloadcms/db-sqlite'
|
|
|
|
export const databaseAdapter = sqliteAdapter({
|
|
idType: 'uuid',
|
|
client: {
|
|
url: process.env.SQLITE_URL || 'file:./payloadtests.db',
|
|
},
|
|
})`,
|
|
supabase: `
|
|
import { postgresAdapter } from '@payloadcms/db-postgres'
|
|
|
|
export const databaseAdapter = postgresAdapter({
|
|
pool: {
|
|
connectionString:
|
|
process.env.POSTGRES_URL || 'postgresql://postgres:postgres@127.0.0.1:54322/postgres',
|
|
},
|
|
})`,
|
|
}
|
|
|
|
/**
|
|
* Write to databaseAdapter.ts
|
|
*/
|
|
export function generateDatabaseAdapter(dbAdapter) {
|
|
const databaseAdapter = allDatabaseAdapters[dbAdapter]
|
|
if (!databaseAdapter) {
|
|
throw new Error(`Unknown database adapter: ${dbAdapter}`)
|
|
}
|
|
fs.writeFileSync(
|
|
path.resolve(dirname, 'databaseAdapter.js'),
|
|
`
|
|
// DO NOT MODIFY. This file is automatically generated by the test suite.
|
|
|
|
${databaseAdapter}
|
|
`,
|
|
)
|
|
|
|
console.log('Wrote', dbAdapter, 'db adapter')
|
|
return databaseAdapter
|
|
}
|