Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 博士后的bytea没有正确逃脱?_Postgresql_Bytea - Fatal编程技术网

Postgresql 博士后的bytea没有正确逃脱?

Postgresql 博士后的bytea没有正确逃脱?,postgresql,bytea,Postgresql,Bytea,我在将触发器中的bytea数据从一个表复制到另一个表时遇到问题 原始查询如下所示: INSERT INTO "mytable" ("dataid","data") VALUES (123456,'\x3008d1a10a000000050000000000000000000000fb27000009090504010804060a08020b020c040000000000000000000000000001000000'::bytea); 在“before insert”触发器中,我在尝试

我在将触发器中的bytea数据从一个表复制到另一个表时遇到问题

原始查询如下所示:

INSERT INTO "mytable" ("dataid","data")
VALUES 
(123456,'\x3008d1a10a000000050000000000000000000000fb27000009090504010804060a08020b020c040000000000000000000000000001000000'::bytea);
在“before insert”触发器中,我在尝试将此值插入另一个表时遇到语法错误。原因是触发器内的值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、 在生产数据库上,我不能更改原始查询或将bytea_输出转换或设置为十六进制

触发功能代码:

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
中的bytea列实际上没有转义。请显示代码和错误消息或可复制的测试用例,让您有不同的想法。嗨,Daniel,刚才添加了功能代码和错误。我认为它已经被转义了,因为“raisenotice”+sql查询显示INSERT-INTO-datastorage(dataid,data)值(123456,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);@Natalie它作为格式化的一部分被转义为字符串以供显示。@Craig它在构建dblink查询的阶段或之前被转义,否则我不会得到语法错误。原始查询是正确的,不会产生错误。
PERFORM dblink('logsyellow','INSERT INTO datastorage(dataid,data)   VALUES(' || new.dataid || ','||quote_literal(new.data)||') ')