Postgres COPY с полосками команд выходит из файла JSON (также загружает каждую строку как отдельную строку) - PullRequest
0 голосов
/ 14 сентября 2018

Если у меня есть следующий файл json

C:\PostgresStage>type test2.json
{"key":"Hello \"World\""}

, и я пытаюсь загрузить его в столбец json или текст, используя команду COPY, я получаю недопустимый JSON, потому что копия появляется, чтобы убрать escape-символы изфайл, как можно видеть ниже

postgres=# \d+ T1
                               Table "public.t1"
Column | Type | Collation | Nullable | Default | Storage  | Stats target | Description
--------+------+-----------+----------+---------+----------+--------------+-------------
 data   | text |           |          |         | extended |              |


postgres=# delete from T1;
DELETE 1
postgres=# copy t1 from 'c:\PostgresStage\test2.json';
COPY 1
postgres=# select  * from T1;
          data
-------------------------
 {"key":"Hello "World""}
 (1 row)


postgres=# select data::jsonb from T1;
ERROR:  invalid input syntax for type json
DETAIL:  Token "World" is invalid.
CONTEXT:  JSON data, line 1: {"key":"Hello "World...
postgres=#

Есть ли способ предотвратить это ..

Также, если у меня есть "симпатичный" JSON, такой как этот

C:\PostgresStage>type test2.json
{
  "key":"Hello \"World\""
}

Это загружается как 3 ряда.Можно ли в любом случае использовать копирование для загрузки всего файла в виде одной строки.

Наконец, есть ли возможность использовать COPY для передачи параметра в функцию, а не для загрузки строки в таблицу

1 Ответ

0 голосов
/ 16 сентября 2018

Для документов JSON, которые не «хорошо напечатаны», например, весь документ представляет собой одну строку в файле, взломать нужно использовать

 copy t1 from 'c:\PostgresStage\test2.json' csv quote e'\x01' delimiter e'\x02';

Благодаря http://adpgtech.blogspot.com/2014/09/importing-json-data.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...