Как я могу загрузить большой текстовый файл с помощью psql?

Я пытаюсь загрузить большой текстовый файл с разделителями-запятыми, используя инструмент psql. В файле .txt уже около 20 имен столбцов. Файл имеет размер около 2 ГБ и содержит около 14 миллионов строк. Горстка столбцов в основном пуста.

Файл .txt выглядит так (таблица):

boyID, girlID, dateID, actionID

“1234”,”4321”,”Jan 12 2008”,”abc123”

Я создал новую таблицу в psql, и здесь мы назовем ее «имя_таблицы». Я дал таблице немного другие имена столбцов, но все же в том же порядке, что и существующие имена столбцов.

Затем я выполнил следующую команду, чтобы попытаться скопировать данные из моего текстового файла в новую таблицу, которую я только что создал:

COPY tablename (boyid, girlid, dateid, actionid)
FROM 'C:\filename\textfile.txt'
WITH CSV HEADER DELIMITER AS ',';

Я получаю сообщение о том, что «невозможно выполнить статистику файла» с «неизвестной ошибкой».

Я также пытался использовать pgAdmin 4 и получаю то же сообщение. Я также должен отметить, что последнюю часть моего кода я получил из здесь.

P.S. Я очень новичок в этом. (Но мне это очень нравится!)

Спасибо всем заранее.


person SupaDupa    schedule 30.10.2018    source источник
comment
Вероятно, проблема с разрешением. У меня нет Windows, поэтому проверить эту гипотезу не могу. Но ваш экземпляр postgres, вероятно, работает под другим пользователем, чем вы, и не имеет доступа к этому файлу. И Postgresql не может проверить размер файла или другую статистику, что может вызвать эту ошибку. Запустите services.msc, найдите службу Postgresql и посмотрите, от имени какого пользователя она работает, а затем отредактируйте разрешения для этого каталога/файла, чтобы убедиться, что у пользователя есть разрешения.   -  person AlexanderMP    schedule 01.11.2018
comment
@AlexanderMP Я только что запустил services.msc и не увидел ничего, что позволило бы мне изменить разрешения. Но я выбрал опцию «Разрешить службе взаимодействовать с рабочим столом». Вроде ничего не менял. Кроме того, я запускаю Postgres как суперпользователь. Насколько я могу судить, все привилегии включены.   -  person SupaDupa    schedule 02.11.2018
comment
Найдите службу Postgresql и посмотрите (не меняйте) учетную запись, под которой она работает.   -  person AlexanderMP    schedule 02.11.2018
comment
Вероятно, вы запускаете клиент только как суперпользователь, что не имеет никакого эффекта, поскольку клиент отправляет запросы только на сервер, который работает как отдельный пользователь.   -  person AlexanderMP    schedule 02.11.2018
comment
@AlexanderMP Я посмотрел на всплывающее окно services.msc. Я вижу, что postgresql зарегистрирован как локальная система. Я также проверил свойства папки prgram files/Postgresql. Ничего не казалось необычным. Прежде чем я углублюсь в этот аспект, я, вероятно, должен отметить, что создал тестовый файл .txt и успешно загрузил его так же, как я пытаюсь сделать с рассматриваемым большим файлом. Итак, если я могу загрузить файл аналогичного типа из той же папки, используя тот же процесс, можем ли мы все же сказать, что это проблема с разрешением? Еще раз спасибо за попытку помочь мне с этим BTW.   -  person SupaDupa    schedule 02.11.2018
comment
Это интересно. Нет никаких причин, по которым файл большего размера может быть проблемой. Если у него точно такие же права доступа, как и у файла меньшего размера в том же каталоге, и нет странного имени (не символы ASCII или что-то в этом роде), то он переходит на действительно странную территорию. Попробуйте скопировать из программы, а не из файла. Напишите простой скрипт на Python, который читает файл и просто выводит его содержимое. Если с файлом что-то не так - python будет кричать.   -  person AlexanderMP    schedule 02.11.2018
comment
@AlexanderMP Еще раз спасибо. Уилл попробует предложение Python, мне просто нужно сначала изучить Python ... (черт возьми!). Я попробую и другое ваше предложение.   -  person SupaDupa    schedule 02.11.2018
comment
Python3 — это просто. with open ("path to file", 'r') as fp: print (fp.read()). Затем вы можете настроить другой побочный эффект запуска скрипта (заставить его создать другой файл, так же, как вы его читаете, только вспышка не «r», а «w»). Если скрипт запускается, но Postgresql все равно выдает ту же ошибку, то проблема в содержимом файла, в чем я сильно сомневаюсь, из-за ошибки, которую вы получили. Если скрипт не запускается, проблема, скорее всего, в разрешении. Неясные проблемы, подобные этой, почти всегда связаны с разрешениями. Вам нужно научиться ожидать возникновения проблем с разрешениями каждый божий день.   -  person AlexanderMP    schedule 02.11.2018
comment
В postgres 11 есть ошибка с файлами размером более 1G — см. решения, предлагаемые в stackoverflow.com/questions/53523051/   -  person dibs487    schedule 28.05.2019
comment
@dibs487 Спасибо. Я знал, что что-то не так. Мне больше не нужно это делать, но я обязательно учту это в следующий раз.   -  person SupaDupa    schedule 29.05.2019