dblink und bytea

Probleme und Fragen zum Thema Trigger und Funktionen.
Antworten
mash
Neuer Benutzer
Beiträge: 21
Registriert: Di 21. Feb 2012, 16:29

dblink und bytea

Beitrag von mash »

Hallo,
ich möchte gerne über dblink_exec einen Datensatz in eine DB schreiben (siehe Beispiel unten). Dabei handelt es sich um ein bytea Feld, was leider Probleme macht.
Ich vermute, dass beim Aufruf von dblink_exec dieses bytea in Text umgewandelt wird und die darin enthaltenen einfachen Hochkomma das Problem verursachen.

Weiß jemand eine Möglichkeit das irgendwie zu escapen ohne aufwändiges en-/decoding o.ä ?

Beispiel:
bytea Feld -->my_data.data = \000\307\216_\202\001\000 \000\000\000 \000\000\000_\000\000\000\003\000\000\000\001;\232\312\000\000\000\000\000\000\000\000_\000\000\000\000\001\000\340\002\0008g\002\000\001\214\017defect 03,hj,hj\220\034\000\214\006Normal\000\004g\002''\307\214\005Arialg\002g\015\340'\340d\001\000\000\010\216\376\001\036\202\001\000 \000\000\000 \000\000\001\036\000\000\000\003\000\000\000\002;\232\312\000\000\000\000\000\000\000\001\036\000\000\000\000\001\000\340\002\000w\000\001\214\006Normal\214\006Normal\000\002g\011'g\011\307\214\015Lucida Grandeg\002g\014g\004'g\010'g\020'g

Code: Alles auswählen

FOR my_data in SELECT memo.* FROM dblink('productive', 'SELECT urno, memo_data from memo where urno BETWEEN 1 AND 50') as memo(urno integer,memo_data bytea)
   LOOP
   PERFORM dblink_exec('archiv','INSERT INTO archiv ("source_db_name","source_db_host","source_table","source_urno","data") values('''|| dbname || ''',''' || dbhost || ''',''' || table_name || ''',' || my_data.urno || ',' || my_data.data || ')');
   END LOOP;



Fehler ist wie folgt:
FEHLER: Syntaxfehler bei »\«
CONTEXT: Error occurred on dblink connection named "archiv": could not execute command.
SQL-Anweisung »SELECT dblink_exec('archiv','INSERT INTO archiv ("source_db_name","source_db_host","source_table","source_urno","data") values('''|| dbname || ''',''' || dbhost || ''',''' || table_name || ''',' || my_data.urno || ',' || my_data.data || ')')«
PL/pgSQL function archive_db(character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying) line 33 at PERFORM


********** Fehler **********

FEHLER: Syntaxfehler bei »\«
SQL Status:42601
Kontext:Error occurred on dblink connection named "archiv": could not execute command.
SQL-Anweisung »SELECT dblink_exec('archiv','INSERT INTO archiv ("source_db_name","source_db_host","source_table","source_urno","data") values('''|| dbname || ''',''' || dbhost || ''',''' || table_name || ''',' || my_data.urno || ',' || my_data.data || ')')«
PL/pgSQL function archive_db(character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying,character varying) line 33 at PERFORM


Vielen Dank im Voraus.

Gruß Manuel

Antworten