{"record":{"id":"b09b4ce176c1ff96","repo":"medusajs/medusa","slug":"failed-to-setup-database-install-postgresql-or-ma","errorCode":null,"errorMessage":"Failed to setup database; install PostgresQL or make sure to manage your database connection manually","messagePattern":"Failed to setup database; install PostgresQL or make sure to manage your database connection manually","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"packages/cli/medusa-cli/src/commands/new.ts","lineNumber":281,"sourceCode":"\nexport const setupDB = async (dbName, dbCreds = {}) => {\n  const credentials = Object.assign({}, defaultDBCreds, dbCreds)\n\n  const dbActivity = reporter.activity(`Setting up database \"${dbName}\"...`)\n  await createDatabase(dbName, credentials)\n    .then(() => {\n      reporter.success(dbActivity, `Created database \"${dbName}\"`)\n    })\n    .catch((err) => {\n      // Postgres raises 42P04 (duplicate_database) when the database already exists\n      if (err.code === \"42P04\") {\n        reporter.success(\n          dbActivity,\n          `Database ${dbName} already exists; skipping setup`\n        )\n      } else {\n        reporter.failure(dbActivity, `Skipping database setup.`)\n        reporter.warn(\n          `Failed to setup database; install PostgresQL or make sure to manage your database connection manually`\n        )\n        console.error(err)\n      }\n    })\n}\n\nconst setupEnvVars = async (rootPath, dbName, dbCreds = {}) => {\n  const templatePath = sysPath.join(rootPath, \".env.template\")\n  const destination = sysPath.join(rootPath, \".env\")\n  if (existsSync(templatePath)) {\n    fs.renameSync(templatePath, destination)\n  }\n\n  const credentials = Object.assign({}, defaultDBCreds, dbCreds)\n  let dbUrl = \"\"\n  if (\n    credentials.user !== defaultDBCreds.user ||","sourceCodeStart":263,"sourceCodeEnd":299,"githubUrl":"https://github.com/medusajs/medusa/blob/5e06e544a296b9033f20f71f11c559f81a0e5739/packages/cli/medusa-cli/src/commands/new.ts#L263-L299","documentation":"During `medusa new`, the CLI attempts to create and bootstrap the project database (create DB, run migrations). If that setup fails (usually because PostgreSQL is not installed/running or credentials are wrong), it warns that database setup was skipped; the project is created but the DB must be configured manually.","triggerScenarios":"medusa new executed on a machine where postgres is not installed, the server is stopped, or PGUSER/PGPASSWORD env vars do not permit creating a database.","commonSituations":"Fresh machine without Postgres; Docker postgres container not started; wrong DB connection env vars in the shell.","solutions":["Install and start PostgreSQL (or run it via Docker: docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres)","Set correct DB env vars (DATABASE_URL or PGHOST/PGUSER/PGPASSWORD) and re-run migrations: medusa db migrate","Seed the database afterwards: medusa db seed"],"exampleFix":"# before\nmedusa new my-store\n\n# after\ndocker run -d --name pg -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres\nmedusa new my-store\n# then, if skipped:\ncd my-store && medusa db migrate && medusa db seed","handlingStrategy":"fallback","validationCode":"const { Client } = require(\"pg\")\ntry {\n  await new Client({ connectionstring: process.env.DATABASE_URL }).connect()\n} catch (e) {\n  throw new Error(\"Postgres unreachable — start it before running medusa new\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Start/verify Postgres before running medusa new (pg_isready or docker ps)","Export correct DATABASE_URL / PG* env vars","After a skipped setup, run medusa db migrate and medusa db seed"],"tags":["cli","database","postgres","setup"],"backgroundTag":"database-connection-unavailable","analyzedSha":"5e06e544a296b9033f20f71f11c559f81a0e5739","analyzedAt":"2026-08-27T07:24:39.599Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}