Skip to content

Commit 599d53e

Browse files
committed
postgreSQL support
1 parent 560ed9a commit 599d53e

File tree

4 files changed

+204
-17
lines changed

4 files changed

+204
-17
lines changed

src/BlazorAdmin/BlazorAdmin.Servers.Core/BlazorAdmin.Servers.Core.csproj

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,25 @@
1212

1313
<ItemGroup>
1414
<FrameworkReference Include="Microsoft.AspNetCore.App" />
15-
<PackageReference Include="Blazor-ApexCharts" Version="3.4.0" />
16-
<PackageReference Include="Cropper.Blazor" Version="1.3.2" />
15+
<PackageReference Include="Blazor-ApexCharts" Version="6.0.1" />
16+
<PackageReference Include="Cropper.Blazor" Version="1.4.1" />
1717
<PackageReference Include="CrystalQuartz.AspNetCore" Version="7.1.0" />
1818
<PackageReference Include="Mapster" Version="7.4.0" />
19-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.1" />
20-
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.0" />
21-
<PackageReference Include="Microsoft.SemanticKernel" Version="1.36.1" />
22-
<PackageReference Include="MudBlazor" Version="8.3.0" />
23-
<PackageReference Include="MudBlazor.Markdown" Version="1.0.2" />
24-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.10.0" />
25-
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.0" />
26-
<PackageReference Include="Quartz.Extensions.DependencyInjection" Version="3.10.0" />
27-
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.10.0" />
28-
<PackageReference Include="Quartz.Serialization.Json" Version="3.11.0" />
29-
<PackageReference Include="Selenium.WebDriver" Version="4.28.0" />
30-
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.0" />
31-
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.0" />
32-
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
19+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="9.0.5" />
20+
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.5" />
21+
<PackageReference Include="Microsoft.SemanticKernel" Version="1.54.0" />
22+
<PackageReference Include="MudBlazor" Version="8.7.0" />
23+
<PackageReference Include="MudBlazor.Markdown" Version="8.6.0" />
24+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
25+
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.5" />
26+
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
27+
<PackageReference Include="Quartz.Extensions.DependencyInjection" Version="3.14.0" />
28+
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.14.0" />
29+
<PackageReference Include="Quartz.Serialization.Json" Version="3.14.0" />
30+
<PackageReference Include="Selenium.WebDriver" Version="4.33.0" />
31+
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="9.0.5" />
32+
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.5" />
33+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.5" />
3334
</ItemGroup>
3435

3536
<ItemGroup>

src/BlazorAdmin/BlazorAdmin.Servers.Core/Data/DatabaseExtension.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ public static WebApplicationBuilder AddDatabase(this WebApplicationBuilder build
3232
{
3333
b.UseSqlite(dbConnectinoString);
3434
}
35+
else if (dbProvider == "PostgreSQL")
36+
{
37+
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
38+
b.UseNpgsql(dbConnectinoString);
39+
}
3540
b.UseSeeding((d, v) => (d as BlazorAdminDbContext).InitialData(v));
3641
}, ServiceLifetime.Scoped);
3742

src/BlazorAdmin/BlazorAdmin.Servers.Core/Data/QuartzExtension.cs

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.Data.SqlClient;
33
using Microsoft.Data.Sqlite;
44
using Microsoft.Extensions.DependencyInjection;
5+
using Npgsql;
56
using Quartz;
67

78
namespace BlazorAdmin.Servers.Core.Data
@@ -28,6 +29,10 @@ public static IServiceCollection AddQuartzService(this IServiceCollection servic
2829
{
2930
x.UseSqlServer(opt => opt.ConnectionString = connectionString);
3031
}
32+
else if (dbProvider == "PostgreSQL")
33+
{
34+
x.UsePostgres(opt => opt.ConnectionString = connectionString);
35+
}
3136

3237
x.UseNewtonsoftJsonSerializer();
3338
});
@@ -72,6 +77,19 @@ public static void InitialQuartzTable(string connectionString, string dbProvider
7277
conn.Close();
7378
}
7479
}
80+
else if (dbProvider == "PostgreSQL")
81+
{
82+
using (var conn = new NpgsqlConnection(connectionString))
83+
{
84+
conn.Open();
85+
using (var cmd = conn.CreateCommand())
86+
{
87+
cmd.CommandText = PostgreSQLScript;
88+
cmd.ExecuteNonQuery();
89+
}
90+
conn.Close();
91+
}
92+
}
7593
}
7694

7795
#region Sqlite Script
@@ -522,6 +540,169 @@ CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY
522540
";
523541

524542

543+
#endregion
544+
545+
#region Postgresql Script
546+
547+
private const string PostgreSQLScript = @"
548+
CREATE TABLE IF NOT EXISTS qrtz_job_details
549+
(
550+
sched_name TEXT NOT NULL,
551+
job_name TEXT NOT NULL,
552+
job_group TEXT NOT NULL,
553+
description TEXT NULL,
554+
job_class_name TEXT NOT NULL,
555+
is_durable BOOL NOT NULL,
556+
is_nonconcurrent BOOL NOT NULL,
557+
is_update_data BOOL NOT NULL,
558+
requests_recovery BOOL NOT NULL,
559+
job_data BYTEA NULL,
560+
PRIMARY KEY (sched_name,job_name,job_group)
561+
);
562+
563+
CREATE TABLE IF NOT EXISTS qrtz_triggers
564+
(
565+
sched_name TEXT NOT NULL,
566+
trigger_name TEXT NOT NULL,
567+
trigger_group TEXT NOT NULL,
568+
job_name TEXT NOT NULL,
569+
job_group TEXT NOT NULL,
570+
description TEXT NULL,
571+
next_fire_time BIGINT NULL,
572+
prev_fire_time BIGINT NULL,
573+
priority INTEGER NULL,
574+
trigger_state TEXT NOT NULL,
575+
trigger_type TEXT NOT NULL,
576+
start_time BIGINT NOT NULL,
577+
end_time BIGINT NULL,
578+
calendar_name TEXT NULL,
579+
misfire_instr SMALLINT NULL,
580+
job_data BYTEA NULL,
581+
PRIMARY KEY (sched_name,trigger_name,trigger_group),
582+
FOREIGN KEY (sched_name,job_name,job_group)
583+
REFERENCES qrtz_job_details(sched_name,job_name,job_group)
584+
);
585+
586+
CREATE TABLE IF NOT EXISTS qrtz_simple_triggers
587+
(
588+
sched_name TEXT NOT NULL,
589+
trigger_name TEXT NOT NULL,
590+
trigger_group TEXT NOT NULL,
591+
repeat_count BIGINT NOT NULL,
592+
repeat_interval BIGINT NOT NULL,
593+
times_triggered BIGINT NOT NULL,
594+
PRIMARY KEY (sched_name,trigger_name,trigger_group),
595+
FOREIGN KEY (sched_name,trigger_name,trigger_group)
596+
REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE
597+
);
598+
599+
CREATE TABLE IF NOT EXISTS QRTZ_SIMPROP_TRIGGERS
600+
(
601+
sched_name TEXT NOT NULL,
602+
trigger_name TEXT NOT NULL ,
603+
trigger_group TEXT NOT NULL ,
604+
str_prop_1 TEXT NULL,
605+
str_prop_2 TEXT NULL,
606+
str_prop_3 TEXT NULL,
607+
int_prop_1 INTEGER NULL,
608+
int_prop_2 INTEGER NULL,
609+
long_prop_1 BIGINT NULL,
610+
long_prop_2 BIGINT NULL,
611+
dec_prop_1 NUMERIC NULL,
612+
dec_prop_2 NUMERIC NULL,
613+
bool_prop_1 BOOL NULL,
614+
bool_prop_2 BOOL NULL,
615+
time_zone_id TEXT NULL,
616+
PRIMARY KEY (sched_name,trigger_name,trigger_group),
617+
FOREIGN KEY (sched_name,trigger_name,trigger_group)
618+
REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE
619+
);
620+
621+
CREATE TABLE IF NOT EXISTS qrtz_cron_triggers
622+
(
623+
sched_name TEXT NOT NULL,
624+
trigger_name TEXT NOT NULL,
625+
trigger_group TEXT NOT NULL,
626+
cron_expression TEXT NOT NULL,
627+
time_zone_id TEXT,
628+
PRIMARY KEY (sched_name,trigger_name,trigger_group),
629+
FOREIGN KEY (sched_name,trigger_name,trigger_group)
630+
REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE
631+
);
632+
633+
CREATE TABLE IF NOT EXISTS qrtz_blob_triggers
634+
(
635+
sched_name TEXT NOT NULL,
636+
trigger_name TEXT NOT NULL,
637+
trigger_group TEXT NOT NULL,
638+
blob_data BYTEA NULL,
639+
PRIMARY KEY (sched_name,trigger_name,trigger_group),
640+
FOREIGN KEY (sched_name,trigger_name,trigger_group)
641+
REFERENCES qrtz_triggers(sched_name,trigger_name,trigger_group) ON DELETE CASCADE
642+
);
643+
644+
CREATE TABLE IF NOT EXISTS qrtz_calendars
645+
(
646+
sched_name TEXT NOT NULL,
647+
calendar_name TEXT NOT NULL,
648+
calendar BYTEA NOT NULL,
649+
PRIMARY KEY (sched_name,calendar_name)
650+
);
651+
652+
CREATE TABLE IF NOT EXISTS qrtz_paused_trigger_grps
653+
(
654+
sched_name TEXT NOT NULL,
655+
trigger_group TEXT NOT NULL,
656+
PRIMARY KEY (sched_name,trigger_group)
657+
);
658+
659+
CREATE TABLE IF NOT EXISTS qrtz_fired_triggers
660+
(
661+
sched_name TEXT NOT NULL,
662+
entry_id TEXT NOT NULL,
663+
trigger_name TEXT NOT NULL,
664+
trigger_group TEXT NOT NULL,
665+
instance_name TEXT NOT NULL,
666+
fired_time BIGINT NOT NULL,
667+
sched_time BIGINT NOT NULL,
668+
priority INTEGER NOT NULL,
669+
state TEXT NOT NULL,
670+
job_name TEXT NULL,
671+
job_group TEXT NULL,
672+
is_nonconcurrent BOOL NOT NULL,
673+
requests_recovery BOOL NULL,
674+
PRIMARY KEY (sched_name,entry_id)
675+
);
676+
677+
CREATE TABLE IF NOT EXISTS qrtz_scheduler_state
678+
(
679+
sched_name TEXT NOT NULL,
680+
instance_name TEXT NOT NULL,
681+
last_checkin_time BIGINT NOT NULL,
682+
checkin_interval BIGINT NOT NULL,
683+
PRIMARY KEY (sched_name,instance_name)
684+
);
685+
686+
CREATE TABLE IF NOT EXISTS qrtz_locks
687+
(
688+
sched_name TEXT NOT NULL,
689+
lock_name TEXT NOT NULL,
690+
PRIMARY KEY (sched_name,lock_name)
691+
);
692+
693+
create index IF NOT EXISTS idx_qrtz_j_req_recovery on qrtz_job_details(requests_recovery);
694+
create index IF NOT EXISTS idx_qrtz_t_next_fire_time on qrtz_triggers(next_fire_time);
695+
create index IF NOT EXISTS idx_qrtz_t_state on qrtz_triggers(trigger_state);
696+
create index IF NOT EXISTS idx_qrtz_t_nft_st on qrtz_triggers(next_fire_time,trigger_state);
697+
create index IF NOT EXISTS idx_qrtz_ft_trig_name on qrtz_fired_triggers(trigger_name);
698+
create index IF NOT EXISTS idx_qrtz_ft_trig_group on qrtz_fired_triggers(trigger_group);
699+
create index IF NOT EXISTS idx_qrtz_ft_trig_nm_gp on qrtz_fired_triggers(sched_name,trigger_name,trigger_group);
700+
create index IF NOT EXISTS idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(instance_name);
701+
create index IF NOT EXISTS idx_qrtz_ft_job_name on qrtz_fired_triggers(job_name);
702+
create index IF NOT EXISTS idx_qrtz_ft_job_group on qrtz_fired_triggers(job_group);
703+
create index IF NOT EXISTS idx_qrtz_ft_job_req_recovery on qrtz_fired_triggers(requests_recovery);
704+
";
705+
525706
#endregion
526707
}
527708

src/BlazorAdmin/BlazorAdmin.Web/appsettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
},
4747
"AllowedHosts": "*",
4848
"Application": {
49-
"DatabaseProvider": "Sqlite", // Supported values: Sqlite, SqlServer
49+
"DatabaseProvider": "Sqlite", // Supported values: Sqlite, SqlServer,PostgreSQL
5050
"ConnectionString": "Data Source=DB/BlazorAdmin20250522.db;Cache=Shared",
5151
"UseQuartz": true
5252
}

0 commit comments

Comments
 (0)