mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 22:14:26 +01:00
Fix: Impossible to create invoice after migration from Sqlite (Close #4743)
This commit is contained in:
@@ -242,6 +242,12 @@ namespace BTCPayServer.Hosting
|
||||
settings.FileSystemStorageAsDefault = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
if (!settings.FixSeqAfterSqliteMigration)
|
||||
{
|
||||
await FixSeqAfterSqliteMigration();
|
||||
settings.FixSeqAfterSqliteMigration = true;
|
||||
await _Settings.UpdateSetting(settings);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -250,6 +256,17 @@ namespace BTCPayServer.Hosting
|
||||
}
|
||||
}
|
||||
|
||||
private async Task FixSeqAfterSqliteMigration()
|
||||
{
|
||||
await using var ctx = _DBContextFactory.CreateContext();
|
||||
if (!ctx.Database.IsNpgsql())
|
||||
return;
|
||||
var state = await ToPostgresMigrationStartupTask.GetMigrationState(ctx);
|
||||
if (state != "complete")
|
||||
return;
|
||||
await ToPostgresMigrationStartupTask.UpdateSequenceInvoiceSearch(ctx);
|
||||
}
|
||||
|
||||
#pragma warning disable CS0612 // Type or member is obsolete
|
||||
|
||||
static WalletBlobInfo GetBlobInfo(WalletData walletData)
|
||||
|
||||
@@ -264,6 +264,7 @@ namespace BTCPayServer.Hosting
|
||||
}
|
||||
await postgresContext.SaveChangesAsync();
|
||||
postgresContext.ChangeTracker.Clear();
|
||||
await UpdateSequenceInvoiceSearch(postgresContext);
|
||||
await SetMigrationState(postgresContext, migratingFrom, "complete");
|
||||
}
|
||||
otherContext.Dispose();
|
||||
@@ -273,8 +274,12 @@ namespace BTCPayServer.Hosting
|
||||
Logger.LogInformation($"Migration to postgres from {migratingFrom} successful");
|
||||
}
|
||||
|
||||
internal static async Task UpdateSequenceInvoiceSearch(ApplicationDbContext postgresContext)
|
||||
{
|
||||
await postgresContext.Database.ExecuteSqlRawAsync("SELECT SETVAL('\"InvoiceSearches_Id_seq\"', (SELECT max(\"Id\") FROM \"InvoiceSearches\"));");
|
||||
}
|
||||
|
||||
private static async Task<string?> GetMigrationState(ApplicationDbContext postgresContext)
|
||||
internal static async Task<string?> GetMigrationState(ApplicationDbContext postgresContext)
|
||||
{
|
||||
var o = (await postgresContext.Settings.FromSqlRaw("SELECT \"Id\", \"Value\" FROM \"Settings\" WHERE \"Id\"='MigrationData'").AsNoTracking().FirstOrDefaultAsync())?.Value;
|
||||
if (o is null)
|
||||
|
||||
@@ -35,5 +35,6 @@ namespace BTCPayServer.Services
|
||||
public bool MigrateEmailServerDisableTLSCerts { get; set; }
|
||||
public bool MigrateWalletColors { get; set; }
|
||||
public bool FileSystemStorageAsDefault { get; set; }
|
||||
public bool FixSeqAfterSqliteMigration { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user