Re: XML with invalid chars
От | Andrew Dunstan |
---|---|
Тема | Re: XML with invalid chars |
Дата | |
Msg-id | 4DB9A91B.7000401@dunslane.net обсуждение исходный текст |
Ответ на | Re: XML with invalid chars (Noah Misch <noah@leadboat.com>) |
Список | pgsql-hackers |
On 04/27/2011 05:30 PM, Noah Misch wrote: > >> I'm not sure what to do about the back branches and cases where data is >> already in databases. This is fairly ugly. Suggestions welcome. > We could provide a script in (or linked from) the release notes for testing the > data in all your xml columns. > Here's a draft. We'd need to come up with slightly modified versions for older versions of Postgres that don't sport array_agg() and unnest() cheers andrew create function cleanup_xml_table (schema_name text,table_name text, columns text[]) returns void languageplpgsql as $func$ declare cmd text; cond text; sep text := ''; alt text := ''; col text; forbiddentext := $$[\x1-\x8\xB\xC\xE-\x1F]$$; begin cmd := 'update ' || quote_ident(schema_name) || '.' || quote_ident(table_name) || ' set '; for col in select unnest(columns) loop cmd:= cmd || sep; cond := cond || alt; sep := ', '; alt := ' or '; cmd := cmd|| quote_ident(col) || '=' || 'regexp_replace(' || quote_ident(col) , || '::text, ' || quote_literal(forbiden) || ', $$$$, $$g$$)::xml'; cond := cond || quote_ident(col) || '::text ~ ' || quote_literal(forbidden); end loop; cmd := cmd || ' where ' || cond; execute cmd; return; end; $func$; select cleanup_xml_table(table_schema,table_name, cols) from (select table_schema::text, table_name::text, array_agg(column_name::text) as cols from information_schema.columns where data_type = 'xml' and is_updatable = 'yes' group by table_schema, table_name) xmltabs;
В списке pgsql-hackers по дате отправления: