Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 2
Регистрация: 22.04.2015
Сообщений: 70

Впервые пишу триггер, получаю ошибку

14.04.2020, 15:24. Показов 5461. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. при попытки создать выдает ошибку: ОШИБКА: незавершённая спецстрока с $ (примерное положение

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DROP TABLE IF EXISTS users; CREATE TABLE users ("name" TEXT);
DROP TABLE IF EXISTS logs; CREATE TABLE logs ( "text" text,  "added" TIMESTAMP WITHOUT TIME ZONE);
 
CREATE OR REPLACE FUNCTION add_to_log() RETURNS TRIGGER AS $$
DECLARE
    mstr VARCHAR(30);
    astr VARCHAR(100);
    retstr VARCHAR(254);
BEGIN
    IF  TG_OP = 'UPDATE' THEN
        astr = NEW.name;
        mstr := 'Update user ';
        retstr := mstr || astr;
        INSERT INTO logs(text,added) VALUES (retstr,NOW());
        RETURN NEW;
    ELSIF TG_OP = 'DELETE' THEN
        astr = OLD.name;
        mstr := 'Remove user ';
        retstr := mstr || astr;
        INSERT INTO logs(text,added) VALUES (retstr,NOW());
        RETURN OLD;
    END IF;
END;
$$ LANGUAGE plpgsql;
 
 
CREATE TRIGGER t_user
AFTER UPDATE OR DELETE ON users FOR EACH ROW EXECUTE PROCEDURE add_to_log();
Добавлено через 19 минут
Брал примеры из других источников, везде одна и та же проблема(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2020, 15:24
Ответы с готовыми решениями:

Пишу админку впервые
Впервые самостоятельно делаю админку сайта и пока получается не очень изящно. Вот что вышло пока, за несколько часов изучения доков: ...

Прошу совета, впервые пишу программу с БД
Всем добрый день. Впервые пишу программу с использованием ДБ (MySQL). Есть таблицы с внешними ключами, справочникам и т.д. 1)...

Отчёт по практике. Пишу впервые. Саму программу уже написала. Может у кого-нибудь есть примеры как писать такие отчёты?
Может у кого есть какие-нибудь примеры как правильно писать отчёт по учебной практике? С таким вообще впервые сталкиваюсь. То есть все...

6
14.04.2020, 15:54

Не по теме:

полагаю, что ваш вопрос логичнее было бы задать в разделе форума, посвященном либо "SQL вообще", либо конкретной используемой вами его реализации. здесь же раздел собственно про сами операционные системы (и их администрирование)...

0
 Аватар для freevoyajer
20 / 21 / 2
Регистрация: 09.04.2020
Сообщений: 125
14.04.2020, 20:39
Andrey_zlt, между баксами надо задать alias для триггера. Строки 4, 24
1
0 / 0 / 2
Регистрация: 22.04.2015
Сообщений: 70
02.06.2020, 13:56  [ТС]
Ругается как раз на эту строку
SQL
1
CREATE OR REPLACE FUNCTION add_to_log() RETURNS TRIGGER AS $$
Пробую дописать между с $ alias
SQL
1
CREATE OR REPLACE FUNCTION add_to_log() RETURNS TRIGGER AS $Test$
- все равно не работает

Уж простите мое не понимание, кто может скинуть работающий пример
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
02.06.2020, 15:19
полный текст ошибки приведите, пожалуйста

Добавлено через 53 секунды
а также вкратце обрисуйте, где и как вы вводите эти SQL-выражения.
было бы здорово и скрин приложить
0
0 / 0 / 2
Регистрация: 22.04.2015
Сообщений: 70
03.06.2020, 11:07  [ТС]
Разбираю очередной пример https://www.postgresqltutorial... ostgresql/

Тестовые БД
SQL
1
2
3
4
5
CREATE TABLE employees(
   id SERIAL PRIMARY KEY,
   first_name VARCHAR(40) NOT NULL,
   last_name VARCHAR(40) NOT NULL
);
SQL
1
2
3
4
5
6
CREATE TABLE employee_audits (
   id SERIAL PRIMARY KEY,
   employee_id INT NOT NULL,
   last_name VARCHAR(40) NOT NULL,
   changed_on TIMESTAMP(6) NOT NULL
);
Сам триггер:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE OR REPLACE FUNCTION log_last_name_changes()
  RETURNS TRIGGER AS
$BODY$
BEGIN
    IF NEW.last_name <> OLD.last_name THEN
         INSERT INTO employee_audits(employee_id,last_name,changed_on)
         VALUES(OLD.id,OLD.last_name,now());
    END IF;
 
    RETURN NEW;
END;
$BODY$;
 
CREATE TRIGGER last_name_changes
  BEFORE UPDATE
  ON employees
  FOR EACH ROW
  EXECUTE PROCEDURE log_last_name_changes();

В данном примере $$ содержат текст $BODY$ но ошибка все те же(скрин прилагается)
Миниатюры
Впервые пишу триггер, получаю ошибку  
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
03.06.2020, 15:32
что у вас за database manager? где вы это все вбиваете
можете скрин всего окна этого менеджера показать.

я не вижу ошибок в sql, ерунда какая-то.
полагаю, что из стандартной консольной утилиты psql все будет работать.
попробуйте еще pgadmin4 или dbeaver в качестве альтернативы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.06.2020, 15:32
Помогаю со студенческими работами здесь

Пишу клиент для HTTPS с использованием сокетов. При тесте получаю ответ 302 и непонятную строку location
Привет! Вообще пишу на яве, но вопрос явы не касается. Вопрос касается наверное больше веб программирования, но специального раздела не...

Почему я получаю ошибку
Подскажите, почему Maple 17 ругается когда я хочу найти предел (производную, интеграл) с промежуточными результатами. Когда я набираю все в...

Почему получаю ошибку
Добрый день ! Почему в строке name = reader.readLine(); получаю ошибку ? import java.util.*; import java.lang.*; ...

Получаю ошибку Forbidden
&lt;?php if(@$_REQUEST) echo '&lt;pre&gt; Содержимое $_FILES: '.print_r($_FILES,true).&quot;&lt;/pre&gt;&lt;hr&gt;&quot;; ?&gt; &lt;form action=&quot;&lt;?=$_SERVER?&gt;&quot;...

Из массива $_FILES получаю ошибку
Всем здрасте в чём трабл может быть, при загрузке файла из &lt;input type=&quot;file&quot;&gt; всё ок, но когда делаю drag and drop ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru