Function scalar para Postgres, com objetivo de remover caracteres especiais, exatamente 33 caracteres de controle (especiais) menos o NULL ficando 32 ao todo, recomendo usar essa store function em procedimentos de ETL, migracao de dados ou em consultas que precisem remover esses tais caracteres da tabela ASCII. Fica aqui o compartilhamento do conhecimento.Abracos.---- Nome Artefato/Programa..: usf_rm_special_chars.sql-- Autor(es)...............: Emerson Hermann (emersonhermann at gmail.com) -- ........................: O Peregrino / http://emersonhermann.blogspot.com-- Data Inicio ............: 09/10/2008-- Data Atual..............: 24/07/2012-- Versao..................: 0.02-- Compilador/Interpretador: PostgreSql-- Sistemas Operacionais...: Linux/Windows-- SGBD....................: PostgreSql 8.x/9.x-- Kernel..................: Nao informado!-- Finalidade..............: store function para remocao de caracteres especiais do ASCII (33) caracteres nao imprimiveis -- OBS.....................: ----habilitando linguagem plpgsql --CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler; -- languages --SELECT * FROM pg_language;-- Apaga function se existir DROP FUNCTION IF EXISTS usf_rm_special_chars (TEXT);CREATE OR REPLACE FUNCTION usf_rm_special_chars (stexto TEXT) RETURNS TEXT AS$$DECLARE stextonovo TEXT;BEGIN -- Tabela ASCII -- Caracteres nao imprimiveis, 33 ao total, menos o NUL ficam 32 -- hex d abr ctl descricao -- 00 0 NUL ^@ Null - Nulo desativado, pois o nulo no postgres funciona em forma de cascata stextonovo := translate(stexto, chr(1),''); -- 01 1 SOH ^A Start of Header - Inicio do cabecalho stextonovo := translate(stextonovo, chr(2),''); -- 02 2 STX ^B Start of Text - Inicio do texto stextonovo := translate(stextonovo, chr(3),''); -- 03 3 ETX ^C End of Text - Fim do texto stextonovo := translate(stextonovo, chr(4),''); -- 04 4 EOT ^D End of Tape - Fim de fita stextonovo := translate(stextonovo, chr(5),''); -- 05 5 ENQ ^E Enquire - Interroga identidade do terminal stextonovo := translate(stextonovo, chr(6),''); -- 06 6 ACK ^F Acknowledge - Reconhecimento stextonovo := translate(stextonovo, chr(7),''); -- 07 7 BEL ^G Bell - Campainha stextonovo := translate(stextonovo, chr(8),''); -- 08 8 BS ^H Back-space - Espaco atras stextonovo := translate(stextonovo, chr(9),''); -- 09 9 HT ^I Horizontal Tabulation - Tabulacao horizontal stextonovo := translate(stextonovo, chr(10),''); -- 0A 10 LF ^J Line-Feed - Alimenta linha stextonovo := translate(stextonovo, chr(11),''); -- 0B 11 VT ^K Vertical Tabulation - Tabulacao vertical stextonovo := translate(stextonovo, chr(12),''); -- 0C 12 FF ^L Form-Feed - Alimenta formulario stextonovo := translate(stextonovo, chr(13),''); -- 0D 13 CR ^M Carriage-Return - Retorno do carro (enter) stextonovo := translate(stextonovo, chr(14),''); -- 0E 14 SO ^N Shift-Out - Saida do shift (passa a usar caracteres de baixo da tecla - minusculas, etc.) stextonovo := translate(stextonovo, chr(15),''); -- 0F 15 SI ^O Shift-In-Ent. no shift (passa a usar carac. de cima da tecla: maiusculas, carac. especiais, etc.) stextonovo := translate(stextonovo, chr(16),''); -- 10 16 DLE ^P Data-Link Escape stextonovo := translate(stextonovo, chr(17),''); -- 11 17 DC1 ^Q Device-Control 1 stextonovo := translate(stextonovo, chr(18),''); -- 12 18 DC2 ^R Device-Control 2 stextonovo := translate(stextonovo, chr(19),''); -- 13 19 DC3 ^S Device-Control 3 stextonovo := translate(stextonovo, chr(20),''); -- 14 20 DC4 ^T Device-Control 4 stextonovo := translate(stextonovo, chr(21),''); -- 15 21 NAK ^U Neg-Acknowledge - Nao-reconhecimento stextonovo := translate(stextonovo, chr(22),''); -- 16 22 SYN ^V Synchronous Idle stextonovo := translate(stextonovo, chr(23),''); -- 17 23 vETB^W End-of-Transmission Block stextonovo := translate(stextonovo, chr(24),''); -- 18 24 CAN ^X