LINUX.ORG.RU

posgresql удалить лишние символы

 , ,


0

1

есть в таблице лишние символы \r+, например

id  |          name          |              comment              |         created_at         |         updated_at         | client |  start_at  | expire_at  |      codes      | hidden |        kind         |                                                                                               keywords
-----+------------------------+-----------------------------------+----------------------------+----------------------------+--------+------------+------------+-----------------+--------+---------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 178 | Хрустим сырное ассорти | Недельная приоритизация пепсико\r+| 2021-07-19 15:52:01.906741 | 2021-07-19 15:52:21.821889 | AdLabs | 2021-07-22 | 2021-08-04 | {4690388008062} | f      | boost_in_categories |
     |                        |                                   |                            |                            |        |            |            |                 |        |                     |
 229 | Gillette               |                                   | 2021-11-16 10:40:06.384331 | 2021-11-16 14:09:18.382866 | P&G    | 2021-11-16 | 2021-11-30 | {7702018020706} | f      | search_promotion    | Кассеты, Кассеты для бритья, Кассеты для бритвы, Гель, Гель для бритья, Гель Gillette, Гель жилет, Гель джилет, Лосьон, Лосьон после бритья, Лосьон gillette, Дезодорант, Дезик, Дезодорант gilette\r+
     |                        |                                   |                            |                            |        |            |            |                 |        |                     |
(2 rows)

при дампе через psql -U user -d db --csv -c "select * from table" > table.csv

дамп выглядит так

id,name,comment,created_at,updated_at,client,start_at,expire_at,codes,hidden,kind,keywords
178,Хрустим сырное ассорти,"Недельная приоритизация пепсико^M
",2021-07-19 15:52:01.906741,2021-07-19 15:52:21.821889,AdLabs,2021-07-22,2021-08-04,{4690388008062},f,boost_in_categories,
229,Gillette ,,2021-11-16 10:40:06.384331,2021-11-16 14:09:18.382866,P&G,2021-11-16,2021-11-30,{7702018020706},f,search_promotion,"Кассеты, Кассеты для бритья, Кассеты для бритвы, Гель, Гель для бритья, Гель Gillette, Гель жилет, Гель джилет, Лосьон, Лосьон после бритья, Лосьон gillette, Дезодорант, Дезик, Дезодорант gilette^M
"

появляется символ ^M

подскажите как убрать эти лишние символы или из таблицы или из дамп файла?


Ну если проблема только со «\r», то ты можешь sed или каким нибудь скриптовым языком прост вырезать проблемный символ. Например:

python -c 'print(open("sample.txt", "rb").read().decode().replace("\r", ""))'

Ну а вообще я бы не использовал psql для дампа данных, а сделал короткий скрипт для выгрузки того, что надо

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

надо что бы в файле дампа не было разрывов (перенос строк) (в файле еще есть такие переносы) чтобы это

178,Хрустим сырное ассорти,"Недельная приоритизация пепсико^M
",2021-07-19 15:52:01.906741,2021-07-19 15:52:21.821889,AdLabs,2021-07-22,2021-08-04,{4690388008062},f,boost_in_categories,
229,Gillette ,,2021-11-16 10:40:06.384331,2021-11-16 14:09:18.382866,P&G,2021-11-16,2021-11-30,{7702018020706},f,search_promotion,"Кассеты, Кассеты для бритья, Кассеты для бритвы, Гель, Гель для бритья, Гель Gillette, Гель жилет, Гель джилет, Лосьон, Лосьон после бритья, Лосьон gillette, Дезодорант, Дезик, Дезодорант gilette^M
"

было как

178,Хрустим сырное ассорти,"Недельная приоритизация пепсико",2021-07-19 15:52:01.906741,2021-07-19 15:52:21.821889,AdLabs,2021-07-22,2021-08-04,{4690388008062},f,boost_in_categories,
229,Gillette ,,2021-11-16 10:40:06.384331,2021-11-16 14:09:18.382866,P&G,2021-11-16,2021-11-30,{7702018020706},f,search_promotion,"Кассеты, Кассеты для бритья, Кассеты для бритвы, Гель, Гель для бритья, Гель Gillette, Гель жилет, Гель джилет, Лосьон, Лосьон после бритья, Лосьон gillette, Дезодорант, Дезик, Дезодорант gilette"

мне вся таблица нужна, ее потом надо будет залить в bigquery, но из-за этих символов крашится заливка

python -c 'print(open("debug.log", "rb").read().decode().replace("\r", ""))'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 93: ordinal not in range(128)

крашится там где перенос строки

Garcia
() автор топика
Ответ на: комментарий от firkax

кодировка - UTF8

ну при загрузке в bigquery получаю ошибку

BigQuery error in load operation: Error processing job 'test-149816:bqjob_r4e20ae5d6d76dac5_0000017d7bbdcfc2_1': Error while reading data, error message: Error detected while parsing row starting at
position: 17045. Error: Missing close double quote (") character.
Failure details:
- Error while reading data, error message: CSV processing encountered
too many errors, giving up. Rows: 93; errors: 1; max bad: 0; error
percent: 0

смотрю 93 строку в файле

178,Хрустим сырное ассорти,"Недельная приоритизация пепсико^M
",2021-07-19 15:52:01.906741,2021-07-19 15:52:21.821889,AdLabs,2021-07-22,2021-08-04,{4690388008062},f,boost_in_categories,

если руками поправлю на

178,Хрустим сырное ассорти,"Недельная приоритизация пепсико",2021-07-19 15:52:01.906741,2021-07-19 15:52:21.821889,AdLabs,2021-07-22,2021-08-04,{4690388008062},f,boost_in_categories,

то 93 строку пропускает и ошибка уже на другой строке

Garcia
() автор топика

в общем сделал пока через replace

psql -U user -d db --csv -c "select id,regexp_replace(name, E'[\\n\\r]+', ' ', 'g') As name,regexp_replace(comment, E'[\\n\\r]+', ' ', 'g') As comment,created_at,updated_at,client,start_at,expire_at,codes,hidden,kind,regexp_replace(keywords, E'[\\n\\r]+', ' ', 'g') As keywords from table" > table.csv

может быть есть какой-то лучший вариант, но так дампится и заливается в BigQuery

Garcia
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.