fix(migrations): support pgsql dialect in 2025_12_22_1200* update and constraint drop

This commit is contained in:
michele 2026-09-11 18:59:29 +02:00
parent ecd2da5688
commit d8416d897b
2 changed files with 43 additions and 22 deletions

View File

@ -28,12 +28,22 @@ public function up(): void
// Nota: per conti con iban NULL non è possibile discriminare senza un id.
try {
if (Schema::hasTable('dati_bancari')) {
DB::statement(
"UPDATE contabilita_movimenti_banca m " .
"JOIN dati_bancari d ON d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " .
"SET m.conto_id = d.id " .
"WHERE m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''"
);
if (DB::connection()->getDriverName() === 'mysql') {
DB::statement(
"UPDATE contabilita_movimenti_banca m " .
"JOIN dati_bancari d ON d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " .
"SET m.conto_id = d.id " .
"WHERE m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''"
);
} elseif (DB::connection()->getDriverName() === 'pgsql') {
DB::statement(
"UPDATE contabilita_movimenti_banca m " .
"SET conto_id = d.id " .
"FROM dati_bancari d " .
"WHERE d.stabile_id = m.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = m.iban " .
"AND m.conto_id IS NULL AND m.iban IS NOT NULL AND m.iban != ''"
);
}
}
} catch (Throwable) {
// best-effort

View File

@ -27,12 +27,22 @@ public function up(): void
// Backfill: collega saldi esistenti al conto (dati_bancari) per IBAN.
try {
if (Schema::hasTable('dati_bancari')) {
DB::statement(
"UPDATE contabilita_saldi_conti s " .
"JOIN dati_bancari d ON d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " .
"SET s.conto_id = d.id " .
"WHERE s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''"
);
if (DB::connection()->getDriverName() === 'mysql') {
DB::statement(
"UPDATE contabilita_saldi_conti s " .
"JOIN dati_bancari d ON d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " .
"SET s.conto_id = d.id " .
"WHERE s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''"
);
} elseif (DB::connection()->getDriverName() === 'pgsql') {
DB::statement(
"UPDATE contabilita_saldi_conti s " .
"SET conto_id = d.id " .
"FROM dati_bancari d " .
"WHERE d.stabile_id = s.stabile_id AND d.iban IS NOT NULL AND d.iban != '' AND d.iban = s.iban " .
"AND s.conto_id IS NULL AND s.iban IS NOT NULL AND s.iban != ''"
);
}
}
} catch (Throwable) {
// best-effort
@ -41,16 +51,17 @@ public function up(): void
// Indici legacy: unique(stabile_id, iban, data_saldo) non permette più casse con iban NULL.
// Passiamo a unique(stabile_id, conto_id, data_saldo) (più coerente con la UI per singolo conto).
try {
Schema::table('contabilita_saldi_conti', function (Blueprint $table) {
$table->dropUnique(['stabile_id', 'iban', 'data_saldo']);
});
} catch (Throwable) {
// ignore
}
try {
Schema::table('contabilita_saldi_conti', function (Blueprint $table) {
$table->dropIndex(['stabile_id', 'iban', 'data_saldo']);
});
if (DB::connection()->getDriverName() === 'pgsql') {
DB::statement('ALTER TABLE "contabilita_saldi_conti" DROP CONSTRAINT IF EXISTS "contabilita_saldi_conti_stabile_id_iban_data_saldo_unique"');
DB::statement('DROP INDEX IF EXISTS "contabilita_saldi_conti_stabile_id_iban_data_saldo_index"');
} else {
Schema::table('contabilita_saldi_conti', function (Blueprint $table) {
$table->dropUnique(['stabile_id', 'iban', 'data_saldo']);
});
Schema::table('contabilita_saldi_conti', function (Blueprint $table) {
$table->dropIndex(['stabile_id', 'iban', 'data_saldo']);
});
}
} catch (Throwable) {
// ignore
}