Я восстанавливаю CSV
файл в базу данных с COPY
команда. Файл csv заархивирован. Я использую эту команду:
bunzip2 -c -d online-20110923000001.csv.bz2 | psql -U user -h 127.0.0.1 -d testdb -c "COPY data FROM STDIN WITH CSV HEADER;"
Через некоторое время он прекращается:
SSL error: ssl handshake failure
connection was lost to database
Файл журнала показывает:
2012-03-06 10:01:10 IRST STATEMENT: COPY data FROM STDIN WITH CSV HEADER;
2012-03-06 10:01:10 IRST LOG: SSL error: ssl handshake failure
2012-03-06 10:01:10 IRST CONTEXT: COPY data, line 8349702
2012-03-06 10:01:10 IRST STATEMENT: COPY data FROM STDIN WITH CSV HEADER;
2012-03-06 10:01:10 IRST LOG: could not receive data from client: Connection reset by peer
2012-03-06 10:01:10 IRST CONTEXT: COPY data, line 8349702
Может ли кто-нибудь помочь? Делает psql
использовать SSL? Как его отключить? Я перезапустил указанную выше команду, и теперь она снова работает нормально. Я не менял конфигурацию PostgreSQL. Я использую PostgreSQL 8.4.10 на Debian 6.
В некоторых документах предлагается отключить ssl-соединения с помощью опции sslmode, например:
$ psql "service=myservice sslmode=disable"
это также кажется стандартным способом, включая явную передачу аргументов, несколько примеров которой есть в Google;
$ bunzip2 -c -d online-20110923000001.csv.bz2 | \
psql "host=127.0.0.1 user=joe password=foo dbname=testdb sslmode=disable" \
-c "COPY data FROM STDIN WITH CSV HEADER;"
Есть также опция файла conf, поэтому вы можете поместить эти команды в /etc/postgresql-8.4/pg_service.conf
[myservice]
dbname=testdb
user=user
host=127.0.0.1
password=password.here
и это могло бы работать так;
bunzip2 -c -d online-20110923000001.csv.bz2 | psql "service=myservice sslmode=disable" -c "COPY data FROM STDIN WITH CSV HEADER;"
но он отклоняет этот вызов для меня, но он соответствует этим принципам, и у меня нет сервера postgresql под рукой, но я могу обновить ответ позже, когда я попаду в рабочий ящик.
пример страницы из руководства:
http://www.postgresql.org/docs/8.4/static/app-psql.html
(хм. Мне действительно следовало оставить этот вопрос кому-то, кто использует postgresql изо дня в день ... ;-)