diff --git a/src/NHibernate.Test/Async/NHSpecificTest/GH2820/FixtureByCode.cs b/src/NHibernate.Test/Async/NHSpecificTest/GH2820/FixtureByCode.cs
new file mode 100644
index 00000000000..765f0657908
--- /dev/null
+++ b/src/NHibernate.Test/Async/NHSpecificTest/GH2820/FixtureByCode.cs
@@ -0,0 +1,79 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System;
+using System.Linq;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Dialect;
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+using NHibernate.Linq;
+
+namespace NHibernate.Test.NHSpecificTest.GH2820
+{
+ using System.Threading.Tasks;
+ [TestFixture]
+ public class PostgresTimestampzFixtureAsync : TestCaseMappingByCode
+ {
+ protected override HbmMapping GetMappings()
+ {
+ var mapper = new ModelMapper();
+ mapper.Class(rc =>
+ {
+ rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
+ rc.Property(x => x.Name);
+ rc.Property(x => x.Timestamp, m => m.Column(x => x.SqlType("timestamp with time zone")));
+ });
+
+ return mapper.CompileMappingForAllExplicitlyAddedEntities();
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is PostgreSQLDialect;
+ }
+
+ protected override void OnSetUp()
+ {
+ using (var session = OpenSession())
+ using (var transaction = session.BeginTransaction())
+ {
+ var e1 = new Entity {Name = "Bob", Timestamp = DateTimeOffset.UtcNow};
+ session.Save(e1);
+
+ transaction.Commit();
+ }
+ }
+
+ protected override void OnTearDown()
+ {
+ using (var session = OpenSession())
+ using (var transaction = session.BeginTransaction())
+ {
+ session.CreateQuery("delete from System.Object").ExecuteUpdate();
+
+ transaction.Commit();
+ }
+ }
+
+ [Test]
+ public async Task CanRetrieveEntityWithTimeStampColumnAsync()
+ {
+ using (var session = OpenSession())
+ {
+ var result = from e in session.Query()
+ where e.Name == "Bob"
+ select e;
+
+ Assert.That(await (result.ToListAsync()), Has.Count.EqualTo(1));
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH2820/Entity.cs b/src/NHibernate.Test/NHSpecificTest/GH2820/Entity.cs
new file mode 100644
index 00000000000..87261e3239b
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH2820/Entity.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace NHibernate.Test.NHSpecificTest.GH2820
+{
+ class Entity
+ {
+ public virtual Guid Id { get; set; }
+ public virtual string Name { get; set; }
+ public virtual DateTimeOffset Timestamp { get; set; }
+ }
+}
diff --git a/src/NHibernate.Test/NHSpecificTest/GH2820/FixtureByCode.cs b/src/NHibernate.Test/NHSpecificTest/GH2820/FixtureByCode.cs
new file mode 100644
index 00000000000..f8e196cd0e6
--- /dev/null
+++ b/src/NHibernate.Test/NHSpecificTest/GH2820/FixtureByCode.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Linq;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Dialect;
+using NHibernate.Mapping.ByCode;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.GH2820
+{
+ [TestFixture]
+ public class PostgresTimestampzFixture : TestCaseMappingByCode
+ {
+ protected override HbmMapping GetMappings()
+ {
+ var mapper = new ModelMapper();
+ mapper.Class(rc =>
+ {
+ rc.Id(x => x.Id, m => m.Generator(Generators.GuidComb));
+ rc.Property(x => x.Name);
+ rc.Property(x => x.Timestamp, m => m.Column(x => x.SqlType("timestamp with time zone")));
+ });
+
+ return mapper.CompileMappingForAllExplicitlyAddedEntities();
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is PostgreSQLDialect;
+ }
+
+ protected override void OnSetUp()
+ {
+ using (var session = OpenSession())
+ using (var transaction = session.BeginTransaction())
+ {
+ var e1 = new Entity {Name = "Bob", Timestamp = DateTimeOffset.UtcNow};
+ session.Save(e1);
+
+ transaction.Commit();
+ }
+ }
+
+ protected override void OnTearDown()
+ {
+ using (var session = OpenSession())
+ using (var transaction = session.BeginTransaction())
+ {
+ session.CreateQuery("delete from System.Object").ExecuteUpdate();
+
+ transaction.Commit();
+ }
+ }
+
+ [Test]
+ public void CanRetrieveEntityWithTimeStampColumn()
+ {
+ using (var session = OpenSession())
+ {
+ var result = from e in session.Query()
+ where e.Name == "Bob"
+ select e;
+
+ Assert.That(result.ToList(), Has.Count.EqualTo(1));
+ }
+ }
+ }
+}