Portál AbcLinuxu, 5. května 2025 03:00
<!-- soubor v utf8, without bom --> <input type="text"<-- tady je CRLF data-sometext="ěáíýžč">sql:
create table test (html text); insert into test values (pg_read_file('...')); select * from test;
<input type="text"\r data-sometext="ěáíýžč">Jde o tu značku \r. Postgres prostě převede chr(13) na string \r. Týká se to i ostatních escape sekvencí. Google nepomohl. Píše se tam o convert_from(), encode(), E'\r', ale to prostě není ono. Chtěl bych, aby tam byl vložen ten soubor tak, jak je na disku. Server i client jsou encoding utf8, database má encoding=utf8, collate='C', ctype='C'. Nějak to nechápu. \t \r \n jsou přece platné znaky v utf8. Díky.
vložen ten soubor tak, jak je na disku
hhhhmmmmmmmmmmmmmmmmmmm co ho jakoby přečíst binárně funkcí pg_read_binary_file hele a v db ho jako schovat v proměný typu bytea hele?????? :O ;D
CREATE OR REPLACE FUNCTION public.bytea_to_text(bytea) RETURNS text LANGUAGE sql AS $function$ SELECT convert_from($1, current_setting('server_encoding')) $function$
... Pak už na serveru je zkonvertovat na text nebo bytea,A o tohle mi jde. Jako bytea je to ok, ale bytea nemohu převést na text -> zase tam vzniknou řetězce \r\n.
select convert_from('\x48656c6c6f0d0a576f726c64','utf8');console:
Hello\r
world
copy (select convert_from('\x48656c6c6f0d0a576f726c64','utf8')) to 'testfile.txt';Soubor obsahuje:
Hello\r\nworld
postgres=# select 'Ahoj' || chr(13) || 'Svete'; ┌─────────────┐ │ ?column? │ ╞═════════════╡ │ Ahoj\rSvete │ └─────────────┘ (1 row)Kdezto
postgres=# select 'Ahoj' || chr(10) || 'Svete'; ┌──────────┐ │ ?column? │ ╞══════════╡ │ Ahoj ↵│ │ Svete │ └──────────┘ (1 row)Jde o to, ze Postgres nezna vyznam \r (chr(13)) a tak jej zobrazi jako \r. Postgres je Unixova databaze, tam se \r pro zalomeni nepouziva. Pokud se ho chcete zbavit, tak jej musite smazat.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.