Solución:
PostgreSQL no admite el almacenamiento de caracteres NULL ( 0x00) en los campos de texto (esto obviamente es diferente del valor NULL de la base de datos, que es totalmente compatible).
Fuente: http://www.postgresql.org/docs/9.1/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-UESCAPE
Si necesita almacenar el carácter NULL, debe usar un campo bytea, que debería almacenar todo lo que desee, pero no admitirá operaciones de texto en él.
Dado que PostgreSQL no lo admite en valores de texto, no hay una buena manera de conseguir que lo elimine. Podrías importar tus datos a bytea y luego convertirlos en texto usando una función especial (¿en perl o algo así, tal vez?), Pero probablemente será más fácil hacerlo en el preprocesamiento antes de cargarlo.
Solo regex hacia fuera bytes nulos:
s/x00//g;
Si está utilizando Java, puede simplemente reemplazar los caracteres x00 antes de la inserción como sigue:
myValue.replaceAll("u0000", "")
La solución fue proporcionada y explicada por Csaba en la siguiente publicación:
https://www.postgresql.org/message-id/1171970019.3101.328.camel%40coppola.muc.ecircle.de
Respectivamente:
en Java, puede tener un carácter “0x0” en su cadena, y eso es Unicode válido. Entonces eso se traduce al carácter 0x0 en UTF8, que a su vez no se acepta porque el servidor usa cadenas terminadas en nulo … así que la única forma es asegurarse de que sus cadenas no contengan el carácter ‘ u0000’.