@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();
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
Приведенный вами пример полностью работает.
Проверьте структуру таблиц, вы ее меняли?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы