Исправить базу данных при удалении записей - PullRequest
0 голосов
/ 02 апреля 2020

Я использую ERP с открытым исходным кодом под названием FacturaScripts. Когда я учился, я удалил несколько счетов («фактуры» на испанском sh). Благодаря этому фактура и коди go (счет-фактура и код) увеличиваются, имея некоторые числа без счета-фактуры.

Чтобы устранить проблему первичного ключа, я сделал следующее:

UPDATE facturasprov SET idfactura=10000+nextval('facturasprov_idfactura_seq');
ALTER SEQUENCE facturasprov_idfactura_seq RESTART WITH 1;
UPDATE facturasprov SET idfactura=nextval('facturasprov_idfactura_seq');

Но codi go по-прежнему генерирует инкременты, отличные от ожидаемых.

Таблица такова:

CREATE TABLE IF NOT EXISTS "facturasprov" (
    "cifnif" VARCHAR(30) NOT NULL,
    "codalmacen" VARCHAR(4) NULL DEFAULT NULL,
    "coddivisa" VARCHAR(3) NOT NULL,
    "codejercicio" VARCHAR(4) NOT NULL,
    "codigo" VARCHAR(20) NOT NULL,
    "codigorect" VARCHAR(20) NULL DEFAULT NULL,
    "codpago" VARCHAR(10) NOT NULL,
    "codproveedor" VARCHAR(10) NULL DEFAULT NULL,
    "codserie" VARCHAR(4) NOT NULL,
    "dtopor1" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "dtopor2" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "editable" BOOLEAN NULL DEFAULT NULL,
    "fecha" DATE NOT NULL,
    "femail" DATE NULL DEFAULT NULL,
    "hora" TIME NULL DEFAULT NULL,
    "idasiento" INTEGER NULL DEFAULT NULL,
    "idempresa" INTEGER NULL DEFAULT NULL,
    "idestado" INTEGER NULL DEFAULT NULL,
    "idfactura" INTEGER NOT NULL DEFAULT 'nextval(''facturasprov_idfactura_seq''::regclass)',
    "idfacturarect" INTEGER NULL DEFAULT NULL,
    "irpf" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "neto" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "netosindto" DOUBLE PRECISION(53) NULL DEFAULT '0',
    "nick" VARCHAR(50) NULL DEFAULT NULL,
    "nombre" VARCHAR(100) NOT NULL,
    "numero" VARCHAR(12) NOT NULL,
    "numproveedor" VARCHAR(50) NULL DEFAULT NULL,
    "observaciones" TEXT NULL DEFAULT NULL,
    "pagada" BOOLEAN NULL DEFAULT 'false',
    "tasaconv" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "total" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "totaleuros" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "totalirpf" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "totaliva" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "totalrecargo" DOUBLE PRECISION(53) NULL DEFAULT NULL,
    "totalsuplidos" DOUBLE PRECISION(53) NULL DEFAULT '0',
    UNIQUE INDEX "uniq_codigo_facturasprov" ("codigo", "idempresa"),
    PRIMARY KEY ("idfactura"),
    CONSTRAINT "ca_facturasprov_almacenes" FOREIGN KEY ("codalmacen") REFERENCES "public"."almacenes" ("codalmacen") ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT "ca_facturasprov_asiento" FOREIGN KEY ("idasiento") REFERENCES "public"."asientos" ("idasiento") ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT "ca_facturasprov_divisas" FOREIGN KEY ("coddivisa") REFERENCES "public"."divisas" ("coddivisa") ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT "ca_facturasprov_ejercicios" FOREIGN KEY ("codejercicio") REFERENCES "public"."ejercicios" ("codejercicio") ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT "ca_facturasprov_empresas" FOREIGN KEY ("idempresa") REFERENCES "public"."empresas" ("idempresa") ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT "ca_facturasprov_proveedores" FOREIGN KEY ("codproveedor") REFERENCES "public"."proveedores" ("codproveedor") ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT "ca_facturasprov_series" FOREIGN KEY ("codserie") REFERENCES "public"."series" ("codserie") ON UPDATE CASCADE ON DELETE RESTRICT,
    CONSTRAINT "ca_facturasprov_users" FOREIGN KEY ("nick") REFERENCES "public"."users" ("nick") ON UPDATE CASCADE ON DELETE SET NULL
);

Есть идеи? Я хочу регенерировать uniq_codigo_facturasprov, чтобы получить значения "codi go", чтобы они соответствовали друг другу. То же самое я сделал с facturasprov_idfactura_seq, чтобы получить корреляцию «idfactura».

РЕДАКТИРОВАТЬ:

Я пишу индексы:

"facturasprov_pkey" PRIMARY KEY, btree (idfactura)
"uniq_codigo_facturasprov" UNIQUE CONSTRAINT, btree (codigo, idempresa)

Второй, я полагаю, является ключом к решению этой проблемы.

Пример правильного Значения "codi go": 2020A000075, 2020A000076 ... и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...