From 26afcb0071e7fa19f73c2de1497572672f66be53 Mon Sep 17 00:00:00 2001
From: Robin Dadswell <19610103+RobinDadswell@users.noreply.github.com>
Date: Mon, 18 Jul 2022 14:57:15 +0100
Subject: [PATCH] Fixed: PostgreSQL timezone issues
(cherry picked from commit d55864f86914199aa0c4ee37df1e42e6ad71ef4f)
---
azure-pipelines.yml | 2 +
src/NuGet.config | 1 +
.../Datastore/DatabaseFixture.cs | 14 +++++++
...date_timestamp_columns_to_with_timezone.cs | 39 +++++++++++++++++++
src/NzbDrone.Core/Prowlarr.Core.csproj | 6 +--
5 files changed, 59 insertions(+), 3 deletions(-)
create mode 100644 src/NzbDrone.Core/Datastore/Migration/036_postgres_update_timestamp_columns_to_with_timezone.cs
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 133bdf4fe..859ba9fd3 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -565,6 +565,7 @@ stages:
-e POSTGRES_PASSWORD=prowlarr \
-e POSTGRES_USER=prowlarr \
-p 5432:5432/tcp \
+ -v /usr/share/zoneinfo/America/Chicago:/etc/localtime:ro \
postgres:14
displayName: Start postgres
- bash: |
@@ -710,6 +711,7 @@ stages:
-e POSTGRES_PASSWORD=prowlarr \
-e POSTGRES_USER=prowlarr \
-p 5432:5432/tcp \
+ -v /usr/share/zoneinfo/America/Chicago:/etc/localtime:ro \
postgres:14
displayName: Start postgres
- bash: |
diff --git a/src/NuGet.config b/src/NuGet.config
index 19fea7384..fcbd8bafb 100644
--- a/src/NuGet.config
+++ b/src/NuGet.config
@@ -7,5 +7,6 @@
+
diff --git a/src/NzbDrone.Core.Test/Datastore/DatabaseFixture.cs b/src/NzbDrone.Core.Test/Datastore/DatabaseFixture.cs
index 985fbb7d5..7f8a157b0 100644
--- a/src/NzbDrone.Core.Test/Datastore/DatabaseFixture.cs
+++ b/src/NzbDrone.Core.Test/Datastore/DatabaseFixture.cs
@@ -27,6 +27,20 @@ namespace NzbDrone.Core.Test.Datastore
Mocker.Resolve().Vacuum();
}
+ [Test]
+ public void postgres_should_not_contain_timestamp_without_timezone_columns()
+ {
+ if (Db.DatabaseType != DatabaseType.PostgreSQL)
+ {
+ return;
+ }
+
+ Mocker.Resolve()
+ .OpenConnection().Query("SELECT table_name, column_name, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = 'public' AND data_type = 'timestamp without time zone'")
+ .Should()
+ .BeNullOrEmpty();
+ }
+
[Test]
public void get_version()
{
diff --git a/src/NzbDrone.Core/Datastore/Migration/036_postgres_update_timestamp_columns_to_with_timezone.cs b/src/NzbDrone.Core/Datastore/Migration/036_postgres_update_timestamp_columns_to_with_timezone.cs
new file mode 100644
index 000000000..8a2d6fe9a
--- /dev/null
+++ b/src/NzbDrone.Core/Datastore/Migration/036_postgres_update_timestamp_columns_to_with_timezone.cs
@@ -0,0 +1,39 @@
+using FluentMigrator;
+using NzbDrone.Core.Datastore.Migration.Framework;
+
+namespace NzbDrone.Core.Datastore.Migration
+{
+ [Migration(036)]
+ public class postgres_update_timestamp_columns_to_with_timezone : NzbDroneMigrationBase
+ {
+ protected override void MainDbUpgrade()
+ {
+ Alter.Table("ApplicationStatus").AlterColumn("InitialFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("ApplicationStatus").AlterColumn("MostRecentFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("ApplicationStatus").AlterColumn("DisabledTill").AsDateTimeOffset().Nullable();
+ Alter.Table("Commands").AlterColumn("QueuedAt").AsDateTimeOffset().NotNullable();
+ Alter.Table("Commands").AlterColumn("StartedAt").AsDateTimeOffset().Nullable();
+ Alter.Table("Commands").AlterColumn("EndedAt").AsDateTimeOffset().Nullable();
+ Alter.Table("DownloadClientStatus").AlterColumn("InitialFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("DownloadClientStatus").AlterColumn("MostRecentFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("DownloadClientStatus").AlterColumn("DisabledTill").AsDateTimeOffset().Nullable();
+ Alter.Table("History").AlterColumn("Date").AsDateTimeOffset().NotNullable();
+ Alter.Table("IndexerDefinitionVersions").AlterColumn("LastUpdated").AsDateTimeOffset().Nullable();
+ Alter.Table("IndexerStatus").AlterColumn("InitialFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("IndexerStatus").AlterColumn("MostRecentFailure").AsDateTimeOffset().Nullable();
+ Alter.Table("IndexerStatus").AlterColumn("DisabledTill").AsDateTimeOffset().Nullable();
+ Alter.Table("IndexerStatus").AlterColumn("CookiesExpirationDate").AsDateTimeOffset().Nullable();
+ Alter.Table("Indexers").AlterColumn("Added").AsDateTimeOffset().NotNullable();
+ Alter.Table("ScheduledTasks").AlterColumn("LastExecution").AsDateTimeOffset().NotNullable();
+ Alter.Table("ScheduledTasks").AlterColumn("LastStartTime").AsDateTimeOffset().Nullable();
+ Alter.Table("VersionInfo").AlterColumn("AppliedOn").AsDateTimeOffset().Nullable();
+ }
+
+ protected override void LogDbUpgrade()
+ {
+ Alter.Table("Logs").AlterColumn("Time").AsDateTimeOffset().NotNullable();
+ Alter.Table("UpdateHistory").AlterColumn("Date").AsDateTimeOffset().NotNullable();
+ Alter.Table("VersionInfo").AlterColumn("AppliedOn").AsDateTimeOffset().Nullable();
+ }
+ }
+}
diff --git a/src/NzbDrone.Core/Prowlarr.Core.csproj b/src/NzbDrone.Core/Prowlarr.Core.csproj
index 5789e62ff..86b491834 100644
--- a/src/NzbDrone.Core/Prowlarr.Core.csproj
+++ b/src/NzbDrone.Core/Prowlarr.Core.csproj
@@ -5,16 +5,16 @@
-
+
+
+
-
-