Прерывание текущей транзакции в PostgreSQL

Рейтинг: -1Ответов: 1Опубликовано: 03.04.2023

Прописал структуру базы данных, но столкнулся с проблемой, что слетает какая-то транзакция и весь процесс прерывается. Ошибку не вижу. Буду рад, если поможете.

   -- This script was generated by the ERD tool in pgAdmin 4.
   -- Please log an issue at https://redmine.postgresql.org/projects/pgadmin4/issues/new if 
   you find any bugs, including reproduction steps.
   BEGIN;


CREATE TABLE IF NOT EXISTS public."Студенты"
(
    "Номер студенческого билета" bigint NOT NULL,
    "Фамилия" character varying(30) NOT NULL,
    "Имя" character varying(30) NOT NULL,
    "Отчество" character varying(30),
    "Номер группы" character varying(10),
    "Дата рождения" date NOT NULL,
    "Почта" character varying(30) NOT NULL,
    "Дата выпуска" date,
    "Название дипломной работы" character varying(50) NOT NULL,
    PRIMARY KEY ("Номер студенческого билета")
);

CREATE TABLE IF NOT EXISTS public."Группа"
(
    "Номер группы" character varying(10) NOT NULL,
    "Форма обучения" character varying(20) NOT NULL,
    "Номер структурного подразделения" bigint NOT NULL,
    PRIMARY KEY ("Номер группы")
);

CREATE TABLE IF NOT EXISTS public."Структурное подразделение"
(
    "Номер подразделения" bigint NOT NULL,
    "Тип подразделения" character varying(64) NOT NULL,
    "Полное название" text NOT NULL,
    "Сокращенное название" character varying(20),
    "Руководитель" character varying(40) NOT NULL,
    PRIMARY KEY ("Номер подразделения")
);

CREATE TABLE IF NOT EXISTS public."Дисциплтина"
(
    "Номер дисциплины" bigint NOT NULL,
    "Название дисциплины" character varying(40) NOT NULL,
    "Структурное подразделение" bigint NOT NULL,
    "Преподаватель" bigint NOT NULL,
    PRIMARY KEY ("Номер дисциплины")
);

CREATE TABLE IF NOT EXISTS public."Диплом"
(
    "Название дипломной раборты" character varying(50) NOT NULL,
    "Студент" bigint NOT NULL,
    "Курирующий преподаватель" bigint NOT NULL,
    "Дисциплина" bigint NOT NULL,
    "Дата защиты" date NOT NULL,
    "Оценка" bigint NOT NULL,
    PRIMARY KEY ("Название дипломной раборты")
);

CREATE TABLE IF NOT EXISTS public."Преподаватель"
(
    "Номер преподавателя" bigint NOT NULL,
    "Фамилия" character varying(30) NOT NULL,
    "Имя" character varying(30) NOT NULL,
    "Отчество" character varying(30),
    "Ученая степень" character varying(30),
    "Ученое звание" character varying(40),
    "Должность" character varying(30) NOT NULL,
    "Стаж" bigint NOT NULL,
    PRIMARY KEY ("Номер преподавателя")
);

ALTER TABLE IF EXISTS public."Студенты"
    ADD FOREIGN KEY ("Название дипломной работы")
    REFERENCES public."Диплом" ("Название дипломной раборты") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Студенты"
    ADD FOREIGN KEY ("Номер группы")
    REFERENCES public."Группа" ("Номер группы") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Группа"
    ADD FOREIGN KEY ("Номер структурного подразделения")
    REFERENCES public."Структурное подразделение" ("Номер подразделения") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Структурное подразделение"
    ADD FOREIGN KEY ("Руководитель")
    REFERENCES public."Преподаватель" ("Номер преподавателя") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Дисциплтина"
    ADD FOREIGN KEY ("Структурное подразделение")
    REFERENCES public."Структурное подразделение" ("Номер подразделения") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Дисциплтина"
    ADD FOREIGN KEY ("Преподаватель")
    REFERENCES public."Преподаватель" ("Номер преподавателя") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Диплом"
    ADD FOREIGN KEY ("Дисциплина")
    REFERENCES public."Дисциплтина" ("Номер дисциплины") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Диплом"
    ADD FOREIGN KEY ("Студент")
    REFERENCES public."Студенты" ("Номер студенческого билета") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;


ALTER TABLE IF EXISTS public."Преподаватель"
    ADD FOREIGN KEY ("Номер преподавателя")
    REFERENCES public."Диплом" ("Курирующий преподаватель") MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    NOT VALID;

END;

Сама ошибка введите сюда описание изображения

Ответы

▲ 0

Ошибку надо смотреть Постгрессовскую, а не невменяемое сообщение об интерпретации этой ошибки Вашей программой.

https://dbfiddle.uk/R2P5WUJr

ERROR: foreign key constraint "Структурное подра_Руководитель_fkey" cannot be implemented

DETAIL: Key columns "Руководитель" and "Номер преподавателя" are of incompatible types: character varying and bigint.

В переводе на русский - несоответствие типов данных.

ERROR: there is no unique constraint matching given keys for referenced table "Диплом"

В переводе на русский - отсутствует уникальный индекс для формирования связи.