22using Microsoft . Data . SqlClient ;
33using Microsoft . Data . Sqlite ;
44using Microsoft . Extensions . DependencyInjection ;
5+ using Npgsql ;
56using Quartz ;
67
78namespace 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
0 commit comments