@MaxLich
java developer

Почему у меня выдаёт ошибка при запуске тригггера?

Здравствуйте. Смотрю видеокурсы по SQL. Тренируюсь на PostgreSQL. И в одном уроке разбираются триггерные функции. Я скопировал код с этого видео. Попробовал всё исполнить. Триггера, связанные с вставкой новой записи и её удалением, работают исправно. А вот триггеры, которые должны запускаться при изменении записи - выдают ошибку. Ошибка такая:

loftblog_lesson4=# UPDATE profiles SET name = 'Alex' WHERE user_id = 2;
ERROR: record "old" has no field "user_id"
CONTEXT: SQL statement "UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id"
PL/pgSQL function update_user() line 3 at SQL statement
SQL statement "UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id"
PL/pgSQL function update_user() line 3 at SQL statement


А вот сам код для создания таблиц и триггера:
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(32) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL UNIQUE,
    created_at TIMESTAMP NOT NULL,
    updated_at TIMESTAMP NOT NULL);

CREATE TABLE IF NOT EXISTS profiles (
    id SERIAL PRIMARY KEY,
    user_id INTEGER NOT NULL,
    name VARCHAR(255),
    last_name VARCHAR(255),
    photo_path VARCHAR(255),
    about TEXT,
    FOREIGN KEY (user_id) REFERENCES users(id)
    );

CREATE OR REPLACE FUNCTION update_user() RETURNS TRIGGER
 AS $$
 BEGIN
    UPDATE users SET updated_at = NOW() WHERE id = OLD.user_id;

    RETURN OLD;
 END;
 $$ LANGUAGE plpgsql;

DROP TRIGGER IF EXISTS tr_update_user ON profiles;

CREATE TRIGGER tr_update_user AFTER UPDATE ON profiles
FOR EACH ROW  EXECUTE PROCEDURE update_user();
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
Приведенный вами пример полностью работает.
Проверьте структуру таблиц, вы ее меняли?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы