fix(db): add ON CONFLICT DO NOTHING rules for sensor table duplicate inserts

This commit is contained in:
root
2026-05-28 18:54:20 +08:00
parent bfdf528e76
commit 6a4de2ba22

View File

@@ -0,0 +1,54 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
DB::statement("
CREATE OR REPLACE RULE rainfall_ignore_dups AS
ON INSERT TO rainfall
WHERE EXISTS (SELECT 1 FROM rainfall WHERE id = NEW.id)
DO INSTEAD NOTHING
");
DB::statement("
CREATE OR REPLACE RULE waterlevel_ignore_dups AS
ON INSERT TO waterlevel
WHERE EXISTS (SELECT 1 FROM waterlevel WHERE id = NEW.id)
DO INSTEAD NOTHING
");
DB::statement("
CREATE OR REPLACE RULE notification_ignore_dups AS
ON INSERT TO notification
WHERE EXISTS (SELECT 1 FROM notification WHERE id = NEW.id)
DO INSTEAD NOTHING
");
DB::statement("
CREATE OR REPLACE RULE siren_ignore_dups AS
ON INSERT TO siren
WHERE EXISTS (SELECT 1 FROM siren WHERE id = NEW.id)
DO INSTEAD NOTHING
");
DB::statement("
CREATE OR REPLACE RULE station_ignore_dups AS
ON INSERT TO station
WHERE EXISTS (SELECT 1 FROM station WHERE stationid = NEW.stationid)
DO INSTEAD NOTHING
");
}
public function down(): void
{
DB::statement("DROP RULE IF EXISTS rainfall_ignore_dups ON rainfall");
DB::statement("DROP RULE IF EXISTS waterlevel_ignore_dups ON waterlevel");
DB::statement("DROP RULE IF EXISTS notification_ignore_dups ON notification");
DB::statement("DROP RULE IF EXISTS siren_ignore_dups ON siren");
DB::statement("DROP RULE IF EXISTS station_ignore_dups ON station");
}
};