После последнего ответа я поняла, что делала ненужные вещи. Поэтому я попытался переписать его следующим образом, но получаю ошибку
CREATE OR REPLACE FUNCTION piljetter_system.update_search() RETURNS trigger AS $func_table$
BEGIN
INSERT INTO piljetter_system.search(consertid, document_tsvector)
SELECT new.consertid,
setweight(to_tsvector('english', coalesce(new.consertname, '')), 'A')
|| setweight(to_tsvector('english', coalesce(b.bandname , '')), 'B') -- Get bandname from id
|| setweight(to_tsvector('english', coalesce(s.stagename, '')), 'C') -- GET stagename from id
|| setweight(to_tsvector('english', coalesce(s.stagecountry, '')), 'D') -- GET stagecountry from id
|| setweight(to_tsvector('english', coalesce(s.stagecity, '')), 'E') -- GET stagecity from id
|| setweight(to_tsvector('english', coalesce(s.stagestreet, '')), 'F')
-- GET stagestreet from id
FROM piljetter_system.bands b, piljetter_system.stages s
WHERE b.bandid = new.bandid AND s.stageid = new.stageid;
RETURN NEW.document_tsvector;
END
$func_table$ LANGUAGE plpgsql;
Я запускаю функцию при вставке и обновляю в своей таблице conserts.
В результате я хочу вставить новая строка при поиске (consertid, document_tsvector), где consertid = new.consertid и document_tsvector = new.consertname, имя канала из new.bandid в stagename consert, stagecountry, stagecity, stagestreet из new.stageid.
ОШИБКА:
ОШИБКА: ЛСЭ: нераспознанный вес: 69 КОНТЕКСТ: SQL -sats: "INSERT INTO piljetter_system.search (consertid, document_tsvector) SELECT new.consertid, setweight (to_tsvector ('engli) sh ', coalesce (new.consertname,' ')),' A ') || setweight (to_tsvector (' engli sh ', coalesce (b.bandname,' ')),' B ') - Получить имя группы из идентификатора || setweight (to_tsvector ('engli sh', coalesce (s.stagename, '')), 'C') - GET stagename из идентификатора || setweight (to_tsvector ('engli * 1042) * ', coalesce (s.stagecountry,' ')),' D ') - GET stagecountry из id || setwei ght (to_tsvector ('engli sh', coalesce (s.stagecity, '')), 'E') - ПОЛУЧИТЬ stagecity от id || setweight (to_tsvector ('engli sh', coalesce (s.stagestreet, '')), 'F') - GET stagestreet с идентификатором FROM
piljetter_system.bands b, piljetter_system.stages s ГДЕ b.bandid = new.bandid AND s.stageid = new.stageid "PL / pg SQL -функция piljetter_system.update_search () rad 3 vid SQL -sats
// СТАРЫЙ ПОЧТА Я вроде новичок в функциях и триггерах, и я делаю проект в школе. Я хочу создать функцию триггера, которая обновит другую таблицу в зависимости от того, что я вставлю в свою таблицу conserts.
Моя проблема в том, что мне нужно stagename , stagecountry, stagecity, stagestreet из stageid, а также имя группы из bandid и вставьте его в столбец поиска document_tsvector. Ниже вы можете увидеть код, который мне нужно исправить. Мне не удается получить информацию из таблиц WITH внутри моей вставки.
CREATE FUNCTION piljetter_system.update_search() RETURNS trigger AS $func_table$
BEGIN
WITH band AS (
SELECT bandname FROM piljetter_system.bands WHERE bandid = new.bandid
), stage AS (
SELECT stagename, stagecountry, stagecity, stagestreet FROM piljetter_system.stages WHERE stageid = new.stageid
)
INSERT INTO piljetter_system.search(consertid, document_tsvector)
VALUES (new.consertid,
setweight(to_tsvector('english', coalesce(new.consertname, '')), 'A')
|| setweight(to_tsvector('english', coalesce(band.bandname , '')), 'B') -- Get bandname from id
|| setweight(to_tsvector('english', coalesce(stage.stagename, '')), 'C') -- GET stagename from id
|| setweight(to_tsvector('english', coalesce(stage.stagecountry, '')), 'D') -- GET stagecountry from id
|| setweight(to_tsvector('english', coalesce(stage.stagecity, '')), 'E') -- GET stagecity from id
|| setweight(to_tsvector('english', coalesce(stage.stagestreet, '')), 'F') -- GET stagestreet from id
);
RETURN NEW;
END
$func_table$ LANGUAGE plpgsql;
Изображения таблиц; полосы
консервы
сцены
поиск
Спасибо за любые помощь!