powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как избавится от символа табуляции при COPY ?
20 сообщений из 20, страница 1 из 1
Как избавится от символа табуляции при COPY ?
    #39878315
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Добрый день.

Задача:

считать файл, изменить в нем одну строку и сохранить измененный файл.


Делал так:

COPY tmp_table FROM 'D:\file.txt' delimiter '^';

delimiter указал чтбоы заменить стандартый в ввиде табуляции.


Затем UPDATE tmp_table

И пишу его обратно:

COPY (SELECT * FROM tmp_table) TO 'D:\file.txt' delimiter '^';




Проблема:

в строках где есть табуляция вместо табуляции получаю "\t\t\t\t\t".





Вопрос:


Как вместо \t\t\t\t\t в файл записать табуляцию как она была изначально?

В таблице tmp_table табуляция в нормальном виде.





Файл содержит табуляцию.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878376
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Для эксперимента можно конфиг постгреса загрузить и выгрузить куда-нить.


на выходе вместо:

# (change requires restart)

будет:

\t\t\t\t\t# (change requires restart)
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878384
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Ну или copy вообще в принципе не может записать символ табуляции в файл? о_О
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878406
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Пока не нашел решение
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878474
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2,

Зачем для этого вообще PostgreSQL??
Открой D:\file.txt в текстовом редакторе, например, Notepad++
и сделай замену подстроки "\t" на " " (табуляцию)
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878488
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
DSKaluginlr2,

Зачем для этого вообще PostgreSQL??
Открой D:\file.txt в текстовом редакторе, например, Notepad++
и сделай замену подстроки "\t" на " " (табуляцию)

Это не спортивно.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878490
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Ну и очень надо именно так сделать.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39878590
Фотография DSKalugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2Ну или copy вообще в принципе не может записать символ табуляции в файл? о_О
https://postgrespro.ru/docs/postgresql/11/sql-copy
В документации по COPY написано, что все настройки регулируются опциями FORMAT и WITH ( параметр [, ...] ) а не в конфиге сервера...
авторDELIMITER
Задаёт символ, разделяющий столбцы в строках файла. По умолчанию это символ табуляции в текстовом формате и запятая в формате CSV. Задаваемый символ должен быть однобайтовым. Для формата binary этот параметр не допускается.
Если этого не достаточно, значит выбранное решение не подходит!

lr2Задача: считать файл, изменить в нем одну строку и сохранить измененный файл.
Причем тут PostgreSQL вообще??
тут нужен текстовый редактор, ну или "для спортивности" - любой язык программирования например: python, C#, Pascal, Basic...
Вам в раздел "Программирование", а не "Использование СУБД"
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879107
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
DSKaluginlr2Ну или copy вообще в принципе не может записать символ табуляции в файл? о_О
https://postgrespro.ru/docs/postgresql/11/sql-copy
В документации по COPY написано, что все настройки регулируются опциями FORMAT и WITH ( параметр [, ...] ) а не в конфиге сервера...
авторDELIMITER
Задаёт символ, разделяющий столбцы в строках файла. По умолчанию это символ табуляции в текстовом формате и запятая в формате CSV. Задаваемый символ должен быть однобайтовым. Для формата binary этот параметр не допускается.
Если этого не достаточно, значит выбранное решение не подходит!

lr2Задача: считать файл, изменить в нем одну строку и сохранить измененный файл.
Причем тут PostgreSQL вообще??
тут нужен текстовый редактор, ну или "для спортивности" - любой язык программирования например: python, C#, Pascal, Basic...
Вам в раздел "Программирование", а не "Использование СУБД"


При том что это конфиг постгресса, доступа к ОС нет, только на 5432, а серверов где его нужно поменять чуть больше чем 100500.

Так что надо с помощью COPY.

Почему COPY не может записать файл в том же виде, в каком он был прочитан - непонятно.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879123
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
аутоконф не подходит.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879124
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
постгрес на винде.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879126
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879149
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2,

ps : copy ещё и хидер файлу пишет, есличо. кажецца 6 байтиков

но если проверить, как вам выше рекомендовали :

Код: sql
1.
2.
3.
4.
5.
6.
create table  tmp_table (f text) ;
COPY tmp_table FROM '/etc/postgresql/ХХ.ХХ/main/postgresql.conf' with (FORMAT 'csv', delimiter '^' ) ;

COPY tmp_table to '/tmp/testcopy.csv' with (FORMAT 'csv', delimiter '^' ) ;
--------------
$ less /tmp/testcopy.csv


-- вполне себе без эскейпинга выглядит


а так-то копи обязан искейпить по своей природе -- какой-то символ для разделителя полей вынь да положь. опять же возвраты каретки в полях. т.е. он ни разу не текстовый редактор
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879187
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
qwwqlr2,

ps : copy ещё и хидер файлу пишет, есличо. кажецца 6 байтиков

но если проверить, как вам выше рекомендовали :

Код: sql
1.
2.
3.
4.
5.
6.
create table  tmp_table (f text) ;
COPY tmp_table FROM '/etc/postgresql/ХХ.ХХ/main/postgresql.conf' with (FORMAT 'csv', delimiter '^' ) ;

COPY tmp_table to '/tmp/testcopy.csv' with (FORMAT 'csv', delimiter '^' ) ;
--------------
$ less /tmp/testcopy.csv


-- вполне себе без эскейпинга выглядит


а так-то копи обязан искейпить по своей природе -- какой-то символ для разделителя полей вынь да положь. опять же возвраты каретки в полях. т.е. он ни разу не текстовый редактор


Ого!!! Так работает !!!! По крайней мере, табуляция нормальная.




Большое спасибо!!!




... скажите, а этот самый хидер... с ним конфиг постгресса может быть? От жтого сам постгрес не упадет?
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879193
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
qwwq,

пустые строки в кавычках делает


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
# Memory units:  kB = kilobytes        Time units:  ms  = milliseconds
#                MB = megabytes                     s   = seconds
#                GB = gigabytes                     min = minutes
#                                                   h   = hours
#                                                   d   = days
""
""
#------------------------------------------------------------------------------
# FILE LOCATIONS
#------------------------------------------------------------------------------
""
...
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879197
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2Почему COPY не может записать файл в том же виде, в каком он был прочитан - непонятно.
Потому что не его это задача.

А вы мне кажется пытаетесь изобрести ALTER SYSTEM
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879204
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Melkijlr2Почему COPY не может записать файл в том же виде, в каком он был прочитан - непонятно.
Потому что не его это задача.

А вы мне кажется пытаетесь изобрести ALTER SYSTEM

нет, не пытаюсь и аутоконф меня не интересует.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879206
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
lr2Melkijпропущено...

Потому что не его это задача.

А вы мне кажется пытаетесь изобрести ALTER SYSTEM

нет, не пытаюсь и аутоконф меня не интересует.

21998703
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879500
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lr2нет, не пытаюсь и аутоконф меня не интересует.
Просто по описанию задачи очень похоже на то, для чего сделали alter system.

Но если не подходит, можно попробовать писать через copy в программу, заменяющую \t на символы табуляции.
Например:
Код: sql
1.
2.
3.
4.
postgres=# \copy (select E'1\t2\t3') to program 'sed ''s/\\t/\t/g'' > tab.txt'
COPY 1
postgres=# \! cat tab.txt
1	2	3


Думаю, что для windows можно найти sed или на любом скриптовом языке сделать однострочник.

И про COPY :
COPYВ настоящее время COPY TO никогда не выводит спецпоследовательности с восьмеричными или шестнадцатеричными кодами, однако выводит другие вышеперечисленные спецпоследовательности вместо управляющих символов .
К другим спецпоследовательностям относится в том числе и \t.
...
Рейтинг: 0 / 0
Как избавится от символа табуляции при COPY ?
    #39879746
lr2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lr2
Гость
Павел Лузановlr2нет, не пытаюсь и аутоконф меня не интересует.
Просто по описанию задачи очень похоже на то, для чего сделали alter system.

Но если не подходит, можно попробовать писать через copy в программу, заменяющую \t на символы табуляции.
Например:
Код: sql
1.
2.
3.
4.
postgres=# \copy (select E'1\t2\t3') to program 'sed ''s/\\t/\t/g'' > tab.txt'
COPY 1
postgres=# \! cat tab.txt
1	2	3


Думаю, что для windows можно найти sed или на любом скриптовом языке сделать однострочник.

И про COPY :
COPYВ настоящее время COPY TO никогда не выводит спецпоследовательности с восьмеричными или шестнадцатеричными кодами, однако выводит другие вышеперечисленные спецпоследовательности вместо управляющих символов .
К другим спецпоследовательностям относится в том числе и \t.

Спасибо, так нормально работает.

Пишу, потом меняю \t на табуляцию.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как избавится от символа табуляции при COPY ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]