From 2e58dea88ac19849db19d9d725c669bc2cecdc04 Mon Sep 17 00:00:00 2001 From: eugeniy_ivanov Date: Fri, 7 Apr 2023 17:58:46 +0500 Subject: [PATCH] work migration (timescale) --- AsbCloudApp/Repositories/IGtrRepository.cs | 2 - ...le_wits_and_manual_hypertable.Designer.cs} | 29 ++++++------- ...5_add_table_wits_and_manual_hypertable.cs} | 42 ++++++++++++++----- .../AsbCloudDbContextModelSnapshot.cs | 21 +++++----- AsbCloudDb/Model/AsbCloudDbContext.cs | 11 +++-- AsbCloudDb/Model/GTR/WitsItemBase.cs | 2 +- 6 files changed, 66 insertions(+), 41 deletions(-) rename AsbCloudDb/Migrations/{20230331060526_add_table_WITS_GTR_and_manual_hypertable.Designer.cs => 20230407125505_add_table_wits_and_manual_hypertable.Designer.cs} (99%) rename AsbCloudDb/Migrations/{20230331060526_add_table_WITS_GTR_and_manual_hypertable.cs => 20230407125505_add_table_wits_and_manual_hypertable.cs} (72%) diff --git a/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index d95d809d..587a78a0 100644 --- a/AsbCloudApp/Repositories/IGtrRepository.cs +++ b/AsbCloudApp/Repositories/IGtrRepository.cs @@ -34,8 +34,6 @@ namespace AsbCloudApp.Repositories Task> GetAsync(int idWell, DateTime dateBegin = default, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default); - - } #nullable disable } diff --git a/AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.Designer.cs b/AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.Designer.cs similarity index 99% rename from AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.Designer.cs rename to AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.Designer.cs index 0fd8b600..710e5432 100644 --- a/AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.Designer.cs +++ b/AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.Designer.cs @@ -13,8 +13,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace AsbCloudDb.Migrations { [DbContext(typeof(AsbCloudDbContext))] - [Migration("20230331060526_add_table_WITS_GTR_and_manual_hypertable")] - partial class add_table_WITS_GTR_and_manual_hypertable + [Migration("20230407125505_add_table_wits_and_manual_hypertable")] + partial class add_table_wits_and_manual_hypertable { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -150,8 +150,8 @@ namespace AsbCloudDb.Migrations .HasColumnName("id_well") .HasComment("ID скважины"); - b.Property("StartDate") - .HasColumnType("timestamp with time zone") + b.Property("StartDate") + .HasColumnType("date") .HasColumnName("start_date") .HasComment("Дата отчёта"); @@ -803,7 +803,7 @@ namespace AsbCloudDb.Migrations b.HasComment("Действия с файлами."); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsFloat", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -825,14 +825,14 @@ namespace AsbCloudDb.Migrations .HasColumnType("real") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_float"); - b.HasComment("таблица данных ГТИ с типом значения float"); + b.HasComment("таблица данных ГТИ с типом значения "); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsInt", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -854,14 +854,14 @@ namespace AsbCloudDb.Migrations .HasColumnType("integer") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_int"); b.HasComment("таблица данных ГТИ с типом значения int16 int32"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsStr", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -880,10 +880,11 @@ namespace AsbCloudDb.Migrations .HasColumnName("date"); b.Property("Value") + .IsRequired() .HasColumnType("text") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_string"); @@ -7232,7 +7233,7 @@ namespace AsbCloudDb.Migrations b.Navigation("User"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsFloat", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() @@ -7243,7 +7244,7 @@ namespace AsbCloudDb.Migrations b.Navigation("Telemetry"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsInt", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() @@ -7254,7 +7255,7 @@ namespace AsbCloudDb.Migrations b.Navigation("Telemetry"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsStr", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() diff --git a/AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.cs b/AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.cs similarity index 72% rename from AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.cs rename to AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.cs index 8376e95c..d8aecd74 100644 --- a/AsbCloudDb/Migrations/20230331060526_add_table_WITS_GTR_and_manual_hypertable.cs +++ b/AsbCloudDb/Migrations/20230407125505_add_table_wits_and_manual_hypertable.cs @@ -5,10 +5,20 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace AsbCloudDb.Migrations { - public partial class add_table_WITS_GTR_and_manual_hypertable : Migration + public partial class add_table_wits_and_manual_hypertable : Migration { protected override void Up(MigrationBuilder migrationBuilder) { + migrationBuilder.AlterColumn( + name: "start_date", + table: "t_daily_report", + type: "date", + nullable: false, + comment: "Дата отчёта", + oldClrType: typeof(DateTimeOffset), + oldType: "timestamp with time zone", + oldComment: "Дата отчёта"); + migrationBuilder.CreateTable( name: "t_wits_float", columns: table => new @@ -21,7 +31,7 @@ namespace AsbCloudDb.Migrations }, constraints: table => { - table.PrimaryKey("PK_t_wits_float", x => new { x.id_telemetry, x.id_record, x.id_item }); + table.PrimaryKey("PK_t_wits_float", x => new { x.id_telemetry, x.id_record, x.id_item, x.date }); table.ForeignKey( name: "FK_t_wits_float_t_telemetry_id_telemetry", column: x => x.id_telemetry, @@ -29,7 +39,7 @@ namespace AsbCloudDb.Migrations principalColumn: "id", onDelete: ReferentialAction.Cascade); }, - comment: "таблица данных ГТИ с типом значения float"); + comment: "таблица данных ГТИ с типом значения "); migrationBuilder.CreateTable( name: "t_wits_int", @@ -43,7 +53,7 @@ namespace AsbCloudDb.Migrations }, constraints: table => { - table.PrimaryKey("PK_t_wits_int", x => new { x.id_telemetry, x.id_record, x.id_item }); + table.PrimaryKey("PK_t_wits_int", x => new { x.id_telemetry, x.id_record, x.id_item, x.date }); table.ForeignKey( name: "FK_t_wits_int_t_telemetry_id_telemetry", column: x => x.id_telemetry, @@ -61,11 +71,11 @@ namespace AsbCloudDb.Migrations id_record = table.Column(type: "integer", nullable: false), id_item = table.Column(type: "integer", nullable: false), date = table.Column(type: "timestamp with time zone", nullable: false), - Value = table.Column(type: "text", nullable: true) + Value = table.Column(type: "text", nullable: false) }, constraints: table => { - table.PrimaryKey("PK_t_wits_string", x => new { x.id_telemetry, x.id_record, x.id_item }); + table.PrimaryKey("PK_t_wits_string", x => new { x.id_telemetry, x.id_record, x.id_item, x.date }); table.ForeignKey( name: "FK_t_wits_string_t_telemetry_id_telemetry", column: x => x.id_telemetry, @@ -74,10 +84,12 @@ namespace AsbCloudDb.Migrations onDelete: ReferentialAction.Cascade); }, comment: "таблица данных ГТИ с типом значения string"); - //migrationBuilder.Sql - // ("SELECT create_hypertable('t_wits_string','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); " + - // "SELECT create_hypertable('t_wits_float','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); " + - // "SELECT create_hypertable('t_wits_int','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); "); + + migrationBuilder.Sql + ("SELECT create_hypertable('t_wits_string','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); " + + "SELECT create_hypertable('t_wits_float','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); " + + "SELECT create_hypertable('t_wits_int','date','id_telemetry', 2, chunk_time_interval => INTERVAL '5 day'); "); + } protected override void Down(MigrationBuilder migrationBuilder) @@ -90,6 +102,16 @@ namespace AsbCloudDb.Migrations migrationBuilder.DropTable( name: "t_wits_string"); + + migrationBuilder.AlterColumn( + name: "start_date", + table: "t_daily_report", + type: "timestamp with time zone", + nullable: false, + comment: "Дата отчёта", + oldClrType: typeof(DateOnly), + oldType: "date", + oldComment: "Дата отчёта"); } } } diff --git a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs index 0c5d8812..40182550 100644 --- a/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs +++ b/AsbCloudDb/Migrations/AsbCloudDbContextModelSnapshot.cs @@ -801,7 +801,7 @@ namespace AsbCloudDb.Migrations b.HasComment("Действия с файлами."); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsFloat", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -823,14 +823,14 @@ namespace AsbCloudDb.Migrations .HasColumnType("real") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_float"); - b.HasComment("таблица данных ГТИ с типом значения float"); + b.HasComment("таблица данных ГТИ с типом значения "); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsInt", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -852,14 +852,14 @@ namespace AsbCloudDb.Migrations .HasColumnType("integer") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_int"); b.HasComment("таблица данных ГТИ с типом значения int16 int32"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsStr", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => { b.Property("IdTelemetry") .HasColumnType("integer") @@ -878,10 +878,11 @@ namespace AsbCloudDb.Migrations .HasColumnName("date"); b.Property("Value") + .IsRequired() .HasColumnType("text") .HasColumnName("Value"); - b.HasKey("IdTelemetry", "IdRecord", "IdItem"); + b.HasKey("IdTelemetry", "IdRecord", "IdItem", "DateTime"); b.ToTable("t_wits_string"); @@ -7230,7 +7231,7 @@ namespace AsbCloudDb.Migrations b.Navigation("User"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsFloat", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemFloat", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() @@ -7241,7 +7242,7 @@ namespace AsbCloudDb.Migrations b.Navigation("Telemetry"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsInt", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemInt", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() @@ -7252,7 +7253,7 @@ namespace AsbCloudDb.Migrations b.Navigation("Telemetry"); }); - modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsStr", b => + modelBuilder.Entity("AsbCloudDb.Model.GTR.WitsItemString", b => { b.HasOne("AsbCloudDb.Model.Telemetry", "Telemetry") .WithMany() diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 4d94b290..4d35d923 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -345,21 +345,24 @@ namespace AsbCloudDb.Model entity.HasKey( nameof(ITelemetryData.IdTelemetry), nameof(WitsItemBase.IdRecord), - nameof(WitsItemBase.IdItem)); - }); + nameof(WitsItemBase.IdItem), + nameof(WitsItemBase.DateTime)); + }); modelBuilder.Entity(entity => { entity.HasKey( nameof(ITelemetryData.IdTelemetry), nameof(WitsItemBase.IdRecord), - nameof(WitsItemBase.IdItem)); + nameof(WitsItemBase.IdItem), + nameof(WitsItemBase.DateTime)); }); modelBuilder.Entity(entity => { entity.HasKey( nameof(ITelemetryData.IdTelemetry), nameof(WitsItemBase.IdRecord), - nameof(WitsItemBase.IdItem)); + nameof(WitsItemBase.IdItem), + nameof(WitsItemBase.DateTime)); }); diff --git a/AsbCloudDb/Model/GTR/WitsItemBase.cs b/AsbCloudDb/Model/GTR/WitsItemBase.cs index c81d26b9..f9c40de8 100644 --- a/AsbCloudDb/Model/GTR/WitsItemBase.cs +++ b/AsbCloudDb/Model/GTR/WitsItemBase.cs @@ -19,7 +19,7 @@ namespace AsbCloudDb.Model.GTR public DateTimeOffset DateTime { get; set; } [Column("Value")] - public T? Value { get; set; } + public T Value { get; set; } [ForeignKey(nameof(IdTelemetry))] public virtual Telemetry? Telemetry { get; set; }