[GH-ISSUE #2800] Unable to upgrade from 1.16.2 to 1.17.0 - SQLite migration error #32309

Closed
opened 2026-06-15 09:42:08 -05:00 by GiteaMirror · 12 comments
Owner

Originally created by @cascer1 on GitHub (Apr 6, 2026).
Original GitHub issue: https://github.com/fosrl/pangolin/issues/2800

Originally assigned to: @oschwartz10612 on GitHub.

Describe the Bug

When starting Pangolin for the first time after upgrading from 1.16.2 to 1.17 it runs into a migration error.

pangolin  | Error running migrations: SqliteError: no such column: "roleId" - should this be a string literal in single-quotes?
pangolin  |     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)
pangolin  |     at Object.migration32 [as run] (file:///app/dist/migrations.mjs:4436:38)
pangolin  |     at executeScripts (file:///app/dist/migrations.mjs:4790:27)
pangolin  |     at async runMigrations (file:///app/dist/migrations.mjs:4747:7)
pangolin  |     at async run (file:///app/dist/migrations.mjs:4720:3)
pangolin  |     at async file:///app/dist/migrations.mjs:4718:1 {
pangolin  |   code: 'SQLITE_ERROR'
pangolin  | }

Environment

  • OS Type & Version: Fedora Server 43
  • Pangolin Version: 1.17.0
  • Gerbil Version: 1.3.0
  • Traefik Version: v3.6
  • Newt Version: N/a

To Reproduce

  1. Install version 1.16.2
  2. everything works
  3. Update pangolin version (docker compose pull)
  4. Start pangolin
  5. Error

Expected Behavior

The migration should not fail

Originally created by @cascer1 on GitHub (Apr 6, 2026). Original GitHub issue: https://github.com/fosrl/pangolin/issues/2800 Originally assigned to: @oschwartz10612 on GitHub. ### Describe the Bug When starting Pangolin for the first time after upgrading from 1.16.2 to 1.17 it runs into a migration error. ```log pangolin | Error running migrations: SqliteError: no such column: "roleId" - should this be a string literal in single-quotes? pangolin | at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) pangolin | at Object.migration32 [as run] (file:///app/dist/migrations.mjs:4436:38) pangolin | at executeScripts (file:///app/dist/migrations.mjs:4790:27) pangolin | at async runMigrations (file:///app/dist/migrations.mjs:4747:7) pangolin | at async run (file:///app/dist/migrations.mjs:4720:3) pangolin | at async file:///app/dist/migrations.mjs:4718:1 { pangolin | code: 'SQLITE_ERROR' pangolin | } ``` ### Environment - OS Type & Version: Fedora Server 43 - Pangolin Version: 1.17.0 - Gerbil Version: 1.3.0 - Traefik Version: v3.6 - Newt Version: N/a ### To Reproduce 1. Install version 1.16.2 2. everything works 3. Update pangolin version (docker compose pull) 4. Start pangolin 5. Error ### Expected Behavior The migration should not fail
GiteaMirror added the needs investigating label 2026-06-15 09:42:08 -05:00
Author
Owner

@karol-exe commented on GitHub (Apr 7, 2026):

I have the same problem

<!-- gh-comment-id:4197357839 --> @karol-exe commented on GitHub (Apr 7, 2026): I have the same problem
Author
Owner

@LaurenceJJones commented on GitHub (Apr 7, 2026):

edit here a summary of all errors and I had to do manual sqlite fixes (I wont share them until maintainers investigate further)

debug info

1.17.0 SQLite Migration Issues

1. Missing roleId column causes migration failure

SqliteError: no such column: "roleId"

Cause: Migration queries roleId from userOrgs and userInvites (lines 17-32) without checking if the column exists.

Fix: Check column existence before querying:

const columnExists = (table: string, column: string): boolean => {
    const columns = db.prepare(`PRAGMA table_info('${table}')`).all() as { name: string }[];
    return columns.some((c) => c.name === column);
};

2. Users lose org access after migration

Symptom: Users can't access their orgs after upgrade.

Cause: Role assignments should migrate from userOrgs.roleIduserOrgRoles table. If roleId column doesn't exist, userOrgRoles stays empty and users have no roles.

SELECT id, email FROM user;
SELECT orgId, name FROM orgs;
SELECT * FROM userOrgRoles;
SELECT roleId, name FROM roles;
INSERT INTO userOrgRoles (userId, orgId, roleId) VALUES ('YOUR_USER_ID', 'YOUR_ORG_ID', 1); ## 1 is default admin role
  // After migrating explicit roles, also assign defaults for users without roles
  const usersWithoutRoles = db.prepare(`
      SELECT uo.userId, uo.orgId, uo.isOwner
      FROM userOrgs uo
      LEFT JOIN userOrgRoles uor ON uo.userId = uor.userId AND uo.orgId = uor.orgId
      WHERE uor.roleId IS NULL
  `).all();

  for (const user of usersWithoutRoles) {
      const defaultRoleId = user.isOwner ? 1 : 2; // Admin for owners, Member for others
      db.prepare(`INSERT OR IGNORE INTO userOrgRoles (userId, orgId, roleId) VALUES (?, ?, ?)`)
        .run(user.userId, user.orgId, defaultRoleId);
  }

3. Runtime errors from missing tables

SqliteError: no such table: eventStreamingDestinations

Cause: If migration fails early (due to number 1), tables created later in the transaction are never created.

<!-- gh-comment-id:4198192586 --> @LaurenceJJones commented on GitHub (Apr 7, 2026): _edit_ here a summary of all errors and I had to do manual sqlite fixes (I wont share them until maintainers investigate further) <details> <summary>debug info</summary> ## 1.17.0 SQLite Migration Issues ### 1. Missing `roleId` column causes migration failure ``` SqliteError: no such column: "roleId" ``` **Cause:** Migration queries `roleId` from `userOrgs` and `userInvites` (lines 17-32) without checking if the column exists. **Fix:** Check column existence before querying: ```typescript const columnExists = (table: string, column: string): boolean => { const columns = db.prepare(`PRAGMA table_info('${table}')`).all() as { name: string }[]; return columns.some((c) => c.name === column); }; ``` --- ### 2. Users lose org access after migration **Symptom:** Users can't access their orgs after upgrade. **Cause:** Role assignments should migrate from `userOrgs.roleId` → `userOrgRoles` table. If `roleId` column doesn't exist, `userOrgRoles` stays empty and users have no roles. ```sql SELECT id, email FROM user; SELECT orgId, name FROM orgs; SELECT * FROM userOrgRoles; SELECT roleId, name FROM roles; ``` ```sql INSERT INTO userOrgRoles (userId, orgId, roleId) VALUES ('YOUR_USER_ID', 'YOUR_ORG_ID', 1); ## 1 is default admin role ``` ```js // After migrating explicit roles, also assign defaults for users without roles const usersWithoutRoles = db.prepare(` SELECT uo.userId, uo.orgId, uo.isOwner FROM userOrgs uo LEFT JOIN userOrgRoles uor ON uo.userId = uor.userId AND uo.orgId = uor.orgId WHERE uor.roleId IS NULL `).all(); for (const user of usersWithoutRoles) { const defaultRoleId = user.isOwner ? 1 : 2; // Admin for owners, Member for others db.prepare(`INSERT OR IGNORE INTO userOrgRoles (userId, orgId, roleId) VALUES (?, ?, ?)`) .run(user.userId, user.orgId, defaultRoleId); } ``` --- ### 3. Runtime errors from missing tables ``` SqliteError: no such table: eventStreamingDestinations ``` **Cause:** If migration fails early (due to number 1), tables created later in the transaction are never created. </details>
Author
Owner

@crisidev commented on GitHub (Apr 7, 2026):

I am having similar issues, specifically the first thing that fails for me is:

│ SqliteError: no such column: "settingsLogRetentionDaysConnection" - should this be a string literal in single-quotes?                                                                                                                      │
│     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)                                                                                                                                                    │
│     at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28)                                                                                                                                            │
│     at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15)                                                                                                                                       │
│     at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85)                                                                                                                                       │
│     at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15)                                                                                                                                            │
│     at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15)                                                                                                                                        │
│     at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15)                                                                                                                                                                │
│     at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {                                                                                                                                                       │
│   code: 'SQLITE_ERROR'                                                                                                                                                                                                                     │
│ }                       

And then it trickles down to the same errors @LaurenceJJones shows in their debug:

│ 2026-04-07T16:47:06+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations                                                                                                             │
│ Stack: SqliteError: no such table: eventStreamingDestinations                                                                                                                                                                              │
│     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)                                                                                                                                                    │
│     at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28)                                                                                                                                            │
│     at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15)                                                                                                                                       │
│     at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85)                                                                                                                                       │
│     at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15)                                                                                                                                            │
│     at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15)                                                                                                                                        │
│     at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15)                                                                                                                                                                │
│     at runNextTicks (node:internal/process/task_queues:65:5)                                                                                                                                                                               │
│     at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"}   

I have reverted to 0.16.2 for now.

<!-- gh-comment-id:4200740603 --> @crisidev commented on GitHub (Apr 7, 2026): I am having similar issues, specifically the first thing that fails for me is: ``` │ SqliteError: no such column: "settingsLogRetentionDaysConnection" - should this be a string literal in single-quotes? │ │ at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) │ │ at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28) │ │ at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15) │ │ at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85) │ │ at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15) │ │ at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15) │ │ at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15) │ │ at process.processTicksAndRejections (node:internal/process/task_queues:104:5) { │ │ code: 'SQLITE_ERROR' │ │ } ``` And then it trickles down to the same errors @LaurenceJJones shows in their debug: ``` │ 2026-04-07T16:47:06+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations │ │ Stack: SqliteError: no such table: eventStreamingDestinations │ │ at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) │ │ at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28) │ │ at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15) │ │ at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85) │ │ at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15) │ │ at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15) │ │ at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15) │ │ at runNextTicks (node:internal/process/task_queues:65:5) │ │ at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"} ``` I have reverted to 0.16.2 for now.
Author
Owner

@oschwartz10612 commented on GitHub (Apr 7, 2026):

Hey @cascer1 or @crisidev do you have any more logs you could scroll up and send the whole chunk from where it says "starting migrations"?

<!-- gh-comment-id:4200895287 --> @oschwartz10612 commented on GitHub (Apr 7, 2026): Hey @cascer1 or @crisidev do you have any more logs you could scroll up and send the whole chunk from where it says "starting migrations"?
Author
Owner

@crisidev commented on GitHub (Apr 7, 2026):

I'll redeploy when I am home later and send the full logs, but the first sqlite exception is just after the line where it says migrations to version xyz done.

<!-- gh-comment-id:4200912558 --> @crisidev commented on GitHub (Apr 7, 2026): I'll redeploy when I am home later and send the full logs, but the first sqlite exception is just after the line where it says migrations to version xyz done.
Author
Owner

@crisidev commented on GitHub (Apr 8, 2026):

@oschwartz10612 full error logs after retrying to deploy 0.17.0:

│                                                                                                                                                                                                                                            │
│ > @fosrl/pangolin@0.0.0 start                                                                                                                                                                                                              │
│ > ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs                                                                                                             │
│                                                                                                                                                                                                                                            │
│ Starting migrations from version 1.17.0                                                                                                                                                                                                    │
│ Migrations to run:                                                                                                                                                                                                                         │
│ All migrations completed successfully                                                                                                                                                                                                      │
│ 2026-04-08T15:08:28+00:00 [info[]: Ping accumulator started (flush interval: 10000ms)                                                                                                                                                      │
│ SqliteError: no such column: "settingsLogRetentionDaysConnection" - should this be a string literal in single-quotes?                                                                                                                      │
│     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)                                                                                                                                                    │
│     at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28)                                                                                                                                            │
│     at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15)                                                                                                                                       │
│     at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85)                                                                                                                                       │
│     at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15)                                                                                                                                            │
│     at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15)                                                                                                                                        │
│     at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15)                                                                                                                                                                │
│     at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {                                                                                                                                                       │
│   code: 'SQLITE_ERROR'                                                                                                                                                                                                                     │
│ }                                                                                                                                                                                                                                          │
│ 2026-04-08T15:08:58+00:00 [info[]: Marking site 1 offline: newt m06g4fu89r8nahy has no recent ping and no active WebSocket connection                                                                                                      │
│ 2026-04-08T15:08:58+00:00 [error[]: Error in newt offline checker interval {"error":{"code":"SQLITE_ERROR"}}                                                                                                                               │
│ 2026-04-08T15:08:58+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations                                                                                                             │
│ Stack: SqliteError: no such table: eventStreamingDestinations                                                                                                                                                                              │
│     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)                                                                                                                                                    │
│     at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28)                                                                                                                                            │
│     at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15)                                                                                                                                       │
│     at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85)                                                                                                                                       │
│     at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15)                                                                                                                                            │
│     at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15)                                                                                                                                        │
│     at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15)                                                                                                                                                                │
│     at runNextTicks (node:internal/process/task_queues:65:5)                                                                                                                                                                               │
│     at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"}                                                                                                                                                          │
│ 2026-04-08T15:09:28+00:00 [info[]: Marking site 1 offline: newt m06g4fu89r8nahy has no recent ping and no active WebSocket connection                                                                                                      │
│ 2026-04-08T15:09:28+00:00 [error[]: Error in newt offline checker interval {"error":{"code":"SQLITE_ERROR"}}                                                                                                                               │
│ 2026-04-08T15:09:28+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations                                                                                                             │
│ Stack: SqliteError: no such table: eventStreamingDestinations                                                                                                                                                                              │
│     at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21)                                                                                                                                                    │
│     at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28)                                                                                                                                            │
│     at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15)                                                                                                                                       │
│     at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85)                                                                                                                                       │
│     at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15)                                                                                                                                            │
│     at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15)                                                                                                                                        │
│     at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15)                                                                                                                                                                │
│     at runNextTicks (node:internal/process/task_queues:65:5)                                                                                                                                                                               │
│     at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"}       
<!-- gh-comment-id:4207300226 --> @crisidev commented on GitHub (Apr 8, 2026): @oschwartz10612 full error logs after retrying to deploy 0.17.0: ``` │ │ │ > @fosrl/pangolin@0.0.0 start │ │ > ENVIRONMENT=prod node dist/migrations.mjs && ENVIRONMENT=prod NODE_ENV=development node --enable-source-maps dist/server.mjs │ │ │ │ Starting migrations from version 1.17.0 │ │ Migrations to run: │ │ All migrations completed successfully │ │ 2026-04-08T15:08:28+00:00 [info[]: Ping accumulator started (flush interval: 10000ms) │ │ SqliteError: no such column: "settingsLogRetentionDaysConnection" - should this be a string literal in single-quotes? │ │ at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) │ │ at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28) │ │ at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15) │ │ at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85) │ │ at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15) │ │ at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15) │ │ at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15) │ │ at process.processTicksAndRejections (node:internal/process/task_queues:104:5) { │ │ code: 'SQLITE_ERROR' │ │ } │ │ 2026-04-08T15:08:58+00:00 [info[]: Marking site 1 offline: newt m06g4fu89r8nahy has no recent ping and no active WebSocket connection │ │ 2026-04-08T15:08:58+00:00 [error[]: Error in newt offline checker interval {"error":{"code":"SQLITE_ERROR"}} │ │ 2026-04-08T15:08:58+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations │ │ Stack: SqliteError: no such table: eventStreamingDestinations │ │ at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) │ │ at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28) │ │ at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15) │ │ at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85) │ │ at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15) │ │ at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15) │ │ at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15) │ │ at runNextTicks (node:internal/process/task_queues:65:5) │ │ at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"} │ │ 2026-04-08T15:09:28+00:00 [info[]: Marking site 1 offline: newt m06g4fu89r8nahy has no recent ping and no active WebSocket connection │ │ 2026-04-08T15:09:28+00:00 [error[]: Error in newt offline checker interval {"error":{"code":"SQLITE_ERROR"}} │ │ 2026-04-08T15:09:28+00:00 [error[]: LogStreamingManager: failed to load destinations no such table: eventStreamingDestinations │ │ Stack: SqliteError: no such table: eventStreamingDestinations │ │ at Database.prepare (/app/node_modules/better-sqlite3/lib/methods/wrappers.js:5:21) │ │ at BetterSQLiteSession.prepareQuery (/app/node_modules/src/better-sqlite3/session.ts:60:28) │ │ at BetterSQLiteSession.prepareOneTimeQuery (/app/node_modules/src/sqlite-core/session.ts:250:15) │ │ at SQLiteSelectBase._prepare (/app/node_modules/src/sqlite-core/query-builders/select.ts:916:85) │ │ at SQLiteSelectBase.all (/app/node_modules/src/sqlite-core/query-builders/select.ts:950:15) │ │ at SQLiteSelectBase.execute (/app/node_modules/src/sqlite-core/query-builders/select.ts:962:15) │ │ at SQLiteSelectBase.then (/app/node_modules/src/query-promise.ts:31:15) │ │ at runNextTicks (node:internal/process/task_queues:65:5) │ │ at process.processTimers (node:internal/timers:538:9) {"code":"SQLITE_ERROR"} ```
Author
Owner

@oschwartz10612 commented on GitHub (Apr 8, 2026):

Yeah this is because it has already failed the migration previously and
thinks it does not need to run it again. Do you have a backup of your
1.16.2 database? If so can you shut it down, load the old db, then
restart with the whole output?

<!-- gh-comment-id:4207659012 --> @oschwartz10612 commented on GitHub (Apr 8, 2026): Yeah this is because it has already failed the migration previously and thinks it does not need to run it again. Do you have a backup of your 1.16.2 database? If so can you shut it down, load the old db, then restart with the whole output?
Author
Owner

@cascer1 commented on GitHub (Apr 9, 2026):

Here are the complete logs of the first startup of 1.17 using the 1.16.2 database.

When starting (using docker compose up -d) it seems to hang indefinitely on the pangolin service. After one minute, I interrupted the process to collect the log. It looks like this output is generated in the first few seconds and after that nothing else is logged.

https://gist.github.com/cascer1/ed7b9ac12d35e5559795f360e47119fc

<!-- gh-comment-id:4211866189 --> @cascer1 commented on GitHub (Apr 9, 2026): Here are the complete logs of the first startup of 1.17 using the 1.16.2 database. When starting (using `docker compose up -d`) it seems to hang indefinitely on the pangolin service. After one minute, I interrupted the process to collect the log. It looks like this output is generated in the first few seconds and after that nothing else is logged. https://gist.github.com/cascer1/ed7b9ac12d35e5559795f360e47119fc
Author
Owner

@oschwartz10612 commented on GitHub (Apr 9, 2026):

Great thank you so much! This is what we saw in the discord thread as
well so now we have two pieces of evidence that this is a problem. I
will work on the patch.

<!-- gh-comment-id:4214941138 --> @oschwartz10612 commented on GitHub (Apr 9, 2026): Great thank you so much! This is what we saw in the discord thread as well so now we have two pieces of evidence that this is a problem. I will work on the patch.
Author
Owner

@oschwartz10612 commented on GitHub (Apr 14, 2026):

This was adjusted I believe in the 1.17.1 so if you use that to go up from 1.16 it should work. Feel free to reopen if not.

<!-- gh-comment-id:4245757725 --> @oschwartz10612 commented on GitHub (Apr 14, 2026): This was adjusted I believe in the 1.17.1 so if you use that to go up from 1.16 it _should work_. Feel free to reopen if not.
Author
Owner

@crisidev commented on GitHub (Apr 15, 2026):

I was able to upgrade from an old db on 1.16.2 and it worked properly with 1.17.1.

<!-- gh-comment-id:4253502547 --> @crisidev commented on GitHub (Apr 15, 2026): I was able to upgrade from an old db on 1.16.2 and it worked properly with 1.17.1.
Author
Owner

@sadorowo commented on GitHub (Apr 20, 2026):

In case someone who is using NixOS has already rebuilt their system and don't want to wait for a fix, here's a quick patch, add this to your overlays (assuming you have parameters named as final and prev)

fosrl-pangolin = prev.fosrl-pangolin.overrideAttrs (old: {
  version = "1.17.1";

  src = prev.fetchFromGitHub {
    owner = "fosrl";
    repo = "pangolin";
    tag = "1.17.1";
    sha256 = "sha256-V1yOSFN2g5MHPIXF/UFymgXrfN5tE99cuIFnWpdCVCA=";
  };
});
<!-- gh-comment-id:4281073753 --> @sadorowo commented on GitHub (Apr 20, 2026): In case someone who is using NixOS has already rebuilt their system and don't want to wait for a fix, here's a quick patch, add this to your overlays (assuming you have parameters named as `final` and `prev`) ```nix fosrl-pangolin = prev.fosrl-pangolin.overrideAttrs (old: { version = "1.17.1"; src = prev.fetchFromGitHub { owner = "fosrl"; repo = "pangolin"; tag = "1.17.1"; sha256 = "sha256-V1yOSFN2g5MHPIXF/UFymgXrfN5tE99cuIFnWpdCVCA="; }; }); ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/pangolin#32309