У меня проблемы с копированием данных bytea в триггере из одной таблицы в другую.
Исходный запрос выглядит так:
INSERT INTO "mytable" ("dataid","data")
VALUES
(123456,'\x3008d1a10a000000050000000000000000000000fb27000009090504010804060a08020b020c040000000000000000000000000001000000'::bytea);
Внутри триггера «перед вставкой» я получаю синтаксическую ошибку при попытке вставить это значение в другую таблицу. Причина в том, что внутри триггера значение NEW.data уже экранировано и выглядит как
0\010\321\241\012\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\373\'000\000\011\011\005\004\001\010\004\006\012\010\002\013\002\014\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000
Есть ли способ получить фактическое значение NEW.dataid (до приведения типа или в виде строки)?
p.s. Я не могу изменить исходный запрос или преобразовать или установить bytea_output в шестнадцатеричном формате в производственной базе данных
Код функции триггера:
BEGIN
PERFORM dblink('logsyellow', '
INSERT INTO datastorage(dataid,data)
VALUES(' || new.dataid || ','||new.data||')
');
RETURN new;
END;
Ошибка, которую я получаю:
PL/pgSQL function fn_replicate_data() line 4 at PERFORM
2014-07-08 13:24:35 GMT OPERATOR: INSERT INTO mytable ( dataid, data ) VALUES ( 123456, '\x3008d1a10a000000050000000000000000000000fb27000009090504010804060a08020b020c040000000000000000000000000001000000'::bytea );
2014-07-08 13:24:35 GMT ERROR: syntax error (at near "\")
2014-07-08 13:24:35 GMT CONTEXT: Error occurred on dblink connection named "unnamed": could not execute command.
SQL-operator: "SELECT DBLINK_EXEC('logsyellow','INSERT INTO datastorage(dataid,data) VALUES('||new.dataid||','''||new.data||''') ')"
NEW
в триггере на самом деле не экранирован. Пожалуйста, покажите код и сообщение об ошибке или воспроизводимый тестовый пример, который заставляет вас думать иначе. - person Daniel Vérité   schedule 10.07.2014