CREATE TRIGGER Sotrudnik_TRIG_ID . Не получается создать триггер
106dfs fdsfs
Ученик
(88),
на голосовании
2 года назад
Делаю работу некоторую по вузу в такой программе, как ERBuilder, существуют некоторые таблицы, а так же триггеры( на увеличение счётчика в поле с первичным ключом при добавлении записи). По какой-то непонятной причине, ERBuilder отказывается переносить мои триггеры в postgresql 13(pgadmin 4). Выдаёт ошибку, что отношения "sotrudnik" не существует. В то же время, при неудачном переносе БД из ERBuilder в pgadmin4 таблицы переносятся. Т.е отношение сотрудник существует в любом случае. Скрипт на создание таблицы и триггера выглядит следующим образом: CREATE TABLE Sotrudnik ( id_sotrudnik INTEGER NOT NULL, Dolznost CHAR(40), FIO CHAR(40), Telephone CHAR(40), Pasport CHAR(40), id_magazine INTEGER, CONSTRAINT PK_1 PRIMARY KEY (id_sotrudnik) ) ;
ALTER TABLE Sotrudnik ADD CONSTRAINT FK_Rabotaet FOREIGN KEY (id_magazine) REFERENCES Magazine (id_magazine) ON DELETE SET NULL ON UPDATE CASCADE ;
CREATE SEQUENCE id_sotrudnik_gen; CREATE OR REPLACE FUNCTION Sotrudnik_GEN_ID() RETURNS TRIGGER AS $Sotrudnik_GEN_ID$ BEGIN NEW.id _sotrudnik = nextval('id_sotrudnik_gen'::regclass); return NEW; END; $Sotrudnik_GEN_ID$ LANGUAGE plpgsql; CREATE TRIGGER Sotrudnik_TRIG_ID BEFORE INSERT ON Sotrudnik FOR EACH ROW EXECUTE PROCEDURE Sotrudnik_GEN_ID();
Ниже есть скриншот ошибки и скрипта отношения "sotrudnik"
Дополнен 2 года назад
Проблема решена. на строке BEFORE INSERT ON "название таблицы" Необходимы были двойные кавычки, и всё заработало.
не помогло... у меня заносится в схему public, но добавление ничем не помогло, к сожалению. сам текст триггера вроде правильно написан, я его переписывал раза 2
CREATE TABLE Sotrudnik (
id_sotrudnik INTEGER NOT NULL,
Dolznost CHAR(40),
FIO CHAR(40),
Telephone CHAR(40),
Pasport CHAR(40),
id_magazine INTEGER,
CONSTRAINT PK_1 PRIMARY KEY (id_sotrudnik)
)
;
ALTER TABLE Sotrudnik
ADD CONSTRAINT FK_Rabotaet
FOREIGN KEY (id_magazine)
REFERENCES Magazine (id_magazine)
ON DELETE SET NULL
ON UPDATE CASCADE
;
CREATE SEQUENCE id_sotrudnik_gen;
CREATE OR REPLACE FUNCTION Sotrudnik_GEN_ID()
RETURNS TRIGGER AS
$Sotrudnik_GEN_ID$
BEGIN
NEW.id _sotrudnik = nextval('id_sotrudnik_gen'::regclass);
return NEW;
END;
$Sotrudnik_GEN_ID$
LANGUAGE plpgsql;
CREATE TRIGGER Sotrudnik_TRIG_ID
BEFORE INSERT ON Sotrudnik
FOR EACH ROW EXECUTE PROCEDURE Sotrudnik_GEN_ID();
Ниже есть скриншот ошибки и скрипта отношения "sotrudnik"