Прежде всего, вы должны исправить ваши настройки. Как оказалось, мы имеем дело с PostgreSQL 8.1 здесь. Эта версия достигла конца жизни в 2010 . Вам нужно серьезно подумать о обновлении - или хотя бы напомнить парням, работающим на сервере. Текущая версия 9.1.
Команда, которую вы ищете:
psql arco -c "\copy (select url from urltable where scoreid=1 limit 25000) to '/h/u544835/data25000.csv'"
Предполагается, что ваша БД называется "arco". С учетом измененного вопроса (включая измененный порт).
Теперь я вижу версию 8.1 в вашем вопросе, но все противоречиво. Вам нужен Postgres 8.2 или новее , чтобы использовать запрос (вместо таблицы) с мета-командой \copy
.
Подробная информация о psql
в прекрасном руководстве.
Альтернативный подход, который должен работать с устаревшим PostgreSQL 8.1:
psql arco -o /h/u544835/data25000.csv -t -A -c 'SELECT url FROM urltable WHERE scoreid = 1 LIMIT 25000'
Найдите дополнительную информацию об этих параметрах командной строки в этом связанном вопросе на dba.SE .
С функцией (синтаксис совместим с 8.1)
Другим способом было бы создание серверной функции (если вы можете!), Которая выполняет COPY из временной таблицы (старый синтаксис - работает с pg 8.1):
CREATE OR REPLACE FUNCTION f_copy_file()
RETURNS void AS
$BODY$
BEGIN
CREATE TEMP TABLE u_tmp AS (
SELECT url FROM urltable WHERE scoreid = 1 LIMIT 25000
);
COPY u_tmp TO '/h/u544835/data25000.csv';
DROP TABLE u_tmp;
END;
$BODY$
LANGUAGE plpgsql;
А потом из оболочки:
psql arco -c 'SELECT f_copy_file()'
Заменить разделитель
\f
устанавливает разделитель полей. Я цитирую руководство снова:
-F сепаратор
--field-сепаратор = сепаратор * 1 046 *
Использовать разделитель в качестве разделителя полей для выровненного вывода.
Это эквивалентно \ pset fieldsep или \ f.
Или вы можете изменить разделитель столбцов в Excel, вот инструкции от MS .