AppDbUpdater: Switch foreign keys off when heavily altering tables

This commit is contained in:
2024-02-29 10:26:58 +01:00
parent 614e0010fd
commit 92c3ed991b
2 changed files with 7 additions and 3 deletions

View File

@ -1,6 +1,6 @@
-- schema version 4 to 5 -- schema version 4 to 5
CREATE TABLE _area_commitment_type ( CREATE TABLE area_commitment_type_new (
vtrgid TEXT NOT NULL CHECK (vtrgid = sortid || COALESCE(attrid, '') || disc), vtrgid TEXT NOT NULL CHECK (vtrgid = sortid || COALESCE(attrid, '') || disc),
sortid TEXT NOT NULL, sortid TEXT NOT NULL,
attrid TEXT, attrid TEXT,
@ -20,13 +20,15 @@ CREATE TABLE _area_commitment_type (
ON DELETE RESTRICT ON DELETE RESTRICT
) STRICT; ) STRICT;
INSERT INTO _area_commitment_type (vtrgid, sortid, attrid, disc, min_kg_per_ha, max_kg_per_ha, penalty_amount) INSERT INTO area_commitment_type_new (vtrgid, sortid, attrid, disc, min_kg_per_ha, max_kg_per_ha, penalty_amount)
SELECT vtrgid, sortid, attrid_1, disc, min_kg_per_ha, max_kg_per_ha, penalty_amount FROM area_commitment_type; SELECT vtrgid, sortid, attrid_1, disc, min_kg_per_ha, max_kg_per_ha, penalty_amount FROM area_commitment_type;
PRAGMA foreign_keys = OFF;
PRAGMA writable_schema = ON; PRAGMA writable_schema = ON;
DROP TABLE area_commitment_type; DROP TABLE area_commitment_type;
ALTER TABLE _area_commitment_type RENAME TO area_commitment_type; ALTER TABLE area_commitment_type_new RENAME TO area_commitment_type;
PRAGMA writable_schema = OFF; PRAGMA writable_schema = OFF;
PRAGMA foreign_keys = ON;
ALTER TABLE delivery_part ADD COLUMN attrid TEXT DEFAULT NULL REFERENCES wine_attribute (attrid) ALTER TABLE delivery_part ADD COLUMN attrid TEXT DEFAULT NULL REFERENCES wine_attribute (attrid)
ON UPDATE CASCADE ON UPDATE CASCADE

View File

@ -22,10 +22,12 @@ CREATE TABLE payment_delivery_part_new (
INSERT INTO payment_delivery_part_new (year, did, dpnr, avnr, net_amount, mod_abs, mod_rel) INSERT INTO payment_delivery_part_new (year, did, dpnr, avnr, net_amount, mod_abs, mod_rel)
SELECT year, did, dpnr, avnr, net_amount, mod_abs, mod_rel SELECT year, did, dpnr, avnr, net_amount, mod_abs, mod_rel
FROM payment_delivery_part; FROM payment_delivery_part;
PRAGMA foreign_keys = OFF;
PRAGMA writable_schema = ON; PRAGMA writable_schema = ON;
DROP TABLE payment_delivery_part; DROP TABLE payment_delivery_part;
ALTER TABLE payment_delivery_part_new RENAME TO payment_delivery_part; ALTER TABLE payment_delivery_part_new RENAME TO payment_delivery_part;
PRAGMA writable_schema = OFF; PRAGMA writable_schema = OFF;
PRAGMA foreign_keys = ON;
DROP TRIGGER IF EXISTS t_payment_delivery_part_i; DROP TRIGGER IF EXISTS t_payment_delivery_part_i;
CREATE TRIGGER t_payment_delivery_part_i CREATE TRIGGER t_payment_delivery_part_i