The officially supported PostgreSQL database adapter for Payload CMS with Drizzle ORM integration
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Migration helper functions for upgrading PostgreSQL database schemas from older versions of Payload CMS. These utilities handle schema transformation and data migration between major versions.
Migrates PostgreSQL database schemas from Payload CMS v2 format to v3 format, handling schema changes, relationship structures, and data transformations.
/**
* Migrates PostgreSQL database from Payload v2 to v3 format
* @param args - Migration arguments containing database and payload instances
* @returns Promise that resolves when migration is complete
*/
function migratePostgresV2toV3(args: MigrateUpArgs): Promise<void>;Usage Examples:
import { migratePostgresV2toV3 } from '@payloadcms/db-postgres/migration-utils';
// In a custom migration file
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
// Run the v2 to v3 migration
await migratePostgresV2toV3({ db, payload, req });
// Additional custom migration logic
console.log('Migration from v2 to v3 completed');
}// Using in production migrations configuration
import { postgresAdapter } from '@payloadcms/db-postgres';
import { migratePostgresV2toV3 } from '@payloadcms/db-postgres/migration-utils';
export default buildConfig({
db: postgresAdapter({
pool: { connectionString: process.env.DATABASE_URI },
prodMigrations: [
{
name: 'v2-to-v3-migration',
up: migratePostgresV2toV3,
down: async ({ db, payload, req }) => {
throw new Error('Downgrade from v3 to v2 not supported');
},
},
],
}),
});The v2 to v3 migration handles several key transformations:
interface MigrateUpArgs {
/** The Postgres Drizzle instance for executing SQL directly within the current transaction */
db: PostgresDB;
/** Payload CMS instance for Local API methods */
payload: Payload;
/** PayloadRequest object containing the current transaction */
req: PayloadRequest;
}
interface MigrateDownArgs {
/** The Postgres Drizzle instance for executing SQL directly within the current transaction */
db: PostgresDB;
/** Payload CMS instance for Local API methods */
payload: Payload;
/** PayloadRequest object containing the current transaction */
req: PayloadRequest;
}The migration utility includes comprehensive error handling:
// Example comprehensive migration setup
import { postgresAdapter } from '@payloadcms/db-postgres';
import { migratePostgresV2toV3 } from '@payloadcms/db-postgres/migration-utils';
export default buildConfig({
db: postgresAdapter({
pool: {
connectionString: process.env.DATABASE_URI,
max: 20, // Ensure adequate connections for migration
},
logger: console, // Enable logging for migration monitoring
prodMigrations: [
{
name: 'payload-v2-to-v3',
up: async ({ db, payload, req }) => {
console.log('Starting Payload v2 to v3 migration...');
try {
await migratePostgresV2toV3({ db, payload, req });
console.log('Migration completed successfully');
} catch (error) {
console.error('Migration failed:', error);
throw error; // This will trigger rollback
}
},
down: async ({ db, payload, req }) => {
throw new Error('Downgrade from v3 to v2 is not supported');
},
},
],
}),
});Install with Tessl CLI
npx tessl i tessl/npm-payloadcms--db-postgres