fix/partitioning-small-fix #21
@ -38,13 +38,20 @@ public class UnitTestCheckHyperTables : IClassFixture<DbFixture>
|
|||||||
|
|
||||||
var entity3 = entity2.Adapt<ParameterData>();
|
var entity3 = entity2.Adapt<ParameterData>();
|
||||||
entity3.ParameterId = 3;
|
entity3.ParameterId = 3;
|
||||||
entity3.Timestamp = DateTime.UtcNow.AddDays(2);
|
|
||||||
context.ParameterData.Add(entity3);
|
context.ParameterData.Add(entity3);
|
||||||
|
|
||||||
var entity4 = entity3.Adapt<ParameterData>();
|
var entity4 = entity3.Adapt<ParameterData>();
|
||||||
entity4.ParameterId = 4;
|
entity4.ParameterId = 4;
|
||||||
context.ParameterData.Add(entity4);
|
context.ParameterData.Add(entity4);
|
||||||
|
|
||||||
|
var entity5 = entity3.Adapt<ParameterData>();
|
||||||
|
entity5.Timestamp = DateTime.UtcNow.AddDays(1).AddHours(1);
|
||||||
|
context.ParameterData.Add(entity5);
|
||||||
|
|
||||||
|
var entity6 = entity3.Adapt<ParameterData>();
|
||||||
|
entity6.DiscriminatorId = Guid.CreateVersion7();
|
||||||
|
context.ParameterData.Add(entity6);
|
||||||
|
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
|
|
||||||
string sql = "select count(*) from (select show_chunks('parameter_data'));";
|
string sql = "select count(*) from (select show_chunks('parameter_data'));";
|
||||||
@ -53,6 +60,6 @@ public class UnitTestCheckHyperTables : IClassFixture<DbFixture>
|
|||||||
chunksCount = queryRow.AsEnumerable().FirstOrDefault();
|
chunksCount = queryRow.AsEnumerable().FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
Assert.Equal(2, chunksCount);
|
Assert.Equal(5, chunksCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ public static class EFExtensionsPartitioning
|
|||||||
private static void AddParameterDataPartitioning(this DatabaseFacade db)
|
private static void AddParameterDataPartitioning(this DatabaseFacade db)
|
||||||
{
|
{
|
||||||
var dayCount = 1;
|
var dayCount = 1;
|
||||||
var sectionCount = 1;
|
var sectionCount = 128;
|
||||||
var type = typeof(ParameterData);
|
var type = typeof(ParameterData);
|
||||||
var tableAttribute = type.GetCustomAttribute<TableAttribute>();
|
var tableAttribute = type.GetCustomAttribute<TableAttribute>();
|
||||||
if (tableAttribute is null)
|
if (tableAttribute is null)
|
||||||
@ -38,10 +38,12 @@ public static class EFExtensionsPartitioning
|
|||||||
$"by_range('{nameof(ParameterData.Timestamp)}', INTERVAL '{dayCount} day'), if_not_exists => {true});";
|
$"by_range('{nameof(ParameterData.Timestamp)}', INTERVAL '{dayCount} day'), if_not_exists => {true});";
|
||||||
db.ExecuteSqlRaw(sqlCreateHypertableString);
|
db.ExecuteSqlRaw(sqlCreateHypertableString);
|
||||||
|
|
||||||
var sqlCreateDimensionParameterId = $"SELECT add_dimension('{tableAttribute.Name}'," +
|
var sqlCreateDimensionParameterId = $"SELECT add_dimension('{tableAttribute.Name}'," +
|
||||||
$"by_hash('{nameof(ParameterData.ParameterId)}', {sectionCount}));";
|
$"by_hash('{nameof(ParameterData.ParameterId)}', {sectionCount}), if_not_exists => {true});";
|
||||||
|
db.ExecuteSqlRaw(sqlCreateDimensionParameterId);
|
||||||
|
|
||||||
var sqlCreateDimensionDiscriminatorId = $"SELECT add_dimension('{tableAttribute.Name}'," +
|
var sqlCreateDimensionDiscriminatorId = $"SELECT add_dimension('{tableAttribute.Name}'," +
|
||||||
$"by_hash('{nameof(ParameterData.DiscriminatorId)}', {sectionCount}));";
|
$"by_hash('{nameof(ParameterData.DiscriminatorId)}', {sectionCount}), if_not_exists => {true});";
|
||||||
|
db.ExecuteSqlRaw(sqlCreateDimensionDiscriminatorId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
namespace DD.Persistence.Database.Postgres.Migrations
|
namespace DD.Persistence.Database.Postgres.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(PersistencePostgresContext))]
|
[DbContext(typeof(PersistencePostgresContext))]
|
||||||
[Migration("20250122120353_Init")]
|
[Migration("20250203061429_Init")]
|
||||||
partial class Init
|
partial class Init
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
@ -26,6 +26,47 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLog", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Ключ записи");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("Creation")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата создания записи");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdAuthor")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Автор изменения");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdDiscriminator")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Дискриминатор таблицы");
|
||||||
|
|
||||||
|
b.Property<Guid?>("IdEditor")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Редактор");
|
||||||
|
|
||||||
|
b.Property<Guid?>("IdNext")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Id заменяющей записи");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset?>("Obsolete")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата устаревания (например при удалении)");
|
||||||
|
|
||||||
|
b.Property<string>("Value")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("jsonb")
|
||||||
|
.HasComment("Значение");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("change_log");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.DataScheme", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.DataScheme", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("DiscriminatorId")
|
b.Property<Guid>("DiscriminatorId")
|
||||||
@ -88,6 +129,29 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
b.ToTable("parameter_data");
|
b.ToTable("parameter_data");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DD.Persistence.Database.Entity.Setpoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Key")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Ключ");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("Timestamp")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата создания уставки");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdUser")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Id автора последнего изменения");
|
||||||
|
|
||||||
|
b.Property<JsonElement>("Value")
|
||||||
|
.HasColumnType("jsonb")
|
||||||
|
.HasComment("Значение уставки");
|
||||||
|
|
||||||
|
b.HasKey("Key", "Timestamp");
|
||||||
|
|
||||||
|
b.ToTable("setpoint");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("EventId")
|
b.Property<Guid>("EventId")
|
||||||
@ -143,82 +207,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
b.ToTable("timestamped_values");
|
b.ToTable("timestamped_values");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Model.ChangeLog", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ записи");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset>("Creation")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата создания записи");
|
|
||||||
|
|
||||||
b.Property<double>("DepthEnd")
|
|
||||||
.HasColumnType("double precision")
|
|
||||||
.HasComment("Глубина забоя на дату окончания интервала");
|
|
||||||
|
|
||||||
b.Property<double>("DepthStart")
|
|
||||||
.HasColumnType("double precision")
|
|
||||||
.HasComment("Глубина забоя на дату начала интервала");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdAuthor")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Автор изменения");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdDiscriminator")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Дискриминатор таблицы");
|
|
||||||
|
|
||||||
b.Property<Guid?>("IdEditor")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Редактор");
|
|
||||||
|
|
||||||
b.Property<Guid?>("IdNext")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Id заменяющей записи");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdSection")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ секции");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset?>("Obsolete")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата устаревания (например при удалении)");
|
|
||||||
|
|
||||||
b.Property<string>("Value")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("jsonb")
|
|
||||||
.HasComment("Значение");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("change_log");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Key")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset>("Timestamp")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата создания уставки");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdUser")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Id автора последнего изменения");
|
|
||||||
|
|
||||||
b.Property<JsonElement>("Value")
|
|
||||||
.HasColumnType("jsonb")
|
|
||||||
.HasComment("Значение уставки");
|
|
||||||
|
|
||||||
b.HasKey("Key", "Timestamp");
|
|
||||||
|
|
||||||
b.ToTable("setpoint");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System")
|
b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System")
|
@ -23,9 +23,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
Creation = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false, comment: "Дата создания записи"),
|
Creation = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false, comment: "Дата создания записи"),
|
||||||
Obsolete = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true, comment: "Дата устаревания (например при удалении)"),
|
Obsolete = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: true, comment: "Дата устаревания (например при удалении)"),
|
||||||
IdNext = table.Column<Guid>(type: "uuid", nullable: true, comment: "Id заменяющей записи"),
|
IdNext = table.Column<Guid>(type: "uuid", nullable: true, comment: "Id заменяющей записи"),
|
||||||
DepthStart = table.Column<double>(type: "double precision", nullable: false, comment: "Глубина забоя на дату начала интервала"),
|
|
||||||
DepthEnd = table.Column<double>(type: "double precision", nullable: false, comment: "Глубина забоя на дату окончания интервала"),
|
|
||||||
IdSection = table.Column<Guid>(type: "uuid", nullable: false, comment: "Ключ секции"),
|
|
||||||
Value = table.Column<string>(type: "jsonb", nullable: false, comment: "Значение")
|
Value = table.Column<string>(type: "jsonb", nullable: false, comment: "Значение")
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
@ -23,6 +23,47 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
|
||||||
|
modelBuilder.Entity("DD.Persistence.Database.Entity.ChangeLog", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Id")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Ключ записи");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("Creation")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата создания записи");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdAuthor")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Автор изменения");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdDiscriminator")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Дискриминатор таблицы");
|
||||||
|
|
||||||
|
b.Property<Guid?>("IdEditor")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Редактор");
|
||||||
|
|
||||||
|
b.Property<Guid?>("IdNext")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Id заменяющей записи");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset?>("Obsolete")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата устаревания (например при удалении)");
|
||||||
|
|
||||||
|
b.Property<string>("Value")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("jsonb")
|
||||||
|
.HasComment("Значение");
|
||||||
|
|
||||||
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.ToTable("change_log");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.DataScheme", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.DataScheme", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("DiscriminatorId")
|
b.Property<Guid>("DiscriminatorId")
|
||||||
@ -85,6 +126,29 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
b.ToTable("parameter_data");
|
b.ToTable("parameter_data");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("DD.Persistence.Database.Entity.Setpoint", b =>
|
||||||
|
{
|
||||||
|
b.Property<Guid>("Key")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Ключ");
|
||||||
|
|
||||||
|
b.Property<DateTimeOffset>("Timestamp")
|
||||||
|
.HasColumnType("timestamp with time zone")
|
||||||
|
.HasComment("Дата создания уставки");
|
||||||
|
|
||||||
|
b.Property<Guid>("IdUser")
|
||||||
|
.HasColumnType("uuid")
|
||||||
|
.HasComment("Id автора последнего изменения");
|
||||||
|
|
||||||
|
b.Property<JsonElement>("Value")
|
||||||
|
.HasColumnType("jsonb")
|
||||||
|
.HasComment("Значение уставки");
|
||||||
|
|
||||||
|
b.HasKey("Key", "Timestamp");
|
||||||
|
|
||||||
|
b.ToTable("setpoint");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||||
{
|
{
|
||||||
b.Property<Guid>("EventId")
|
b.Property<Guid>("EventId")
|
||||||
@ -140,82 +204,6 @@ namespace DD.Persistence.Database.Postgres.Migrations
|
|||||||
b.ToTable("timestamped_values");
|
b.ToTable("timestamped_values");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Model.ChangeLog", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ записи");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset>("Creation")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата создания записи");
|
|
||||||
|
|
||||||
b.Property<double>("DepthEnd")
|
|
||||||
.HasColumnType("double precision")
|
|
||||||
.HasComment("Глубина забоя на дату окончания интервала");
|
|
||||||
|
|
||||||
b.Property<double>("DepthStart")
|
|
||||||
.HasColumnType("double precision")
|
|
||||||
.HasComment("Глубина забоя на дату начала интервала");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdAuthor")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Автор изменения");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdDiscriminator")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Дискриминатор таблицы");
|
|
||||||
|
|
||||||
b.Property<Guid?>("IdEditor")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Редактор");
|
|
||||||
|
|
||||||
b.Property<Guid?>("IdNext")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Id заменяющей записи");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdSection")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ секции");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset?>("Obsolete")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата устаревания (например при удалении)");
|
|
||||||
|
|
||||||
b.Property<string>("Value")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("jsonb")
|
|
||||||
.HasComment("Значение");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.ToTable("change_log");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Model.Setpoint", b =>
|
|
||||||
{
|
|
||||||
b.Property<Guid>("Key")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Ключ");
|
|
||||||
|
|
||||||
b.Property<DateTimeOffset>("Timestamp")
|
|
||||||
.HasColumnType("timestamp with time zone")
|
|
||||||
.HasComment("Дата создания уставки");
|
|
||||||
|
|
||||||
b.Property<Guid>("IdUser")
|
|
||||||
.HasColumnType("uuid")
|
|
||||||
.HasComment("Id автора последнего изменения");
|
|
||||||
|
|
||||||
b.Property<JsonElement>("Value")
|
|
||||||
.HasColumnType("jsonb")
|
|
||||||
.HasComment("Значение уставки");
|
|
||||||
|
|
||||||
b.HasKey("Key", "Timestamp");
|
|
||||||
|
|
||||||
b.ToTable("setpoint");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
modelBuilder.Entity("DD.Persistence.Database.Entity.TechMessage", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System")
|
b.HasOne("DD.Persistence.Database.Entity.DataSourceSystem", "System")
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace DD.Persistence.Database.Model;
|
namespace DD.Persistence.Database.Model;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// EF êîíòåêñò äëÿ ÁÄ Postgres
|
/// EF контекст для базы данных Postgres
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class PersistencePostgresContext : PersistenceDbContext
|
public partial class PersistencePostgresContext : PersistenceDbContext
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user