diff --git a/DD.Persistence.App/appsettings.json b/DD.Persistence.App/appsettings.json
index 7ad8c67..9b0d5be 100644
--- a/DD.Persistence.App/appsettings.json
+++ b/DD.Persistence.App/appsettings.json
@@ -6,7 +6,7 @@
}
},
"ConnectionStrings": {
- "DefaultConnection": "Host=localhost;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True"
+ "DefaultConnection": "Host=localhost:5462;Database=persistence;Username=postgres;Password=postgres;Persist Security Info=True"
},
"AllowedHosts": "*",
"NeedUseKeyCloak": false,
diff --git a/DD.Persistence.Database.Postgres.Test/DD.Persistence.Database.Postgres.Test.csproj b/DD.Persistence.Database.Postgres.Test/DD.Persistence.Database.Postgres.Test.csproj
new file mode 100644
index 0000000..bc83156
--- /dev/null
+++ b/DD.Persistence.Database.Postgres.Test/DD.Persistence.Database.Postgres.Test.csproj
@@ -0,0 +1,26 @@
+
+
+
+ net9.0
+ enable
+ enable
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/DD.Persistence.Database.Postgres.Test/UnitTest1.cs b/DD.Persistence.Database.Postgres.Test/UnitTest1.cs
new file mode 100644
index 0000000..92cbcf9
--- /dev/null
+++ b/DD.Persistence.Database.Postgres.Test/UnitTest1.cs
@@ -0,0 +1,85 @@
+using DD.Persistence.Database.Entity;
+using DD.Persistence.Database.Model;
+using DD.Persistence.Database.Postgres.Extensions;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace DD.Persistence.Database.Postgres.Test;
+
+public class UnitTest1
+{
+ private string connectionString;
+ private IHost host;
+
+ public UnitTest1()
+ {
+ connectionString = "Host=localhost;Port=5462;Username=postgres;Password=postgres;Database=persistence5";
+
+
+
+ var builder = Host.CreateApplicationBuilder();
+ builder.Services.AddDbContext(options =>
+ options.UseNpgsql(connectionString));
+
+ builder.Services.AddScoped(provider => provider.GetRequiredService());
+
+ host = builder.Build();
+ using var scope = host.Services.CreateScope();
+ var provider = scope.ServiceProvider;
+
+ var context = provider.GetRequiredService();
+ context.Database.EnsureCreatedAndMigrated();
+ context.Database.AddPartitioning();
+ context.SaveChanges();
+
+
+ //using var scope2 = builder..CreateScope();
+ //var scopedServices = scope.ServiceProvider;
+
+ //var dbContext = scopedServices.GetRequiredService();
+ //dbContext.Database.EnsureCreatedAndMigrated();
+ //dbContext.SaveChanges();
+ }
+ [Fact]
+ public void CreateHyperTable()
+ {
+ var entity = new ParameterData() {
+ DiscriminatorId = Guid.NewGuid(),
+ ParameterId = 1,
+ Timestamp = DateTime.UtcNow,
+ Value = "123"
+ };
+
+ var scope = host.Services.CreateScope();
+
+ var context = scope.ServiceProvider.GetRequiredService();
+
+ context.ParameterData.Add(entity);
+ context.SaveChanges();
+
+ entity.Timestamp = DateTime.UtcNow.AddDays(1);
+ context.ParameterData.Add(entity);
+ context.SaveChanges();
+
+ entity.Timestamp = DateTime.UtcNow.AddDays(2);
+ context.ParameterData.Add(entity);
+ context.SaveChanges();
+
+ entity.Timestamp = DateTime.UtcNow.AddDays(3);
+ context.ParameterData.Add(entity);
+ context.SaveChanges();
+
+ entity.Timestamp = DateTime.UtcNow.AddDays(4);
+ context.ParameterData.Add(entity);
+ context.SaveChanges();
+ }
+
+ //public static IHostBuilder CreateHostBuilder(string[] args) =>
+ // Host.CreateDefaultBuilder(args)
+ // .ConfigureWebHostDefaults(webBuilder =>
+ // {
+ // webBuilder.UseStartup();
+ // });
+}
diff --git a/DD.Persistence.Database.Postgres/Extensions/EFExtensionsPartitioning.cs b/DD.Persistence.Database.Postgres/Extensions/EFExtensionsPartitioning.cs
index 4ee2890..9fb78ee 100644
--- a/DD.Persistence.Database.Postgres/Extensions/EFExtensionsPartitioning.cs
+++ b/DD.Persistence.Database.Postgres/Extensions/EFExtensionsPartitioning.cs
@@ -32,13 +32,18 @@ public static class EFExtensionsPartitioning
return;
}
- const int sectionsNumber = 2;
- const int chunkTimeInterval = 5;
- var sqlString = $"SELECT create_hypertable('{tableAttribute.Name}'," +
- $"'{nameof(ParameterData.Timestamp)}'," +
- $"'{nameof(ParameterData.ParameterId)}'," +
- $"{sectionsNumber}," +
- $"chunk_time_interval => INTERVAL '{chunkTimeInterval} day');";
- db.ExecuteSqlRaw(sqlString);
+ var sqlCreateHypertableString = $"SELECT create_hypertable('{tableAttribute.Name}'," +
+ $"by_range('{nameof(ParameterData.Timestamp)}', INTERVAL '1 day'), if_not_exists => {true});";
+ db.ExecuteSqlRaw(sqlCreateHypertableString);
+
+ var sqlCreateDimensionString = $"SELECT add_dimension('{tableAttribute.Name}'," +
+ $"by_hash('{nameof(ParameterData.ParameterId)}', 1));";
+ db.ExecuteSqlRaw(sqlCreateDimensionString);
+ //var sqlString = $"SELECT create_hypertable('{tableAttribute.Name}'," +
+ // $"'{nameof(ParameterData.Timestamp)}'," +
+ // $"'{nameof(ParameterData.ParameterId)}'," +
+ // $"{sectionsNumber}," +
+ // $"chunk_time_interval => INTERVAL '{chunkTimeInterval} day');";
+ //db.ExecuteSqlRaw(sqlString);
}
}
diff --git a/DD.Persistence.sln b/DD.Persistence.sln
index 926e688..ca91e47 100644
--- a/DD.Persistence.sln
+++ b/DD.Persistence.sln
@@ -35,6 +35,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Элементы решен
.gitea\workflows\integrationTests.yaml = .gitea\workflows\integrationTests.yaml
EndProjectSection
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DD.Persistence.Database.Postgres.Test", "DD.Persistence.Database.Postgres.Test\DD.Persistence.Database.Postgres.Test.csproj", "{47142566-9EAB-4FB5-92EC-9DCB02CAC890}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -85,6 +87,10 @@ Global
{B8C774E6-6B75-41AC-B3CF-10BD3623B2FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8C774E6-6B75-41AC-B3CF-10BD3623B2FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8C774E6-6B75-41AC-B3CF-10BD3623B2FA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {47142566-9EAB-4FB5-92EC-9DCB02CAC890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {47142566-9EAB-4FB5-92EC-9DCB02CAC890}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {47142566-9EAB-4FB5-92EC-9DCB02CAC890}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {47142566-9EAB-4FB5-92EC-9DCB02CAC890}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE