{"id":48900,"library":"pg-diff-api","title":"pg-diff-api","description":"PostgreSQL migration strategy for NodeJS that provides APIs to diff and migrate PostgreSQL schemas and data. Version 1.5.3, released under MIT license. It offers programmatic schema comparison and migration generation, unlike CLI-based alternatives. Features include comparison of database schemas, generation of migration scripts, and support for complex schema objects. Suitable for Node.js >= 8.11.1. Active maintenance with recent releases.","status":"active","version":"1.5.3","language":"javascript","source_language":"en","source_url":"https://github.com/michaelsogos/pg-diff-api","tags":["javascript","pg","pg-diff","postgre","postgresql","sql","diff","api","pgsql"],"install":[{"cmd":"npm install pg-diff-api","lang":"bash","label":"npm"},{"cmd":"yarn add pg-diff-api","lang":"bash","label":"yarn"},{"cmd":"pnpm add pg-diff-api","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"PostgreSQL client for database connections","package":"pg","optional":false}],"imports":[{"note":"ESM default export available since v1.5, but named export also works.","wrong":"const PgDiffApi = require('pg-diff-api').PgDiffApi","symbol":"PgDiffApi","correct":"import { PgDiffApi } from 'pg-diff-api'"},{"note":"Function exported directly; do not confuse with other functions.","wrong":"import { compare } from 'pg-diff-api'","symbol":"compareSchemas","correct":"import { compareSchemas } from 'pg-diff-api'"},{"note":"Exact function name as per documentation.","wrong":"import { createMigration } from 'pg-diff-api'","symbol":"generateMigration","correct":"import { generateMigration } from 'pg-diff-api'"}],"quickstart":{"code":"import { PgDiffApi } from 'pg-diff-api';\nimport { Client } from 'pg';\n\nconst sourceClient = new Client({\n  host: 'localhost',\n  port: 5432,\n  database: 'source_db',\n  user: 'user',\n  password: process.env.DB_PASS ?? '',\n});\n\nconst targetClient = new Client({\n  host: 'localhost',\n  port: 5432,\n  database: 'target_db',\n  user: 'user',\n  password: process.env.DB_PASS ?? '',\n});\n\nasync function run() {\n  await sourceClient.connect();\n  await targetClient.connect();\n\n  const api = new PgDiffApi({ client: sourceClient });\n  const diff = await api.compareSchemas(targetClient);\n  console.log('Differences:', JSON.stringify(diff, null, 2));\n\n  const migration = await api.generateMigration(diff);\n  console.log('Migration SQL:', migration);\n\n  await sourceClient.end();\n  await targetClient.end();\n}\n\nrun().catch(console.error);","lang":"typescript","description":"Connects to two PostgreSQL databases, compares their schemas, and generates a migration SQL script."},"warnings":[{"fix":"Update to use async/await or .then() syntax.","message":"In version 1.5.0, the API changed from callback-based to Promise-based. Old code using callbacks will break.","severity":"breaking","affected_versions":"<1.5.0"},{"fix":"Pass a pg Client object instead of a connection string.","message":"Direct use of pg connection strings in PgDiffApi constructor is deprecated. Use pg Client instance instead.","severity":"deprecated","affected_versions":">=1.4.0"},{"fix":"Ensure you pass a different target client (even if same database, create a new connection).","message":"The compareSchemas method requires both source and target clients; defaulting to same client may produce empty diff.","severity":"gotcha","affected_versions":"all"},{"fix":"Update code to handle object with properties like 'tables', 'columns', etc.","message":"In version 1.3.0, the output format of compareSchemas changed from an array to an object.","severity":"breaking","affected_versions":"<1.3.0"}],"env_vars":null,"search_vec":"'1.5.3':22 '8.11.1':59 'activ':60 'altern':39 'api':4,12,74 'base':38 'cli':37 'cli-bas':36 'comparison':31,42 'complex':53 'data':20 'databas':44 'diff':3,14,69,73 'featur':40 'generat':34,46 'includ':41 'javascript':65 'licens':26 'mainten':61 'migrat':6,16,33,48 'mit':25 'node.js':58 'nodej':9 'object':55 'offer':28 'pg':2,66,68 'pg-diff':67 'pg-diff-api':1 'pgsql':75 'postgr':70 'postgresql':5,17,71 'programmat':29 'provid':11 'recent':63 'releas':23,64 'schema':18,30,45,54 'script':49 'sql':72 'strategi':7 'suitabl':56 'support':51 'unlik':35 'version':21","created_at":"2026-06-07T16:59:02.414906+00:00","updated_at":"2026-06-07T16:59:02.414906+00:00","problems":[{"fix":"Use 'import { PgDiffApi } from 'pg-diff-api'' instead of 'import PgDiffApi from ...'","cause":"Importing incorrectly (e.g., default vs named import).","error":"TypeError: PgDiffApi is not a constructor"},{"fix":"Run 'npm install pg' and ensure it's the correct version (compatible with pg-diff-api).","cause":"Missing or incorrect version of pg dependency.","error":"Error: Cannot find module 'pg'"},{"fix":"Create a new Client object and connect before passing to PgDiffApi.","cause":"Passing a connection string instead of a pg Client instance.","error":"TypeError: sourceClient.connect is not a function"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/michaelsogos/pg-diff-api#readme","github":"https://github.com/michaelsogos/pg-diff-api","docs":null,"changelog":null,"pypi":null,"npm":"pg-diff-api","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}