[Bug]: SQLITE_ERROR: no such column: podcast.numEpisodes #2589

Closed
opened 2026-04-25 00:08:42 +02:00 by adam · 4 comments
Owner

Originally created by @PhantomPhoton on GitHub (Feb 19, 2025).

What happened?

I upgraded to https://github.com/advplyr/audiobookshelf/pkgs/container/audiobookshelf/358241178?tag=edge version sha256:60f9357b09520445cbbeacf720c49d50212f5da6ca9f643052ab42f1e63db087 to use #3996 however my server is crashing on startup due to a missing column

What did you expect to happen?

Server to start successfully

Steps to reproduce the issue

  1. Run docker container

Audiobookshelf version

sha256:60f9357b09520445cbbeacf720c49d50212f5da6ca9f643052ab42f1e63db087

How are you running audiobookshelf?

Docker

What OS is your Audiobookshelf server hosted from?

Linux

If the issue is being seen in the UI, what browsers are you seeing the problem on?

None

Logs

Executed (default): SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;
[2025-02-18 16:08:30.944] FATAL: [Server] Unhandled rejection: Error
    at Database.<anonymous> (/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)
    at /node_modules/sequelize/lib/dialects/sqlite/query.js:183:50
    at new Promise (<anonymous>)
    at Query.run (/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)
    at /node_modules/sequelize/lib/sequelize.js:315:28
    at async SQLiteQueryInterface.select (/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)
    at async podcast.findAll (/node_modules/sequelize/lib/model.js:1140:21)
    at async Database.cleanDatabase (/server/Database.js:660:39)
    at async Database.loadData (/server/Database.js:383:5)
    at async Database.init (/server/Database.js:193:5) {
  name: 'SequelizeDatabaseError',
  parent: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] {
    errno: 1,
    code: 'SQLITE_ERROR',
    sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;"
  },
  original: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] {
    errno: 1,
    code: 'SQLITE_ERROR',
    sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;"
  },
  sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;",
  parameters: {}
}
promise: Promise {
  <rejected> Error
      at Database.<anonymous> (/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27)
      at /node_modules/sequelize/lib/dialects/sqlite/query.js:183:50
      at new Promise (<anonymous>)
      at Query.run (/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12)
      at /node_modules/sequelize/lib/sequelize.js:315:28
      at async SQLiteQueryInterface.select (/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12)
      at async podcast.findAll (/node_modules/sequelize/lib/model.js:1140:21)
      at async Database.cleanDatabase (/server/Database.js:660:39)
      at async Database.loadData (/server/Database.js:383:5)
      at async Database.init (/server/Database.js:193:5) {
    name: 'SequelizeDatabaseError',
    parent: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] {
      errno: 1,
      code: 'SQLITE_ERROR',
      sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;"
    },
    original: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] {
      errno: 1,
      code: 'SQLITE_ERROR',
      sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;"
    },
    sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;",
    parameters: {}
  }
}

Additional Notes

No response

Originally created by @PhantomPhoton on GitHub (Feb 19, 2025). ### What happened? I upgraded to https://github.com/advplyr/audiobookshelf/pkgs/container/audiobookshelf/358241178?tag=edge version sha256:60f9357b09520445cbbeacf720c49d50212f5da6ca9f643052ab42f1e63db087 to use #3996 however my server is crashing on startup due to a missing column ### What did you expect to happen? Server to start successfully ### Steps to reproduce the issue 1. Run docker container ### Audiobookshelf version sha256:60f9357b09520445cbbeacf720c49d50212f5da6ca9f643052ab42f1e63db087 ### How are you running audiobookshelf? Docker ### What OS is your Audiobookshelf server hosted from? Linux ### If the issue is being seen in the UI, what browsers are you seeing the problem on? None ### Logs ```shell Executed (default): SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL; [2025-02-18 16:08:30.944] FATAL: [Server] Unhandled rejection: Error at Database.<anonymous> (/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27) at /node_modules/sequelize/lib/dialects/sqlite/query.js:183:50 at new Promise (<anonymous>) at Query.run (/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12) at /node_modules/sequelize/lib/sequelize.js:315:28 at async SQLiteQueryInterface.select (/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12) at async podcast.findAll (/node_modules/sequelize/lib/model.js:1140:21) at async Database.cleanDatabase (/server/Database.js:660:39) at async Database.loadData (/server/Database.js:383:5) at async Database.init (/server/Database.js:193:5) { name: 'SequelizeDatabaseError', parent: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] { errno: 1, code: 'SQLITE_ERROR', sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;" }, original: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] { errno: 1, code: 'SQLITE_ERROR', sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;" }, sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;", parameters: {} } promise: Promise { <rejected> Error at Database.<anonymous> (/node_modules/sequelize/lib/dialects/sqlite/query.js:185:27) at /node_modules/sequelize/lib/dialects/sqlite/query.js:183:50 at new Promise (<anonymous>) at Query.run (/node_modules/sequelize/lib/dialects/sqlite/query.js:183:12) at /node_modules/sequelize/lib/sequelize.js:315:28 at async SQLiteQueryInterface.select (/node_modules/sequelize/lib/dialects/abstract/query-interface.js:407:12) at async podcast.findAll (/node_modules/sequelize/lib/model.js:1140:21) at async Database.cleanDatabase (/server/Database.js:660:39) at async Database.loadData (/server/Database.js:383:5) at async Database.init (/server/Database.js:193:5) { name: 'SequelizeDatabaseError', parent: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] { errno: 1, code: 'SQLITE_ERROR', sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;" }, original: [Error: SQLITE_ERROR: no such column: podcast.numEpisodes] { errno: 1, code: 'SQLITE_ERROR', sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;" }, sql: "SELECT `podcast`.`id`, `podcast`.`title`, `podcast`.`titleIgnorePrefix`, `podcast`.`author`, `podcast`.`releaseDate`, `podcast`.`feedURL`, `podcast`.`imageURL`, `podcast`.`description`, `podcast`.`itunesPageURL`, `podcast`.`itunesId`, `podcast`.`itunesArtistId`, `podcast`.`language`, `podcast`.`podcastType`, `podcast`.`explicit`, `podcast`.`autoDownloadEpisodes`, `podcast`.`autoDownloadSchedule`, `podcast`.`lastEpisodeCheck`, `podcast`.`maxEpisodesToKeep`, `podcast`.`maxNewEpisodesToDownload`, `podcast`.`coverPath`, `podcast`.`tags`, `podcast`.`genres`, `podcast`.`numEpisodes`, `podcast`.`createdAt`, `podcast`.`updatedAt`, `libraryItem`.`id` AS `libraryItem.id`, `libraryItem`.`ino` AS `libraryItem.ino`, `libraryItem`.`path` AS `libraryItem.path`, `libraryItem`.`relPath` AS `libraryItem.relPath`, `libraryItem`.`mediaId` AS `libraryItem.mediaId`, `libraryItem`.`mediaType` AS `libraryItem.mediaType`, `libraryItem`.`isFile` AS `libraryItem.isFile`, `libraryItem`.`isMissing` AS `libraryItem.isMissing`, `libraryItem`.`isInvalid` AS `libraryItem.isInvalid`, `libraryItem`.`mtime` AS `libraryItem.mtime`, `libraryItem`.`ctime` AS `libraryItem.ctime`, `libraryItem`.`birthtime` AS `libraryItem.birthtime`, `libraryItem`.`size` AS `libraryItem.size`, `libraryItem`.`lastScan` AS `libraryItem.lastScan`, `libraryItem`.`lastScanVersion` AS `libraryItem.lastScanVersion`, `libraryItem`.`libraryFiles` AS `libraryItem.libraryFiles`, `libraryItem`.`extraData` AS `libraryItem.extraData`, `libraryItem`.`title` AS `libraryItem.title`, `libraryItem`.`titleIgnorePrefix` AS `libraryItem.titleIgnorePrefix`, `libraryItem`.`createdAt` AS `libraryItem.createdAt`, `libraryItem`.`updatedAt` AS `libraryItem.updatedAt`, `libraryItem`.`libraryId` AS `libraryItem.libraryId`, `libraryItem`.`libraryFolderId` AS `libraryItem.libraryFolderId` FROM `podcasts` AS `podcast` LEFT OUTER JOIN `libraryItems` AS `libraryItem` ON `podcast`.`id` = `libraryItem`.`mediaId` AND `libraryItem`.`mediaType` = 'podcast' WHERE `libraryItem`.`id` IS NULL;", parameters: {} } } ``` ### Additional Notes _No response_
adam added the bug label 2026-04-25 00:08:42 +02:00
adam closed this issue 2026-04-25 00:08:42 +02:00
Author
Owner

@nichwall commented on GitHub (Feb 19, 2025):

The PR you referenced included a database migration to add this column, but because the version number is the same the migration manager does not detect that a migration should take place.

When running from source, you can just increase the version number in package.json to force migrations, not sure if there is a way to forcibly override that using environment variables for the edge container.

@nichwall commented on GitHub (Feb 19, 2025): The PR you referenced included a database migration to add this column, but because the version number is the same the migration manager does not detect that a migration should take place. When running from source, you can just increase the version number in `package.json` to force migrations, not sure if there is a way to forcibly override that using environment variables for the edge container.
Author
Owner

@PhantomPhoton commented on GitHub (Feb 19, 2025):

Gotcha, no worries. Was just excited to give it a go :) I'll wait until it's officially released. Thank you and apologies for the noise.

@PhantomPhoton commented on GitHub (Feb 19, 2025): Gotcha, no worries. Was just excited to give it a go :) I'll wait until it's officially released. Thank you and apologies for the noise.
Author
Owner

@nichwall commented on GitHub (Feb 19, 2025):

No worries, it definitely does raise the question of how to handle migrations in edge.

@nichwall commented on GitHub (Feb 19, 2025): No worries, it definitely does raise the question of how to handle migrations in `edge`.
Author
Owner

@nichwall commented on GitHub (Feb 20, 2025):

2.19.4 has been released, which will run the migration when you upgrade so you can upgrade to get the faster podcast pages now.

@nichwall commented on GitHub (Feb 20, 2025): 2.19.4 has been released, which will run the migration when you upgrade so you can upgrade to get the faster podcast pages now.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#2589