PSQL дамп таблицы и использование памяти - PullRequest
2 голосов
/ 03 февраля 2011

Hello Я хотел бы сбросить таблицу postgres в CSV. База данных является локальной для (Linux) машины, на которой я работаю.

psql dev -U myusername -c "select * from control.mytable;" > mydata.csv

mytable довольно большой - около 120 миллионов строк. Я беспокоюсь, что это займет слишком много памяти, и когда я слежу за вершиной, использование памяти, кажется, продолжает увеличиваться, и поэтому я убиваю его, когда оно достигает определенной точки. Кто-нибудь знает, действительно ли это занимает ужасное количество памяти? Я знаю, что использование, сообщаемое top, может вводить в заблуждение непосвященных, таких как я. Есть ли альтернативы, которые не будут занимать так много памяти?

Ответы [ 3 ]

1 голос
/ 03 февраля 2011

Если вы сделаете это так, весь набор результатов будет создан на клиенте. Так что да, это действительно использует много памяти. Если вы хотите облегчить это, используйте курсор, чтобы получить результат в пакетном режиме. Или используйте COPY, в который уже встроен режим CSV.

1 голос
/ 03 февраля 2011

Если вы используете COPY, вам нужно перейти на стандартный вывод, если вы не запускаете его как пользователь postgres, тогда вы можете перейти непосредственно к файлу.

psql -U myusername dev -c "COPY  (select * from control.mytable) TO STDOUT WITH CSV HEADER;" > mydata.csv
1 голос
/ 03 февраля 2011

Почему бы вам не использовать COPY для создания CSV? COPY делает работу намного лучше.

...