также требуется одно из этих расширений.
простой способ импортировать / экспортировать полнотекстовые поля в виде файлов?которые решают проблему «загрузить как несколько строк».
Попытка с SQL
COPY Я могу только преобразовать полный файл в полную таблицу, а не в одно текстовое поле, потому что каждая строка из COPY является необработанной.которые решают проблему сохранения, для сохранения полного XML-файла в файловой системе без изменения в бинарном представлении (
сохранение SHA1) и без других внешних процедур (как Unix использования).sed
Основная проблема на
экспорт, так что это заголовок этой страницы.PS: «доказательство того же файла» в оба конца - импорт, экспорт обратно и сравнение с оригиналом - можно получить с помощью
демонстрация; см. примеры ниже. Таким образом, естественным требованием также является проверка того же SHA1 с помощью SQL, избегая экспорта при выполнении простых задач проверки.sha1sum
Все примеры
в полный стол (это не то, что мне нужно),и проверить, что может
экспорт как тот же текст.PS: мне нужно импортировать один файл в одно поле и одну строку.
преобразование
полная таблица в один файл (это не то, что мне нужно)и проверить, что может
экспорт как то же текст.PS: мне нужен один ряд (из одного поля) в один файл.
Рассчитать хеш по SQL,
SHA1 поляДолжно быть.
тот же самый когда сравнишь ... остальное это не решение для меня.Следующие примеры показывают каждую проблему и не элегантный обходной путь.
1. Импорт
Проверка того, что оригинал и «назад» имеют абсолютно одинаковое содержание:
CREATE TABLE ttmp (x text);
COPY ttmp FROM '/tmp/test.xml' ( FORMAT text ); -- breaking lines lines
COPY (SELECT x FROM ttmp) TO '/tmp/test_back.xml' (format TEXT);
PS: кажется идеальным, но проблема здесь заключается в использовании множества строк. Реальное решение для импорта может импортировать файл в одну строку (и одно поле). Настоящее экспортное решение - это функция SQL, которая производит
sha1sum /tmp/test*.*
570b13fb01d38e04ebf7ac1f73dfad0e1d02b027 /tmp/test_back.xml
570b13fb01d38e04ebf7ac1f73dfad0e1d02b027 /tmp/test.xml
из одного ряда (из одного поля).test_back.xml
2. Преобразуйте полную таблицу в один файл
Используйте его для хранения XML:
... но не работает, как мы можем проверить
CREATE TABLE xtmp (x xml);
INSERT INTO xtmp (x)
SELECT array_to_string(array_agg(x),E'\n')::xml FROM ttmp
;
COPY (select x::text from xtmp) TO '/tmp/test_back2-bad.xml' ( FORMAT text );
не дает тот же результатsha1sum /tmp/test*.xml
, заТак же сделать переводtest_back2-bad.xml
.
в chr (10), используя внешний инструмент (perl, sed или любой другой)\n
Хорошо теперьperl -p -e 's/\\n/\n/g' /tmp/test_back2-bad.xml > /tmp/test_back2-good.xml
иметь тот же хэш ("570b13fb ..." в моем примере), чем оригинальный. Использование Perl - это обходной путь, как обойтись без него?test_back2-good.xml
3. SHA1 поля
Не решено, это не то же самое, что оригинал хэша ("570b13fb ..." в моем примере) ... Возможно,
SELECT encode(digest(x::text::bytea, 'sha1'), 'hex') FROM xtmp;
принудительное внутреннее представительство с::text
символы, поэтому решение будет напрямую приведено к\n
, но это неверный актерский состав. Другой обходной путь также не является решением,bytea
... Я пытаюсь
SELECT encode(digest( replace(x::text,'\n',E'\n')::bytea, 'sha1' ), 'hex')
FROM xtmp
а такжеCREATE TABLE btmp (x bytea)
, но ошибка («неизвестная подпись файла COPY»).COPY btmp FROM '/tmp/test.xml' ( FORMAT binary )
в чем проблема с текстовыми полями в п. 1 - совпадения с sha1sum кажутся нормальными, не так ли?